之前一直是在搭建好的集羣上使用spark。 這次需要在新的集羣上使用spark,但是集羣只安裝了hdfs和yarn組件。經過別人提醒,可以直接spark on yarn運行,經過收集資料,彙總如下:
1. spark on yarn配置
有關spark on yarn的配置參考:https://blog.csdn.net/qq_21439395/article/details/80678372
在配置好hdfs和yarn之後,只需要簡單的配置 spark-env.sh文件
export JAVA_HOME=/usr/local/jdk1.8.0_131
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
經過簡單配置之後,即可使用spark-submit把spark任務提交給yarn
spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 1 \
--queue thequeue \
examples/jars/spark-examples*.jar \
10
2. spark on yarn的spark-history-server配置
參考資料:https://blog.csdn.net/oufuji/article/details/50370490
首先配置spark-defaults.conf,指定spark事件log記錄地址
spark.eventLog.dir=hdfs://mycluster/user/spark/applicationHistory
spark.eventLog.enabled=true
spark.yarn.historyServer.address=http://snn.hadoop:18018
配置spark-evn.sh環境變量
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18018 -Dspark.history.fs.logDirectory=hdfs://mycluster/user/spark/applicationHistory"
啓動spark-history-server
$ start-history-server.sh
配置完之後,提交的yarn程序即可通過yarn的web ui連接到spark的ui界面
3. spark on yarn的jar包共享
經過前面兩步之後,我們已經可以正常提交任務,查看應用情況,但是每次提交都需要把jar包打包到hdfs,爲此,可以把共享的jar包放在hdfs路徑,通過配置環境變量,讓應用從hdfs上獲取。
參考資料:
- https://blog.csdn.net/lxhandlbb/article/details/54410644
- https://blog.csdn.net/coder__cs/article/details/79301969
上傳jar包到hdfs對應目錄
$ hdfs dfs -mkdir spark_jars
$ hdfs dfs -put $SPARK_HOME/jars/* spark_jars/
spark-env.sh配置
spark.yarn.jars=hdfs://mycluster/user/spark/spark_jars/*.jar
後續提交spark on yarn任務就不需要每次都上傳jar包到hdfs