之前一直是在搭建好的集群上使用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
注意:yarn的capacity-scheduler.xml文件修改配置保证资源调度按照内存+CPU模式
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<!-- <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value> -->
<value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>
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界面
为了更好的分析应用,也需要相应的打开yarn的日志功能, 修改配置文件yarn-site.xml
<property>
<description>Whether to enable log aggregation</description>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
yarn查看日志命令: yarn logs -applicationId <application_1550502527158_0001>
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-default.conf配置
spark.yarn.jars=hdfs://mycluster/user/spark/spark_jars/*.jar
后续提交spark on yarn任务就不需要每次都上传jar包到hdfs