摸鱼大数据——Spark基础——Spark On Yarn环境配置和部署

1、Spark On Yarn的本质

Spark专注于分布式计算;Yarn专注于资源管理。

Spark将资源管理的工作交给了Yarn来负责!

2、环境搭建和启动

环境搭建

1.修改spark-env.sh

cd /export/server/spark/conf

cp spark-env.sh.template spark-env.sh

vim /export/server/spark/conf/spark-env.sh

在最后面添加以下内容:

HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop

YARN_CONF_DIR=/export/server/hadoop/etc/hadoop

SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://node1:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

2.修改hadoop的yarn-site.xml

node1修改

cd /export/server/hadoop-3.3.0/etc/hadoop/

vim /export/server/hadoop-3.3.0/etc/hadoop/yarn-site.xml

在<configuration>下面添加以下内容:

<!-- 设置yarn集群的内存分配方案 -->

    <property>

        <name>yarn.nodemanager.resource.memory-mb</name>

        <value>20480</value>

    </property>

    <property>

        <name>yarn.scheduler.minimum-allocation-mb</name>

        <value>2048</value>

    </property>

    <property>

        <name>yarn.nodemanager.vmem-pmem-ratio</name>

        <value>2.1</value>

</property>

将其同步到其他两台

cd /export/server/hadoop/etc/hadoop

scp -r yarn-site.xml node2:$PWD

scp -r yarn-site.xml node3:$PWD

3.Spark设置历史服务地址

cd /export/server/spark/conf

cp spark-defaults.conf.template spark-defaults.conf

vim spark-defaults.conf

添加以下内容:

spark.eventLog.enabled                  true

spark.eventLog.dir                      hdfs://node1:8020/sparklog/

spark.eventLog.compress                 true

spark.yarn.historyServer.address        node1:18080

配置后, 需要在HDFS上创建 sparklog目录

hdfs dfs -mkdir -p /sparklog

设置日志级别:

cd /export/server/spark/conf

cp log4j.properties.template log4j.properties

vim log4j.properties

修改以下内容:

4.配置依赖spark jar包

当Spark Application应用提交运行在YARN上时,默认情况下,每次提交应用都需要将依赖Spark相关jar包上传到YARN 集群中,为了节省提交时间和存储空间,将Spark相关jar包上传到HDFS目录中,设置属性告知Spark Application应用。

hadoop fs -mkdir -p /spark/jars/

hadoop fs -put /export/server/spark/jars/* /spark/jars/

修改spark-defaults.conf

cd /export/server/spark/conf

vim spark-defaults.conf

添加以下内容:

spark.yarn.jars  hdfs://node1:8020/spark/jars/*

5.启动服务

Spark Application运行在YARN上时,上述配置完成

启动服务:HDFS、YARN、MRHistoryServer和Spark HistoryServer,命令如下:

## 重启HDFS和YARN服务,在node1执行命令

先stop-all.sh,再执行start-all.sh

注意:在onyarn模式下不需要启动start-all.sh(jps查看一下看到worker和master)

## 启动MRHistoryServer服务,在node1执行命令

mr-jobhistory-daemon.sh start historyserver

## 启动Spark HistoryServer服务,,在node1执行命令

/export/server/spark/sbin/start-history-server.sh

Spark HistoryServer服务WEB UI页面地址:

http://node1:18080/

6.提交测试

先将圆周率PI程序提交运行在YARN上,命令如下:

SPARK_HOME=/export/server/spark

${SPARK_HOME}/bin/spark-submit \

--master yarn \

--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \

--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \

${SPARK_HOME}/examples/src/main/python/pi.py \

10

运行完成在YARN 监控页面截图如下:

设置资源信息,提交运行pi程序至YARN上,命令如下:

SPARK_HOME=/export/server/spark

${SPARK_HOME}/bin/spark-submit \

--master yarn \

--driver-memory 512m \

--executor-memory 512m \

--executor-cores 1 \

--num-executors 2 \

--queue default \

--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \

--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \

${SPARK_HOME}/examples/src/main/python/pi.py \

10

当pi应用运行YARN上完成以后,从8080 WEB 页面点击应用历史服务连接,查看应用运行状态信息。

扩展:Spark On Yarn运行过程,为什么需要将Jar包上传到HDFS

小技巧

1- vim相关快捷键:在文件中搜索关键词

输入/,然后输入关键词即可。按N进行跳转

2- 文件查找

find / -name spark-core_2.12-3.1.2.jar

在服务器上查找spark-core_2.12-3.1.2.jar文件,

默认配完环境后只有node1有,当node2,node3运行spark_on_yarn程序的时候,会自动从hdfs下载对应的jar包

启动sparkonyarn

注意:

配置完环境后需要先stop-all.sh停止,再重新启动服务生效

相比原理hadoop集群,需要多启动一个spark的自己的历史服务,它是依赖hadoop的历史服务的!

[root@node1 ~]# start-all.sh
[root@node1 ~]# mapred --daemon start historyserver
[root@node1 ~]# /export/server/spark/sbin/start-history-server.sh
[root@node1 ~]# jps
5570 HistoryServer
3555 DataNode
5460 JobHistoryServer
4199 NodeManager
4008 ResourceManager
3369 NameNode
29324 Jps
[root@node1 bin]# 

3、提交应用验证环境

测试提交官方示例圆周率

SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master yarn \
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \
--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \
${SPARK_HOME}/examples/src/main/python/pi.py \
10

测试提交自定义python类

将编写的WordCount的代码提交到Yarn平台运行

  • 注意1:需要修改setMaster的参数值为yarn,或者直接将setMaster代码删除

  • 注意2:需要将代码中和文件路径相关的内容改成读写分布式文件系统,例如:HDFS。因为程序是分布式运行的,我们无法确保每台节点上面都有相同的本地文件路径,会导致报错。

cd /export/server/spark/bin
​
./spark-submit --master yarn \
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \
--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \
/export/data/spark_project/spark_base/05_词频统计案例_spark_on_yarn运行.py
​
# 注意:py代码文件路径改成自己的linux对应py文件路径!!!

4、如何查看日志

日志用途:主要用于排查问题

  • 通过Spark提供的18080日志服务器查看, 推荐使用

直接查看对应executor的日志

发现不管是进程还是线程,日志内容都很少。原因如下:
1- 因为在进行环境部署的时候将日志级别,由INFO变成了WARN级别
2- 和部署方式有关。

查看对应线程的日志

还可以通过Yarn的8088界面查看日志

点进去后, 如果日志比较多, 也可以点击查看详细日志

5、Spark On Yarn两种部署方式

Spark中有两种部署方式,Client和Cluster方式,默认是Client方式。这两种方式的本质区别,是Driver进程运行的地方不一样。

Client部署方式: Driver进程运行在你提交程序的那台机器上
    优点: 将运行结果和运行日志全部输出到了提交程序的机器上,方便查看结果
    缺点: Driver进程和Yarn集群可能不在同一个集群中,会导致Driver和Executor进程间进行数据交换的时候,效率比较低
    使用: 一般用在开发和测试中
    
Cluster部署方式: Driver进程运行在集群中某个从节点上
    优点: Driver进程和Yarn集群在同一个集群中,Driver和Executor进程间进行数据交换的时候,效率比较高
    缺点: 需要去18080或者8088页面查看日志和运行结果
    使用: 一般用在生产环境使用

演示操作:

  • client模式:
./spark-submit --master yarn \
--deploy-mode client \
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \
--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \
/export/data/spark_project/spark_base/05_词频统计案例_spark_on_yarn运行.py
​
# 注意:py代码文件路径改成自己的linux虚拟机中的对应py文件路径!!!

  • cluster模式
./spark-submit --master yarn \
--deploy-mode cluster \
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \
--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \
/export/data/spark_project/spark_base/05_词频统计案例_spark_on_yarn运行.py
​
# 注意:py代码文件路径改成自己的linux对应py文件路径!!!

观察两种模式结果区别?
​
client模式:  driver一直是node1(客户端)      运行输出结果在node1窗口直接输出
​
cluter模式:  driver是集群节点中切换           运行输出结果在driver对应stdout日志展示出

如果输出内容不是直接打印而是到hdfs,有可能报错,看日志可以从以下位置找:

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

困了就倒头睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值