通过socks proxy

时间:2015-07-10 15:28:41

标签: hadoop proxy yarn

我正在尝试通过SOCKS代理访问运行YARN的防火墙Hadoop集群。群集本身不使用代理连接 - 只有在本地计算机(例如笔记本电脑)上运行的客户端才能通过ssh -D 9999 user@gateway-host连接到可以看到Hadoop群集的计算机。

在Hadoop配置core-site.xml(在我的笔记本电脑上),我有以下几行:

<property>
    <name>hadoop.socks.server</name>
    <value>localhost:9999</value>
</property>
<property>
    <name>hadoop.rpc.socket.factory.class.default</name>
    <value>org.apache.hadoop.net.SocksSocketFactory</value>
</property>

以这种方式访问​​HDFS效果很好。但是,当我尝试提交YARN作业时,它失败了,我可以在日志中看到节点无法相互通信:

java.io.IOException: Failed on local exception: java.net.SocketException: Connection refused; Host Details : local host is: "host1"; destination host is: "host2":8030; 
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:772)

其中host1host2都是hadoop群集的一部分。

我想正在发生的事情是hadoop节点也试图通过socks代理进行通信,这显然是失败的,因为每个主机上都没有代理服务器。除了设置专用的代理服务器之外,有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

您是对的,Hadoop节点不得使用SOCKS代理进行通信。您可以通过在群集端 final 上标记SocketFactory设置来实现此目的。

在群集上的core-site.xml中,将 final 标记添加到默认的SocketFactory属性中:

    <property>
        <name>hadoop.rpc.socket.factory.class.default</name>
        <value>org.apache.hadoop.net.StandardSocketFactory</value>
        <final>true</final>
    </property>

显然,您必须重新启动群集服务。