之前在自己的筆記本上運行 Python 代碼,有些要運行一天多,一關機就前功盡棄,很不方便,所以才有租用阿里雲服務器的想法,用了同學租的一台用了兩天又覺得不夠使,索性就自己租了三台,配置如下,三台一共約 320 塊。
CPU: 1核
內存: 2048 MB
操作系統: Ubuntu 14.04 64位
帶寬計費方式: 按固定帶寬
當前使用帶寬: 1Mbps
實例規格: ecs.s1.small
實例規格族: 標准型 s1
我們使用開源免費軟件 PuTTY 連接到三台服務器上進行 Spark 的配置。
1、修改主機名
用 vi 打開 etc/hostname,三台服務器的主機名依次修改為 master、slave1 和 slave2。
# vi /etc/hostname
2、配置 hosts 文檔
# vi /etc/hosts
在 hosts 文件中添加三台服務器的 IP 地址和對應的主機名。
120.56.121.132 master
120.35.219.36 slave1
120.45.201.137 slave2
配置之后 ping 一下用戶名看是否生效
# ping master # ping slave1 # ping slave2
3、關閉防火牆
# sudo ufw disable
4、配置 SSH 無密碼通信
# sudo apt-get install openssh-server # sudo apt-get update # ssh-keygen -t rsa -P "" //提示選擇目錄時,按 Enter 鍵,那么 id_rsa 和 id_rsa.pub 會生成到 root/.ssh 目錄下。在根目錄下使用 ls -a 命令可以看到該目錄。
在三台服務器上執行:cd root/.ssh,cat id_rsa.pub>>authorized_keys,將 id_rsa.pub 追加到 authorized_keys。
將 slave1 和 slave2 的 id_rsa.pub 拷貝到 master(傳輸文件可用 scp),並將其內容追加到 master 的 root/.ssh/authorized_keys 中。同理,將 slave1 和 master 的 id_rsa.pub 追加到 slave2 的 authorized_keys,將 slave2 和 master 的 id_rsa.pub 追加到 slave1 的 authorized_keys。
驗證SSH無密碼通信
ssh master
ssh slave1
ssh slave2
5、安裝 JDK
在 JDK 官網下載 jdk-8u77-linux-x64.tar.gz。在 windows 7 下使用 Xftp 把該 JDK 文件傳到三台雲服務器的 /usr/local/java 下,解壓。
# cd /usr/local/java # sudo tar xzvf jdk-8u77-linux-x64.tar.gz
然后,編輯 ~/.bashrc 文件,在文件最后添加:
export JAVA_HOME=/usr/local/java/jdk1.8.0_77 export JRE_HOME=/usr/local/java/jdk1.8.0_77/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH export JDK_HOME=/usr/local/java/jdk1.8.0_77
為了使修改生效,執行:
# source ~/.bashrc
檢驗 JDK 是否安裝成功
# java -version
6、安裝 Scala
下載 scala-2.11.8.tgz,解壓到 /usr/local 文件夾,並將文件夾改名為 scala。
# tar xvzf scala-2.11.8.tgz # ln -s scala-2.11.8 scala
打開 ~/.bashrc,添加
export SCALA_HOME=/usr/local/scala
export PATH=$PATH:$SCALA_HOME/bin
7、安裝 Spark
下載 spark-1.6.1-bin-hadoop2.6.tgz,解壓到 /usr/local 文件夾,並將文件夾改名為 spark。
# tar xvzf spark-1.6.1-bin-hadoop2.6.tgz # ln -s spark-1.6.1-bin-hadoop2.6 spark
修改配置文件 /usr/local/spark/conf 中:
# mv spark-env.template spark-env.sh # mv log4j.properties.template log4j.properties # mv slaves.template slaves
在 spark-env.sh 結尾添加
export SCALA_HOME=/usr/local/scala
修改 slaves 文件
master
slave1
slave2
打開 ~/.bashrc,添加
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
為了使 .bashrc 修改生效,執行:
# source ~/.bashrc
8、啟動 Spark 集群
# start-all.sh //因為上面的 .bashrc 文件中配置了 usr/local/spark/sbin 路徑,所以這里可直接執行
輸入 # jps 命令看 master 下是否出現 master 和 worker,在 slave 節點下是否出現 worker,出現則說明 Spark 集群啟動成功。
9、運行 Spark 實例
# run-example SparkPi 10
然后出來一大串的運行信息,其中有運行結果。
10、調整日志級別
為了減少信息干擾,可以調整日志級別,修改 spark/conf/log4j.properties,把 log4j.rootCategory=INFO,console 改為 log4j.rootCategory=WARN,console
然后再運行
# run-example SparkPi 10
可以看到結果清爽多了。
但對於初學者來說,INFO 也是很有參考價值的,所以,建議把日志級別調整為 INFO。
完畢。
參考資料:
1、http://www.mak-blog.com/spark-on-yarn-setup-multinode.html
2、張丹陽, 曹維焯, 薛志雲,等. 阿里雲實現Spark的分布式計算[J]. 福建電腦, 2015(2):23-24.