通过socks代理将Yarn作业提交到远程hadoop集群

o2g1uqev  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(433)

我正在尝试通过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)

哪里 host1 以及 host2 都是hadoop集群的一部分。
我猜hadoop节点也在尝试通过socks代理进行通信,这显然是失败的,因为每个主机上都不存在代理服务器。除了设置一个专用的代理服务器之外,还有其他方法可以解决这个问题吗?

fcy6dtqo

fcy6dtqo1#

是的,hadoop节点不能使用socks代理进行通信。您可以通过在集群端final上标记socketfactory设置来实现这一点。
core-site.xml 在集群上,将最后一个标记添加到默认的socketfactory属性:

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

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

相关问题