通过代理访问hadoop

我有一套hadoop集群,部署在外网的服务器上。很遗憾的是,这些机器不能从办公区的网络直接访问。必须先ssh到一个跳板机,然后再ssh过去。

之前的我做法是,部署两套,内网一套,公网一套。但是这样对我来说,维护成本无疑很大。因为这些hadoop就我一个人用啊!

好在hadoop支持socks。只需要在core-site.xml中加上

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

就可以了。

这是因为hadoop用的是java.io的Socket接口,而不是java.nio。而java.io是利用socket factory来创建socket,允许别人通过创建新的factory来支持socks代理、http代理等等。并且JDK内置了socks代理的支持。我觉得这种做法很值得参考。

剩下的事情就交给ssh -D好了.

此博客中的热门博文

在windows下使用llvm+clang

少写代码,多读别人写的代码

tensorflow distributed runtime初窥