您现在的位置是:首页 > 文章详情

Spark on yarn

日期:2020-03-05点击:584

概述

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

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

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

环境

主机名 应用
tvm13 spark、Scala
tvm14 spark、Scala
tvm15 spark、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节点,并配置各个节点的环境变量。

无需启动!

完成!

原文链接:https://my.oschina.net/adailinux/blog/3188689
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章