1. 程式人生 > >spark1.4.0基於yarn的安裝心得體會

spark1.4.0基於yarn的安裝心得體會

目前線上用的是cdh5.3.2中內嵌的spark1.2.0版本,該版本BUG還是蠻多的,尤其是一些spark sql的BUG,簡直不能忍。spark1.4.0新出的支援SparkR,其他用R的同時很期待試用該版本看看sparkR好不好用,於是乎打算升級一下spark的版本。

以前都是在cloudera manager中一件安裝的spark,感覺好輕鬆愉快,現在要獨立安裝一個基於yarn的spark版本,還是有點挑戰的。

下面記錄了一下安裝步驟(基於cdh5.3.2的獨立安裝spark1.4.0):

編譯指定hadoop版本的spark,原始碼目錄下面有一個make-distribution.sh:    
./make-distribution.sh --name cdh5.3.0 --skip-java-test --tgz -Pyarn -Dhadoop.version=2.5.0-cdh5.3.0  -Dscala-2.10.4 -Phive -Phive-thriftserver
編譯完成後,在原始碼目錄下會生成一個spark-1.4.0-bin-cdh5.3.0.tgz
隨便選擇一個叢集的節點(注意,其實只需要部署一臺機器就行了,不需要所有都部署,這就是spark on yarn的好處啊。。。不然你裝standlong模式的spark叢集就辛苦了。)

將安裝包解壓到/opt下面:
cd /opt    
hadoop fs -get /user/hdfs/tmp/spark-1.4.0-bin-cdh5.3.0.tgz
tar zxvf spark-1.4.0-bin-cdh5.3.0.tgz
在conf目錄下面建立spark-env.sh和spark-default.conf配置檔案:
cp spark-env.sh.template spark-env.sh
cp spark-defaults.conf.template spark-defaults.conf
 
 
 vi spark-env.sh,最下面新增一行:
 export HADOOP_CONF_DIR=/opt/cloudera/parcels/CDH/lib/hive/conf
 
 vi spark-defaults.conf,新增如下內容:
 spark.eventLog.dir=hdfs://n1:8020/user/spark/applicationHistory2
spark.eventLog.enabled=true
spark.yarn.jar=hdfs://n1:8020/user/spark/share/lib/spark-assembly-1.4.0-hadoop2.5.0-cdh5.3.0.jar
spark.scheduler.mode=FAIR
spark.scheduler.allocation.file=/etc/spark/fairscheduler.xml
spark.serializer=org.apache.spark.serializer.KryoSerializer
spark.shuffle.consolidateFiles=true
spark.sql.shuffle.partitions=100

#spark1.5好像不用配置下面這個userClassPathFirst=true了。
spark.driver.userClassPathFirst=true
spark.streaming.blockInterval=100
spark.cleaner.ttl=90000
spark.yarn.historyServer.address=http://n2:18088
spark.driver.extraLibraryPath=/opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/lib/hadoop/lib/native
spark.executor.extraLibraryPath=/opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/lib/hadoop/lib/native
 
 自己寫了一個wordcount程式,打了個jar包叫sparkdemo.jar
 
 hadoop fs -get /user/spark/share/lib/sparkdemo.jar
 yarn-client模式提交
 ./bin/spark-submit --driver-class-path lib/spark-assembly-1.4.0-hadoop2.5.0-cdh5.3.0.jar --class com.hupu.dace.spark.WordCount     --master yarn-client --proxy-user hdfs --num-executors 3     --driver-memory 4g     --executor-memory 2g     --executor-cores 1     lib/sparkdemo.jar /tmp/xiaojun/input /tmp/xiaojun/output
yarn-cluster模式提交
./bin/spark-submit --driver-class-path lib/spark-assembly-1.4.0-hadoop2.5.0-cdh5.3.0.jar --class com.hupu.dace.spark.WordCount     --master yarn-cluster --proxy-user hdfs --num-executors 3     --driver-memory 4g     --executor-memory 2g     --executor-cores 1     lib/sparkdemo.jar /tmp/xiaojun/input /tmp/xiaojun/output

這裡還有一個問題沒解決,就是yarn的historyServer 18088埠還是沒法訪問,但是可以訪問spark自己的historyServer,是18080埠.

如何啟動historyServer?首先在HDFS上建立一個目錄:/user/spark/applicationHistory2,授權所有使用者和組都能訪問,即777.

然後再spark安裝目錄下面有一個sbin目錄,下面有一個start-history-server.sh,啟動命令如下:
./start-history-server.sh hdfs://n1:8020/user/spark/applicationHistory2

停止則為./stop-history-server.sh

sparkR啟動指令碼,支援hive:
bin/sparkR --jars lib/spark-assembly-1.4.0-hadoop2.5.0-cdh5.3.0.jar --conf spark.sql.hive.metastore.jars=lib/spark-assembly-1.4.0-hadoop2.5.0-cdh5.3.0.jar --master yarn-client