您的位置:首页 > 其它

一起学Spark(2)-- Spark组件与YARN 集群运行

2018-01-22 17:32 176 查看
                                         Spark组件与在yarn集群上的运行
1.Driver
   driver 前面介绍过,是spark的驱动器程序,也是负责启动和管理运行Spark应用的进程。确切的说,driver是维护所有计算节点的连接实体。
   driver维护spark运行的上下文(context),允许Spark给executor分配任务。同时维护某些内部结构(比如累加器和广播变量),driver处理与集群管理器的通信,请求资源以执行spark应用,driver会根据应用的代码创建一个执行计划:有向无环图 DAG
Spark优化这个DAG来减少数据的传输,然后以一个名为DAGSchedular(在运行时会显示)的内部结构进一步将词DAG分解成一个个的stage,再分解成task,一个stage就是一组转换操作,它们将作用于RDD中的数据。

DAGSchedular将DAG细分成Task,然后TaskSchedular(任务调度器)在集群中调度这些Task,TaskScheduler 了解资源与数据局限性的限制条件,将task分配给相应的 executor。(计算核心),一旦TaskScheduler决定了在哪里执行task,所有DAG对应的转换操作以及转换闭包(关于闭包后面会解释)就被序列化,并通过网络传输给一个worker节点。

2.workers与executors
   在一个Spark集群中,worker节点是实际运行executor和task的物理机器,在底层,集群管理器负责与各个worker节点通信并处理资源的分配。
每个worker节点可以运行一个或多个executor,executor是一种抽象,让Spark程序可配置的执行。每个executor运行一个JVM.

分配给一个executor的总内存分配:
60%:storage内存,用于持久化RDD和数据序列化
20%:shuffle内存,Spark对某些RDD转换的数据进行重组的过程(shuffle是一个很复杂的过程,它需要被序列化,通过网络传输这些数据,还需要有一些额外的内存以便于将数据组织起来)
20%:分配给storage和shuffle内存剩下的内存,留作避免spark内存溢出错误引起的开销。

                                                        了解YARN集群
Yarn是Hadoop 2.0 版本引入的集群管理器,还不是一个独立组件,是一个依赖于Hadoop生态的系统的组件。
yarn集群解决了专有集群中spark应用与其他非spark应用(如Hive)共享物理资源的问题。
对于yarn来说,spark只是一个应用程序,spark的每一个executor在它自己的yarn容器内运行,每个节点上的每一个容器存放资源管理器分配的资源(还有一种资源分配方式叫动态资源分配)

在yarn上运行spark有两种模式:
yarn-client 模式:driver运行在启动spark的机器上,即driver运行在客户端,yarn应用程序master只负责从yarn请求。
yarn-cluster 模式:driver在yarn容器内运行,客户端可以从集群中断开(运行不再有任何提示,并需要配置Master IP)

Spark执行模型:
窄依赖:父RDD的一个分区只生成一个子分区
宽依赖:父RDD的一个分区参与多个子分区的生产
DAGSchedular 会将尽可能多的窄依赖放入同一个 stage 执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark yarn 资源