zoukankan      html  css  js  c++  java
  • Spark学习笔记(四)—— Yarn模式

    1、Yarn运行模式介绍

    Yarn运行模式就是说Spark客户端直接连接Yarn,不需要额外构建Spark集群。如果Yarn是分布式部署的,那么Spark就跟随它形成了分布式部署的效果。有yarn-clientyarn-cluster两种模式,主要区别在于:Driver程序的运行节点。

    • yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出

    • yarn-cluster:Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境。

    其实简单说来,就是用Spark替换掉了Hadoop中的MapReduce;或者理解成,用Yarn替换掉了Spark的资源调度器。都是一回事,取长补短的结果。

    2、安装配置

    1)修改hadoop配置文件yarn-site.xml,添加如下内容:

    <!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
    <property>
    	<name>yarn.nodemanager.pmem-check-enabled</name>
    	<value>false</value>
    </property>
    <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
    <property>
    	<name>yarn.nodemanager.vmem-check-enabled</name>
    	<value>false</value>
    </property>
    

    2)修改spark-env.sh,添加如下配置,指定Yarn的配置 :

    [simon@hadoop102 conf]$ vi spark-env.sh
    
    YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop
    

    3)分发配置文件

    [simon@hadoop102 conf]$ xsync /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml
    #spark-env.sh可分发可不分发,因为Yarn是集群模式,Spark运行在Yarn上
    [simon@hadoop102 conf]$ xsync spark-env.sh
    

    4)启动Hadoop集群:

    [simon@hadoop102 hadoop-2.7.2]$ start-dfs.sh
    #在ResourceManager上启动Yarn
    [simon@hadoop103 module]$ start-yarn.sh
    

    5)执行一个应用程序:

    bin/spark-submit 
    --class org.apache.spark.examples.SparkPi 
    --master yarn 
    --deploy-mode client 
    ./examples/jars/spark-examples_2.11-2.1.1.jar 
    100
    

    我们比较一下,它和local模式有什么不一样的地方:

    bin/spark-submit 
    --class org.apache.spark.examples.SparkPi 
    ./examples/jars/spark-examples_2.11-2.1.1.jar 
    100
    

    参数说明:

    • --master 指定Master的地址,默认为Local
    • --class: 你的应用的启动类 (如 org.apache.spark.examples.SparkPi)
    • --deploy-mode: 是否发布你的驱动到worker节点(cluster) 或者作为一个本地客户端 (client) (default: client)*
    • --conf: 任意的Spark配置属性, 格式key=value. 如果值包含空格,可以加引号“key=value”
    • application-jar: 打包好的应用jar,包含依赖. 这个URL在集群中全局可见。 比如hdfs:// 共享存储系统, 如果是 file:// path, 那么所有的节点的path都包含同样的jar
    • application-arguments: 传给main()方法的参数
    • --executor-memory 1G 指定每个executor可用内存为1G
    • --total-executor-cores 2 指定每个executor使用的cup核数为2个

    不同的地方很明显:指定了master为Yarn模式,--deploy-mode,为client模式,缺省的代表是Local模式。

    3、Yarn模式运行流程

    画了一张图,感受一下:

    其实我感觉图画的已经挺清楚的了,再尝试用文字解释一下吧,以后看源码会对图的理解更加深刻:

    1)客户端提交应用给Yarn的ResourceManager(RM);

    2)RM选择一个NodeManager(NM)创建ApplicationMaster(AM);

    3)AM向RM索要执行任务的资源;

    4)RM返回给AM可用的资源列表(例如:NM1、NM2、NM3);

    5)AM选择一个NM,创建Spark的执行器对象Executor

    6)那么AM怎么知道这个Executor创建了以及它的状态呢,这时候Executor反向注册到AM;

    7)AM知道了Executor的状态,开始分解任务,交给它执行。

    先有一个大致的印象,方便之后看源码去理解,这样整个代码的逻辑才更加清晰,反过来对整个流程也能理解的更加深刻。

    4、日志查看

    有时候我们需要对任务进行实时的监控,或者返回来看任务的执行流程,那么就需要查看日志了。由于我们现在使用的Yarn模式,那么就自然而然的想到,日志信息应该是在Yarn的web UI中查看。也就是:使得Yarn能够看到Spark的执行日志。

    1)修改配置文件spark-defaults.conf

    添加如下内容:

    spark.yarn.historyServer.address=hadoop102:18080
    spark.history.ui.port=18080
    

    2)重启spark历史服务

    [simon@hadoop102 spark]$ sbin/stop-history-server.sh 
    #输出
    stopping org.apache.spark.deploy.history.HistoryServer
    
    [simon@hadoop102 spark]$ sbin/start-history-server.sh 
    #输出
    starting org.apache.spark.deploy.history.HistoryServer, logging to /opt/module/spark/logs/spark-simon-org.apache.spark.deploy.history.HistoryServer-1-hadoop102.out
    

    3)提交任务到Yarn执行

    [simon@hadoop102 spark]$ bin/spark-submit 
    --class org.apache.spark.examples.SparkPi 
    --master yarn 
    --deploy-mode client 
    ./examples/jars/spark-examples_2.11-2.1.1.jar 
    100
    

    4)Web页面查看日志



  • 相关阅读:
    Mysql 时间字段(加上或者减去一段时间)
    awk数组与语法
    awk模块、变量、执行
    awk简介与表达式实例
    图数据库
    推荐几款优秀的开源博客系统
    红黑树
    用户画像基础概念
    Panda Global获悉,美国承诺4年内明确区块链数字资产监管方式!
    重庆聚焦区块链应用,Panda Global觉得春天真的来了!
  • 原文地址:https://www.cnblogs.com/simon-1024/p/12175895.html
Copyright © 2011-2022 走看看