Hadoop YARN模式把Spark作为一个客户端,将作业提交给Yarn服务,从而提高资源利用效率。
Hadoop YARN模式部署
Hadoop和Spark部署
Hadoop YARN模式需要在集群上同时部署Hadoop和Spark。
hadoop集群和spark集群搭建参考前面的内容!
Spark配置
当hadoop和spark在集群上部署好后。为了使用Hadoop YARN模式,需要对Spark进行一些额外的配置
spark-env.sh
打开spark-env.sh
$ cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/conf
$ sudo vim spark-env.sh
在文件末尾添加上Hadoop的环境变量,以及log文件参数(注意所有集群上的主机都需要修改)。
export HADOOP_HOME=/usr/local/hadoop-3.3.4/
export HADOOP_CONF_DIR=/usr/local/hadoop-3.3.4/etc/hadoop
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.fs.logDirectory=hdfs://master:8020/directory -Dspark.history.retainedApplications=30"
spark-defaults.conf
打开spark-defaults.conf,配置spark日志服务
$ mv spark-defaults.conf.template spark-defaults.conf
$ vim spark-defaults.conf
在末尾添加如下内容(其中端口8020需要与hadoop中core-site.xml配置文件中的hdfs端口一致;/directory目录需要提前手动创建):
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:8020/directory
创建/directory目录
如果已经格式化namenode,可以不用再执行hdfs namenode -format
命令
$ cd /usr/local/hadoop-3.3.4/
$ hdfs namenode -format
$ hadoop fs -mkdir /directory
启动Hadoop YARN模式
1 启动hadoop
master主机上:
$ cd /usr/local/hadoop-3.3.4
$ ./sbin/start-all.sh
启动后,在主系统浏览器输入:http://192.168.72.142:9870 ,即可进入hdfs文件管理页面
点击页面的Browse the file system按钮,可以查看创建的/directory目录
2 启动ResourceManager
slave1主机上:
$ cd /usr/local/hadoop-3.3.4
$ ./sbin/start-yarn.sh
启动后,在主系统浏览器输入:http://192.168.72.143:8088 ,即可进入Resource管理页面
3 启动spark
master主机上:
$ cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13
$ ./sbin/start-all.sh
启动后,在主系统浏览器输入:http://192.168.72.142:8080 ,即可进入Spark管理页面
4 启动spark jobhistoryServer
slave1主机上:
$ cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13
$ ./sbin/start-history-server.sh
启动成功后,slave1主机上执行jps
命令,会出现JobHistoryServer进程
DataNode
ResourceManager
JobHistoryServer
NodeManager
Worker
Jps
在主系统浏览器输入:http://192.168.72.143:18080 ,即可进入Spark History管理页面
5 启动Historyserver(slave1)
slave1主机上:
$ cd /usr/local/hadoop-3.3.4
$ ./sbin/mr-jobhistory-daemon.sh start historyserver
启动成功后,slave1主机上执行jps
命令,会出现HistoryServer进程
DataNode
ResourceManager
JobHistoryServer
NodeManager
HistoryServer
Worker
Jps
Hadoop YARN模式例子
client模式
master主机上(参数“--master yarn”表示使用Hadoop YARN模式来运行程序。):
$ cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/bin
$ spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/examples/jars/spark-examples_2.13-3.3.1.jar 100
计算结果直接在控制台显示:
cluster模式
client模式主要用于调试,生产环境中主要使用cluster模式。
master主机上:
$ cd /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/bin
$ spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi /usr/local/spark-3.3.1-bin-hadoop3-scala2.13/examples/jars/spark-examples_2.13-3.3.1.jar 100
查看运算结果
cluster模式中,运行信息不再控制台显示,需要从spark history管理页面查看。在主系统浏览器输入:http://192.168.72.143:18080 ,然后点击刚在运行的AppID,进入对应app的管理页面。
在app管理页面,点击右上方的Executors,切换到Executors页面。ExecutorsID中的driver保存了计算结果,可以点击打开。
计算结果如下所示:
查看日志
cluster模式中,运行信息不再控制台显示,所以当程序错误时不显示具体的erro信息,需要从log文件中查看。
在主系统浏览器输入:http://192.168.72.143:8088/ ,然后点击刚在运行的AppID,进入app管理页面。
在app管理页面,可以点击History和Logs查看。
或者,也可以在主系统浏览器输入:http://192.168.72.142:9870 ,进入hdfs文件管理页面,然后进入Directory目录查看日志。