spark on yarn

1.yarn

1)hadoop  MapReduce框架的局限性

         JobTracker单点瓶颈。MapReduce中的JobTracker负责作业的分发,管理和调度,同时还必须和集群中所有的节点保持heartbeat通信,了解机器的运行状态和资源情况。很明显JobTracker负责了太多的任务,如果集群的数量和提交job的数量不断增加,那么jobTracker的任务量也会随之快速上涨,造成JobTracker内存和网络带宽的快速消耗。最终结果就是JobTracker成为集群的单点瓶颈,成为集群作业的中心点和风险的核心。

          TaskTracker端,由于作业分配信息过于简单,有可能将多个资源消耗多和运行时间长的Task分配到同一个Node上,这样会造成作业的单点失败或等待时间过长。

          作业延迟过高。

          编程框架不够灵活。

2)yarn的主要思想和架构

               spark on yarn_第1张图片

       yarn的主要设计思路:将JobTracker承担的两大任务——集群资源管理和作业管理进行分离,(其中分离出来的集群资源管理由全局的资源管理器(ResourceManager)管理,分离出来的作业管理由针对每个作业的应用主体(ApplicationMaster)管理),然后TaskTracker演化称为节点管理器(NodeManager)。

这样全局的资源管理器和局部的节点管理器就组成了数据计算框架,其中的资源管理器将成为整个集群中资源最终分配者。

针对作业的应用主体就成为具体的框架库,负责两个任务:1)与资源管理器通信获取资源;2)与节点服务器配合完成节点的Task任务。

     yarn的组件:ResourceManager(全局的资源管理器),ApplicationMaster(应用主体),NodeManager,Container(资源容器)

    ResourceManager:根据功能不同将ResourceManager分成两个组件:调度器(Scheduler)和应用管理器(ApplicationManager)。调度器只负责资源的分配,它根据各个应用的资源请求和集群各个节点的资源容器(Resource  Container,是集群节点将自身内存,cpu,磁盘等资源封装在一起的抽象概念)进行调度。应用管理器负责接收作业,协商获取第一个资源容器用于执行应用的任务主题并为重启失败的应用主题分配容器。

   ApplicationMaster:应用主体和应用是一一对应的。主要职责:1)与调度器协商资源;2)与节点管理器合作,在合适的容器中运行对应的组件task,并监控这些task执行;

3)如果container出现故障,应用主体会重新向调度器申请其他资源;4)计算应用程序所需的资源量,并转化为调度器可识别的协议信息包;5)在应用主体出现故障后,应用管理器会负责重启它,但由应用主体自己从之前保存的应用程序执行状态中恢复应用程序。

   NodeManager:节点管理器负责启动应用的容器,监控容器的资源使用(包括CPU,内存,硬盘和网络带宽等),并把这些信息汇报给调度器。应用对应的应用主体负责通过协商从调度器处获取资源容器,并跟踪这些容器的状态和应用执行的情况。

   Container:资源容器的主要职责:运行,保存,或传输应用主体提交的作业或需要存储和传输的数据。系统资源的组织形式是将节点上的可用资源分割,每一份通过封装组织成系统的一个资源单元,即Container(比如固定大小的内存分片,cpu核心数,网络带宽量和硬盘空间块等。)资源是指内存资源,每个节点由512MB或1GB大小的内存容器组成)。由于将每个节点上的内存容器分割成为大小固定,地位相同的容器,这些内存容器就可以在任务执行中进行互换,从而提高利用率,避免MapReduce1中作业在Reduce池上的瓶颈问题和缺乏资源互换的问题.

spark on yarn_第2张图片

3.spark  on  yarn

                   每个SparkContex有一个ApplicationMaster;

                   每个Executor对应⼀一个Container.

有两种将应用连接到集群的模式:客户端模式和集群模式。yarn-cluster(YarnClusterScheduler):Driver和AM运⾏行在⼀一起,Client可以跑远。

                                                                                                        yarn-client(YarnClientClusterScheduler):Client和Driver运行在一起,AM只⽤用来获取资源。

spark on yarn_第3张图片spark on yarn_第4张图片

提交任务到yarn:

                    ./bin/spark-submit --class path.to.your.Class --master yarn-cluster [options] <app jar> [appoptions]

运⾏行在Yarn上的时候,不需要指定master地址。⾃自动从hadoop配置⽂文件中读取ResourceManager地址
注意点: SPARK_YARN_USER_ENV传给Spark进程的环境变量;

                  export SPARK_JAR=hdfs:///some/path.;

                  HADOOP_CONF_DIR或者YARN_CONF_DIR指向Hadoop配置⽂文件所在目录。

你可能感兴趣的:(spark on yarn)