Spark on Yarn环境配置以及Hadoop HA配置中的问题

记录配置Spark on Yarn环境的过程,以及之前Hadoop HA部署存在的问题

上接:https://www.woolym.com/develop/hadoop/689.html

Spark on Yarn环境搭建

我使用的的是

  • spark-3.1.3-bin-without-hadoop
  • Python-3.7.11(pyspark 使用)

Python环境建立使用 MakeFile 编译后做一下软链接,pyspark 运行需要 PATH 中有 python3

环境变量

我把 SPARK_HOME 和 PYTHONPATH 配置到环境变量中了

这里设置 PYTHONPATH 是为了在 BASH 中使用 pyspark import pyspark

建议在profile.d中新建.sh设置

1
2
3
export SPARK_HOME=/usr/local/spark-3.1.3-bin-without-hadoop
export PATH=$PATH:$SPARK_HOME/bin
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$PYTHONPATH

Spark配置文件修改

spark-env.sh

1
2
3
4
5
6
7
8
9
export JAVA_HOME=/usr/java/default
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_DIST_CLASSPATH=$(hadoop classpath)

# 这里是在配置spark的historyserver
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080
-Dspark.history.retainedApplications=30
-Dspark.history.fs.logDirectory=hdfs://mycluster/spark/eventLog"
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

spark-defaults.conf

1
2
3
4
5
6
# 这里是在配置spark的historyserver
spark.eventLog.enabled true
spark.eventLog.dir hdfs://mycluster/spark/eventLog #一定要自己先手动建立这个目录
spark.eventLog.compress true
spark.yarn.historyServer.address=node01:18080
spark.history.ui.port=18080

配置 VSCode

官网 rpm安装

Shell中输入 code 启动

1
2
3
4
5
6
7
8
9
配置代码提醒
"python.autoComplete.extraPaths": [
"$SPARK_HOME/python",
"$SPARK_HOME/python/lib/py4j-0.10.9-src.zip"
],
"python.analysis.extraPaths": [
"$SPARK_HOME/python",
"$SPARK_HOME/python/lib/py4j-0.10.9-src.zip"
]

Hadoop HA部署存在的问题

这里把我恶心坏了,真的恶心坏了

一开始是我尝试运行部署好的 Spark 的 demo,算 π 那个

提交以后在 ResourceManager 的 Web界面 显示Failed

后来又跑了下 wordcount Demo

1
hadoop jar /usr/local/hadoop-3.2.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.3.jar wordcount input output

一下子我就蚌埠住了,虽然 ResourceManager 那边显示 SUCCEEDED,但是 JobHistory 服务器不显示记录

遂知可能之前配置 Hadoop HA 的时候就存在问题

想查看 logs 查明原因,结果这里配置的也有问题,Web 界面打不开 logs,只好在 Shell 里面用

1
yarn logs -applicationId <application-id>

或者直接将 logs 文件下载下来查看 (默认在/tmp/logs/{userid}/logs-tfile)

然后我发现了几个问题

提示找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster

输出一下hadoop classpath

将其添加至 mapred-site.xml、yarn-site.xml 中的 yarn.application.classpath 属性中

提示ERROR [main] org.apache.hadoop.mapreduce.v2.app.client.MRClientService: Webapps failed to start. Ignoring for now: java.lang.NullPointerException

原因是 yarn-site.xml 中,在配置了 HA 的情况下

yarn.resourcemanager.webapp.address 属性配置方式不同

1
2
3
4
5
6
7
8
9
<property> 
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>xxx1:8088</value>
</property>

<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>xxx2:8088</value>
</property>

配置 spark history-server

在上面的配置文件中我已经写过了,同样是使用前启动进程

1
$SPARK_HOME/sbin/start-history-server.sh

这个服务器的作用就是在任务结束后仍然能查看任务相关信息

我是因为无法在 RM 的 Web端打开任务(包括MapReduce任务)的 logs,所以才误打误撞启动了这个…

logs 无法查看的原因

这位更是重量级…

yarn-site.xml

1
2
3
4
<property>
<name>yarn.log.server.url</name>
<value>http://node01:19888/jobhistory/logs/</value>
</property>

是因为之前的配置的时候没有加 http://