在配置Spark StandAlone Mode的時候,我遇到了Slave無法向正確的Master IP發(fā)送數(shù)據(jù)的問題。通常這類問題都來源于沒有正確配置./conf/spark_env.sh文件,只要在這個文件里定義好了SPARK_LOCAL_IP和SPARK_MASTER_HOST,就可以解決這個問題。而我設(shè)置了configure文件之后問題依然存在。
原因在于Master Node上有多個網(wǎng)卡,每個網(wǎng)卡又有多個IP地址。在Spark的底層實現(xiàn)中,它調(diào)用了JAVA的InetAddress.getlocalhost()函數(shù)來獲得其他節(jié)點的IP地址,這個函數(shù)就是通過Host name來找到對應(yīng)的Host IP所以這個函數(shù)只會返回眾多IP地址中的一個,所以不一定是你想要的正確地址。
解決的方法也非常簡單,JAVA的這個函數(shù)會到Linux中的/etc/hosts這個文件中去指定Host name到Host IP的映射:
192.168.20.203 Cluster_Node_3
192.168.20.204 Cluster_Node_4
這樣就建立起了Host Name和Host IP之間的映射關(guān)系,JAVA的函數(shù)就會返回正確的IP地址了。