本文是對spark1.6.0分佈式集羣的安裝的一個詳細說明,旨在幫助相關人員按照本說明能夠快速搭建並使用spark集羣。
2. 安裝環境
本安裝說明的示例環境部署如下:
IP | 外網IP | hostname | 備註 |
10.47.110.38 | 120.27.153.137 | iZ237654q6qZ | Master、Slaver |
10.24.35.51 | 114.55.56.190 | iZ23pd81xqaZ | Slaver |
10.45.53.136 | 114.55.11.55 | iZ23mr5ukpzZ | Slaver |
10.24.35.76 | 114.55.56.228 | iZ23v8c9mqpZ | Slaver |
各軟件版本:
- Java:jdk-8u60-linux-x64.tar.gz
- Scala:2.10.4
- Spark:1.6.0
- Hadoop:CDH-5.4.5-1.cdh5.4.5.p0.7
3. 安裝前準備
3.1 在每臺機添加hosts(root用戶)
修改文件/etc/hosts(或者/etc/sysconfig/network),添加以下內容:
10.47.110.38 iZ237654q6qZ
10.24.35.51 iZ23pd81xqaZ
10.45.53.136 iZ23mr5ukpzZ
10.24.35.76 iZ23v8c9mqpZ
注意:主機名必須和hosts文件中的名稱保持一致!
3.2 每個spark節點上創建一個用戶(root用戶)
# adduser spark
# passwd spark
密碼統一設爲:spark
3.3 每臺機安裝java(root用戶)
3.3.1 下載java
3.3.2 解壓到指定目錄
# tar -zxvf jdk-8u60-linux-x64.tar.gz -C /usr/local/
建立軟鏈接以方便以後更改java版本
# ln -sf/usr/local/jdk1.8.0_60/ /usr/local/jdk
3.3.3 配置環境變量
更改全局配置文件/etc/profile
# vim /etc/profile
在文件最後添加:
export JAVA_HOME=/usr/local/jdk //添加java home
export PATH=.:$JAVA_HOME/bin:$PATH //將scala路徑添加進環境變量
注意:在修改完profile後,需要輸入以下命令進行更新,否則不會立即生效:
# source /etc/profile
3.3.4 驗證
輸入java -version驗證是否已配置成功
# java -version
3.4 每臺機安裝scala(root用戶)
3.4.1 下載scala
下載地址:http://www.scala-lang.org/download/2.10.4.html
3.4.2 解壓到指定目錄
# tar -zxvf scala-2.10.4.tgz -C /usr/local/
建立軟鏈接以方便以後更改scala版本
# ln -sf /usr/local/scala-2.10.4/ /usr/local/scala
3.4.3 配置環境變量
更改全局配置文件/etc/profile
# vim /etc/profile
在JAVA_HOME最後添加:
export SCALA_HOME=/usr/local/scala //添加scala home
更改path路徑,添加scala環境
export PATH=.:$JAVA_HOME/bin: $SCALA_HOME/bin:$PATH //將scala路徑添加進環境變量
注意:在修改完profile後,需要輸入以下命令進行更新,否則不會立即生效:
# source /etc/profile
3.4.4 驗證
輸入scala -version驗證是否已配置成功
# scala -version
3.5 每臺機安裝ssh並配置無密碼連接(安裝openssh使用root,其他使用spark)
3.5.1 安裝openssh
# yum install -y openssh-server
注意:從這裏開始使用spark用戶,執行命令su - spark切換到spark用戶
3.5.2 生成密鑰
# ssh-keygen -t rsa -P ''(然後回車)
執行完這個命令後,會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
3.5.3 分享公鑰到其他主機
在每臺機上將公鑰拷貝到要免登陸的機器上
# ssh-copy-id iZ237654q6qZ
# ssh-copy-id iZ23pd81xqaZ
# ssh-copy-id iZ23mr5ukpzZ
# ssh-copy-id iZ23v8c9mqpZ
3.5.4 驗證是否免密碼
輸入以下命令,如果沒有提示輸入密碼就直接登入,則配置成功:
# ssh iZ23mr5ukpzZ
驗證成功後退出登錄:
# exit
3.6 每臺機關閉防火牆等服務(root)
# service iptables stop
# chkconfig iptables off //關閉開機啓動防火牆
4 spark部署(spark用戶)
4.1 下載spark
下載地址:http://mirrors.hust.edu.cn/apache/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz
4.2 配置spark環境變量
解壓到/home/spark目錄
$ tar -zxvfspark-1.6.0-bin-hadoop2.6.tgz
建立軟鏈接
$ ln -sf spark-1.6.0-bin-hadoop2.6spark
配置環境變量,編輯/home/spark目錄下的bash_profile
$ vim ~/.bash_profile
添加以下兩行(如果原來裏面最後有path相關的兩行,先刪掉):
export SPARK_HOME=/home/spark/spark
export PATH=.:$SPARK_HOME/bin:$PATH
配置完成後同樣的source以下,使之生效
$ source ~/.bash_profile
4.3 配置spark
首先新建好spark用到的目錄(使用root用戶,只有這裏使用root用戶,每臺機):
$ mkdir /data //存儲數據的總目錄
$ mkdir /data/spark //spark數據存儲主目錄
$ mkdir /data/spark/local //spark存儲本地數據的目錄
$ mkdir /data/spark/log //spark存儲日誌的目錄
$ mkdir /data/spark/work //spark存儲worker日誌等信息的目錄
$ chmod -R 777 /data/ //將/data目錄權限設置爲最大
4.3.1 配置spark-env.sh
Spark-env.sh文件中配置了spark運行時的一些環境、依賴項以及master和slaver的資源配置。
$ cd spark //進入spark目錄
$ cp conf/spark-env.sh.template conf/spark-env.sh //將spark-env.sh.template複製一份爲spark-env.sh
因爲我們是部署standalone模式,可以參考配置文件中註釋項的提示:
添加以下內容:
配置項 |
說明 |
SPARK_LOCAL_IP= 10.47.110.38 |
本機ip或hostname(不同主機配置不同) |
SPARK_LOCAL_DIRS=/data/spark/local |
配置spark的local目錄 |
|
|
SPARK_MASTER_IP= 10.47.110.38 |
master節點ip或hostname |
SPARK_MASTER_WEBUI_PORT=8080 |
web頁面端口 |
SPARK_WORKER_CORES=2 |
Worker的cpu核數 |
SPARK_WORKER_MEMORY=8g |
worker內存大小 |
SPARK_WORKER_DIR=/data/spark/work |
worker目錄 |
|
|
export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=4" |
spark-shell啓動使用核數 |
export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=604800" |
worker自動清理及清理時間間隔 |
|
|
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://systex/user/spark/applicationHistory" |
history server頁面端口、備份數、log日誌在HDFS的位置(注意,需要在HDFS上新建對應的路徑) |
|
|
SPARK_LOG_DIR=/data/spark/log |
配置Spark的log日誌目錄 |
|
|
export JAVA_HOME=/usr/local/jdk/ |
配置java路徑 |
export SCALA_HOME=/usr/local/scala/ |
配置scala路徑 |
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop |
配置hadoop的lib路徑 |
export HADOOP_CONF_DIR=/etc/hadoop/conf |
配置hadoop的配置路徑 |
4.3.2 配置spark-defaults.conf
Spark-default.conf文件中主要配置的是與在spark上運行任務有關的一些參數,以及對executor等的配置。
添加以下內容:
配置項 |
說明 |
spark.eventLog.enabled true |
eventLog是否生效(建議開啓,可以對已完成的任務記錄其詳細日誌) |
spark.eventLog.compress true |
eventLog是否啓用壓縮(cpu性能好的情況下建議開啓,以減少內存等的佔用) |
spark.eventLog.dir hdfs://systex/user/spark/applicationHistory |
eventLog的文件存放位置,與spark-env.sh中的history server配置位置一致 |
|
|
spark.broadcast.blockSize 8m |
廣播塊大小 |
spark.executor.cores 1 |
Executor的cpu核數 |
spark.executor.memory 512m |
Executor的內存大小 |
spark.executor.heartbeatInterval 20s |
Executor心跳交換時間間隔 |
spark.files.fetchTimeout 120s |
文件抓取的timeout |
|
|
spark.task.maxFailures 6 |
作業最大失敗次數(達到此次數後,該作業不再繼續執行,運行失敗) |
spark.serializer org.apache.spark.serializer.KryoSerializer |
設置序列化機制(默認使用java的序列化,但是速度很慢,建議使用Kryo) |
spark.kryoserializer.buffer.max 256m |
序列化緩衝大小 |
|
|
spark.akka.frameSize 128 |
Akka調度幀大小 |
|
|
spark.default.parallelism 20 |
默認並行數 |
|
|
spark.network.timeout 300s |
最大網絡延時 |
|
|
spark.speculation true |
Spark推測機制(建議開啓) |
4.3 配置slaves
在conf目錄下有slaves文件,在其中配置slaves的hostname
$ cp conf/slaves.template conf/slaves
$ vim conf/slaves
添加各個slave節點的hostname:
至此,我們就將spark需要配置的東西全部配置完成,將spark整個目錄複製到其他主機:
$scp -r /home/spark/spark-1.6.0-bin-hadoop2.6 spark@iZ23pd81xqaZ:/home/spark/
$scp -r /home/spark/spark-1.6.0-bin-hadoop2.6 spark@iZ23mr5ukpzZ:/home/spark/
$ scp -r/home/spark/spark-1.6.0-bin-hadoop2.6 spark@iZ23v8c9mqpZ:/home/spark/
在相應的主機創建對應的spark軟鏈接,並將spark-env.sh中SPARK_LOCAL_IP改爲對應的ip即可。
5. 啓動spark並測試(spark用戶)
現在我們啓動spark,在master節點執行以下命令:
$ cd /home/spark/spark
$ ./sbin/start-all.sh //啓動master和slaves
$ ./sbin/start-history-server.sh //啓動history server
使用jps命令查看是否成功啓動:
檢查進程是否啓動【在master節點上出現“Master”,在slave節點上出現“Worker”】
## 監控頁面URL http:// 120.27.153.137:8080/
運行spark-pi:
spark-submit --master spark://10.47.110.38:7077 --classorg.apache.spark.examples.SparkPi --name Spark-Pi /home/spark/spark/lib/spark-examples-1.6.0-hadoop2.6.0.jar
能看到如下結果:
成功!
原文地址:http://www.w2bc.com/article/115838