2015-07-10 232 views
1

我試圖訪問通過SOCKS代理運行YARN的防火牆Hadoop集羣。羣集本身並未使用代理連接 - 只有在本地計算機(例如筆記本電腦)上運行的我的客戶端通過ssh -D 9999 [email protected]連接到可以看到Hadoop羣集的計算機。通過socks代理將YARN作業提交到遠程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這樣的偉大工程。然而,當我嘗試提交紗作業時,它失敗,我可以在日誌中看到,該節點不能彼此交談:

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節點試圖通過襪子代理進行通信,這顯然是失敗的,因爲沒有代理服務器存在於每個主機上。有沒有辦法解決這個問題,除了建立一個專用的代理服務器?

回答

1

您說得對,Hadoop節點不得使用SOCKS代理進行通信。您可以通過在羣集端最後的上標記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> 

很顯然,你必須重新啓動集羣服務。

+1

感謝您的回答 - 我已經在此期間想到了這一點,並且它對hadoop MapReduce作業正常,但對Spark作業不起作用。對於後者,似乎Spark忽略了套接字工廠類的「最終」設置,因爲它仍在嘗試使用代理進行通信。我已經打開了一個關於它的火花jira:https://issues.apache.org/jira/browse/SPARK-9825但到目前爲止沒有迴應 – Rok

相關問題