本文是基於已經搭建好且正常運行的Spark以及Hadoop集群上進行,為了支持Spark on Yarn是需要額外的配置。
1、Spark on Yarn配置
在搭建好的Spark上修改spark-env.sh文件:
# vim $SPARK_HOME/conf/spark-env.sh
添加以下配置:
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
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日志配置
在yarn-site.xml開啟日志功能:
<property>
<description>Whether to enable log aggregation</description>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property> <name>yarn.log.server.url</name> <value>http://master:19888/jobhistory/logs</value> </property>
修改mapred-site.xml:
<property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property>
修改spakr-defaults.conf文件:
spark.eventLog.dir=hdfs:///user/spark/applicationHistory spark.eventLog.enabled=true spark.yarn.historyServer.address=http://master:18018
修改spark-evn.sh環境變量:
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18018 -Dspark.history.fs.logDirectory=hdfs:///user/spark/applicationHistory"
yarn查看日志命令: yarn logs -applicationId <application_1590546538590_0017>
啟動Hadoop和Spark歷史服務器:
# mapred --daemon start historyserver # $SPARK_HOME/sbin/start-history-server.sh
查看效果:
1)先進入YARN管理頁面查看Spark on Yarn應用,並點擊如下圖的History:
2)跳轉到如下的Spark版本的WordCount作業頁面:
3)如上已經對Spark on Yarn日志功能配置成功。
4) SparkShell詞頻統計測試:
./bin/spark-shell --master yarn --deploy-mode client --total-executor-cores 3 --num-executors 3 --executor-memory 4g --executor-cores 1
在master:8080查看spark任務:
執行WordCount任務:
scala> val text = sc.textFile("hdfs:///user/liangmingbiao/wordcount_test.txt") scala> text.flatMap(s => s.split(" ")).map(s => (s, 1)).reduceByKey((x, y) => x+y).collect().foreach(kv => println(kv))
從master:8080進入查看Job任務歷史:
3、調優之Jar包共享
這是SPARK on YARN調優的一個手段,節約每個NODE上傳JAR到HDFS的時間,在默認情況:Spark on YARN要用Spark jars(默認就在Spark安裝目錄),但這個jars也可以再HDFS任何可以讀到的地方,這樣就方便每次應用程序跑的時候在節點上可以Cache,這樣就不用上傳這些jars。
解決方案:
# jar cv0f spark-jars.jar -C $SPARK_HOME/jars/*.jar .
# hdfs dfs -mkdir -p /user/spark/jars # hdfs dfs -copyFromLocal spark-jars.jar /user/spark/jars
# spark.yarn.archive=hdfs:///user/spark/jars/spark-jars.jar