2016-08-04 94 views
0

在我的羣集CDH5.4中,我有一個位於私有和公共網絡上的網關節點。該羣集位於專用網絡上。 我想使用sqoop從公用網絡上的數據庫服務器中獲取數據。當我發出命令時,地圖任務失敗如何啓用datanode訪問超出其專用網絡?

Error: java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLRecoverableException: IO Error: Unknown host specified

我知道羣集節點無法訪問公共網絡上的數據庫服務器。

考慮到這種公共 - 專用網絡架構在業界很常見,使datanode能夠在公共網絡上訪問服務器的正確方法是什麼?

任何幫助是非常讚賞....

網關節點

$>route -v 
Kernel IP routing table 
    Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
    10.248.200.0 *    255.255.255.0 U  0  0  0 bond_internal 
    192.168.196.0 *    255.255.252.0 U  0  0  0 bond_external 
    link-local  *    255.255.0.0  U  1007 0  0 bond_external 
    link-local  *    255.255.0.0  U  1008 0  0 bond_internal 
    default   192.168.196.1 0.0.0.0   UG 0  0  0 bond_external 

的Datanode

$>route -v 
Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
10.248.200.0 *    255.255.255.0 U  0  0  0 bond0 
link-local  *    255.255.0.0  U  1008 0  0 bond0 
+0

也許通過網關節點的代理或使用Sentry –

+0

不完全是一個hadoop問題,似乎像網絡路由問題。您可以添加運行sqoop的節點的路由表嗎?使用'route -v'。 – ViKiG

+0

@vkgade - 感謝您的回覆。我添加了路由表信息。 – scott

回答

0

事情你需要檢查。

Sqoop運行的節點是否有正確的網關節點。您可以檢查使用的路由表,並使用route命令

route add default gw IP_OF_GATEWAY_NODE NETWORK_INTERFACE_NAME_ON_THIS_NODE #the device name is basically what your ifconfig shows 

接下來需要驗證網關節點是否真正轉發數據包進行更改。爲此,您需要編輯一個文件/etc/sysctl.conf(隨着您的Linux發行版發生更改,此文件位於不同的路徑中)。要永久設置的IP轉發on,你將不得不改變

net.ipv4.ip_forward=1 # if it '0' set as '1' and restart the network. 

值暫時設定IP轉發on,可以運行(重啓後就會變回原來的值)

sysctl -w net.ipv4.ip_forward=1