Spark on yarn

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 

-

概述

spark on yarn是spark集群模式之一,通过resourcemanager进行调度,较之standalone模式,不需要单独启动spark服务。

关于spark 的三种模式,上一篇文章(saprk zookeeper搭建spark高可用集群)中已经讲过,在此不做赘述。

本文操作的前提是已经搭建好hdfs和yarn集群。

环境

主机名应用
tvm13spark、Scala
tvm14spark、Scala
tvm15spark、Scala

spark on yarn架构

基于Yarn有两种提交模式,一种是基于Yarn的yarn-cluster模式,一种是基于Yarn的yarn-client模式。使用哪种模式可以在spark-submit时通过 --deploy-mode cluster/client 指定。

工作原理

yarn cluster

  1. 在RM接受到申请后在集群中选择一个NM分配Container,并在Container中启动ApplicationMaster进程
  2. 在ApplicationMaster中初始化SparkContext
  3. ApplicationMaster向RM申请到Container后通知NodeManager在获得的Container中启动Executor进程
  4. sparkContext分配Task给Executor,Executor发送运行状态给Driver

yarn client

  1. 在RM接受到申请后在集群中选择一个NM分配Container,并在Container中启动ApplicationMaster进程
  2. driver进程运行在client中,并初始化sparkContext
  3. sparkContext初始化完成后与ApplicationMaster通讯,通过ApplicationMaster向RM申请Container,ApplicationMaster通知NM在获得的Container中启动executor
  4. sparkContext分配Task给Executor,Executor发送运行状态给Driver

比较

  1. sparkContext初始化不同,这也导致了Driver所在位置的不同,Yarn-Cluster的Driver是在集群的某一台NM上,Yarn-Client 的Driver运行在客户端
  2. 而Driver会和Executors进行通信,这也导致了Yarn-Cluster在提交App之后可以关闭Client,而Yarn-Client不可以
  3. 应用场景:Yarn-Cluster适合生产环境,Yarn-Client适合交互和调试。

搭建

Tips: 注意不同版本spark对hadoop和scala的版本要求。

配置

spark-env.sh

export JAVA_HOME=/data/template/j/java/jdk1.8.0_201
export SCALA_HOME=/data/template/s/scala/scala-2.11.12
export HADOOP_HOME=/data/template/h/hadoop/hadoop-3.2.1
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export LOCAL_DIRS=/data/template/s/spark/tmp

slaves

tvm13
tvm14
tvm15

spark-defaults.sh

# http://spark.apache.org/docs/latest/configuration.html
# http://spark.apache.org/docs/latest/running-on-yarn.html#configuration
spark.eventLog.enabled                        true
spark.eventLog.dir                            hdfs://cluster01/tmp/event/logs
spark.driver.memory                           2g
spark.driver.cores                            2
spark.serializer                              org.apache.spark.serializer.KryoSerializer
spark.serializer.objectStreamReset            100
spark.executor.logs.rolling.time.interval     daily
spark.executor.logs.rolling.maxRetainedFiles  30
spark.ui.enabled                              true
spark.ui.killEnabled                          true
spark.ui.liveUpdate.period                    100ms
spark.ui.liveUpdate.minFlushPeriod            3s
spark.ui.port                                 4040
spark.history.ui.port                         18080
spark.ui.retainedJobs                         100
spark.ui.retainedStages                       100
spark.ui.retainedTasks                        1000
spark.ui.showConsoleProgress                  true
spark.worker.ui.retainedExecutors             100
spark.worker.ui.retainedDrivers               100
spark.sql.ui.retainedExecutions               100
spark.streaming.ui.retainedBatches            100
spark.ui.retainedDeadExecutors                100

spark.yarn.jars                               hdfs://cluster01/spark/jars
spark.yarn.stagingDir                         hdfs://cluster01/spark/tmp/stagings
spark.yarn.historyServer.address              tvm13:18080
spark.executor.instances                      2
spark.executor.memory                         1g
spark.yarn.containerLauncherMaxThreads        25
spark.yarn.submit.waitAppCompletion           true

同步spark的jar包到hdfs

$ hdfs dfs -mkdir -p hdfs://cluster01/spark/jars
$ hdfs dfs -mkdir -p hdfs://cluster01/spark/tmp/stagings
$ hdfs dfs -put ./jars/* hdfs://cluster01/spark/jars/

系统环境配置

编辑 ~/.bashrc

export SPARK_HOME=/data/template/s/spark/spark-3.0.0-bin-hadoop3.2
export CLASSPATH=$SPARK_HOME/jars/:$CLASSPATH
export CLASSPATH=$SPARK_HOME/yarn/:$CLASSPATH
export CLASSPATH=$SPARK_HOME/:$CLASSPATH
export PATH=$SPARK_HOME/bin/:$PATH
export PATH=$SPARK_HOME/sbin/:$PATH
alias cdspark="cd $SPARK_HOME"

使变量生效,source ~/.bashrc 。

分发

以上配置完成后,将 /path/to/spark-3.0.0-bin-hadoop3.2 分发至各个slave节点,并配置各个节点的环境变量。

无需启动!

完成!

附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:

(点击右侧 即可打开个人博客内有干货):技术干货小栈
=====>>①【Java大牛带你入门到进阶之路】<<====
=====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
=====>>③【数据库大牛带你入门到进阶之路】<<=====
=====>>④【Web前端大牛带你入门到进阶之路】<<====
=====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
=====>>⑥【架构师大牛带你入门到进阶之路】<<=====
=====>>⑦【C++大牛带你入门到进阶之路】<<====
=====>>⑧【ios大牛带你入门到进阶之路】<<====
=====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
=====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====

天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值