通过SOCKS代理连接到spark

时间:2015-01-20 13:51:21

标签: scala ssh proxy apache-spark

TL; DR 如何通过SOCKS代理将本地驱动程序连接到spark群集。

我们有一个现场火花群集,它位于阻止大多数端口的防火墙后面。我们有ssh访问权限,因此我可以使用ssh -D 7777 ...创建SOCKS代理。

当我的浏览器使用代理时,它可以正常浏览web-UI,但我不知道如何让本地驱动程序使用它。

到目前为止,我有这个,显然没有配置任何代理:

val sconf = new SparkConf()
  .setMaster("spark://masterserver:7077")
  .setAppName("MySpark")
new SparkContext(sconf)

在抛出异常之前,会将这些消息记录16次。

15/01/20 14:43:34 INFO Remoting: Starting remoting
15/01/20 14:43:34 ERROR NettyTransport: failed to bind to server-name/ip.ip.ip.ip:0, shutting down Netty transport
15/01/20 14:43:34 INFO RemoteActorRefProvider$RemotingTerminator: Shutting down remote daemon.
15/01/20 14:43:34 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.
15/01/20 14:43:34 INFO RemoteActorRefProvider$RemotingTerminator: Remote daemon shut down; proceeding with flushing remote transports.
15/01/20 14:43:34 INFO RemoteActorRefProvider$RemotingTerminator: Remoting shut down.

1 个答案:

答案 0 :(得分:2)

您的最佳镜头可能是将本地端口转发到远程7077 ,然后setMaster("spark://localhost:nnnn"),其中nnnn是您转发的本地端口。

要执行此操作,请使用ssh -L(而不是-D)。 我无法保证这将起作用,或者如果它能够工作,它将继续工作,但至少它将使您无需使用这个端口的实际代理。可能会破坏它的东西,主要是初始连接可能触发的辅助连接。我还没有对此进行测试,但除非有二级连接,否则原则上它应该有效。

此外,这不能回答你问题的TL版本,但是由于你有SSH访问权限,它更有可能工作。