通过 socks 代理将 YARN 作业提交到远程 Hadoop 集群
Submit YARN jobs to remote Hadoop cluster via socks proxy
我正在尝试通过 SOCKS 代理访问受防火墙保护的 Hadoop 集群 运行 YARN。集群本身没有使用代理连接——只有我的本地机器(例如笔记本电脑)上的客户端 运行 通过 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 代理进行通信,这显然失败了,因为每个主机上都不存在代理服务器。除了设置专用代理服务器之外,还有其他方法可以解决此问题吗?
你说得对,Hadoop 节点不能使用 SOCKS 代理进行通信。您可以通过在集群端标记 SocketFactory 设置来实现这一点 final.
在集群上的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>
显然,您必须重启集群服务。
我正在尝试通过 SOCKS 代理访问受防火墙保护的 Hadoop 集群 运行 YARN。集群本身没有使用代理连接——只有我的本地机器(例如笔记本电脑)上的客户端 运行 通过 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 代理进行通信,这显然失败了,因为每个主机上都不存在代理服务器。除了设置专用代理服务器之外,还有其他方法可以解决此问题吗?
你说得对,Hadoop 节点不能使用 SOCKS 代理进行通信。您可以通过在集群端标记 SocketFactory 设置来实现这一点 final.
在集群上的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>
显然,您必须重启集群服务。