即使照著文檔一步一步來也會遇到不少坑,好吧,還是詳細記錄一下!
部署Spark集群
實驗環境
三臺虛擬機:
操作系統:Ubuntu 14.04 LTS
靜態ip地址,分別是:192.168.1.10-12
使用spark 1.5.1官網預編譯的版本
設置計算機名
把三臺計算機名分別設置為mater、slave1、slave2. 并且修改/etc/hostname和/etc/hosts兩個文件是它們相互能ping到。
配置ssh無密碼登錄
從master上要訪問到slave1和slave2,并能控制他們的啟動和停止,需要配置一下ssh無密碼登錄。由于暫時不需要相互訪問,只需讓master能訪問slave1和slave2即可,需要相互訪問的話,按照同樣道理添加??戳藙e人的講解和介紹,主要是分為以下幾步:
生成master的公鑰
ssh-keygen -t rsa
一路回車,不需要輸入密碼. 執行該操作將在/home/user/.ssh下生成id_rsa, id_rsa.pub文件,其中id_rsa.pub是公鑰。
把公鑰文件分發到各個slave上面
進入.ssh文件夾,使用scp命令把id_rsa.pub文件拷貝到各個slave:
scp id\_rsa.pub shenshen@192.168.1.11:~/.ssh/
scp id\_rsa.pub shenshen@192.168.1.12:~/.ssh/
這里要注意,.ssh文件夾如果不存在的話要自己創建,并且注意該文件夾的權限設置應該是700.
在各個slave上面,把剛拷貝過來的id_rsa.pub文件加入到authorized_keys文件中
authorized_keys文件默認是不存在的,使用下面的命令把剛拷貝過來的id_rsa.pub文件加入到authorized_keys文件中:
cat id\_dsa.pub >> ~/.ssh/authorized\_keys
設置文件和目錄權限
設置authorized_keys權限
chmod 600 authorized\_keys
設置.ssh目錄權限
chmod 700 -R .ssh
好了,這樣就可以通過ssh訪問不需要密碼了!通過下面的命令測試:
ssh localhost
ssh slave1
ssh slave2
這里是個不好理解的地方:A將公鑰發給B,不是說讓B來訪問A,而是A就可以訪問B了。太霸道了!也就是說B不能在.ssh文件夾下的authorized_keys保留A的公鑰,如保存就是把自己讓給別人來訪問!
啟動Spark集群
在master主機上啟動spark standalone集群之前還需要配置conf/slaves文件,spark提供了一個模板,首先拷貝一份出來:
cp slaves.template slaves
vim slaves
里面默認就只有一行localhost,把各個slaves的hostname加進去:
# A Spark Worker will be started on each of the machines listed below.
localhost
slave1
slave2
然后啟動集群:
sbin/start-all.sh
通過瀏覽器訪問http://192.168.1.10:8080,可以監控spark Standalone集群的情況。
<img src="./media/image1.jpeg" width="1299" height="591" />
啟動不成功,錯誤消息是"JAVA_HOME is not set"
這是個奇怪的問題,每個虛擬機的/etc/profile中都設置了JAVA_HOME的環境變量,但啟動集群時還是出錯。在網上搜了一下,普遍遇到這個問題,解決方法是,要在每臺虛擬機的$SPARK_HOME/conf/spark-env.sh中添加一行,重新設置變量如下:
export JAVA\_HOME=/usr/lib/jvm/jdk1.8.0\_60
參考