spark-5

简介:

 Spark的优点:通过增加机器的数量并使用集群模式运行,来扩展程序的计算能力,
              小数据集上利用本地模式快速开发验证完后,可无需修改代码就可以在大规模集群上运行。

 Spark的运行环境(Yarn 、Meos 、自带的Spark独立集群管理器)

Spark 运行时架构:

 Spark在分布式环境中的架构:Spark集群采用主从结构,在一个Spark集群中,有一个节点负责中央协调,调度各个分布式工作
 节点,这个中央协调节点被称为驱动器(Driver)节点,与之对应的工作节点被称为执行器(executor)。
 驱动器节点可以和大量的执行器节点进行通信,他们都作为独立的java运行。驱动器节点和所有的执行器节点被称为Spark应用。

                          Spark 驱动器程序
                          集群管理器(yarn 、独立集群管理器)
                集群工作节点   集群工作节点    集群工作节点
Spark应用通过一个叫做集群管理器的外部服务在集群中的机器上启动,Spark自带的集群管理器被称为独立集群管理器。

驱动器节点
Spark驱动器是执行你的程序中的main()进程。他执行用户编写的用来创建SparkContext,创建RDD,以及进行RDD的转换操作和行动操作
的代码,其实当你启动Spark shell 时,你就启动了一个Spark驱动器程序。
驱动器程序在Spark两个职责:
1.把用户程序转换为任务
Spark驱动器程序负责把用户程序转为多个物理执行的单元,这些单元也被称为任务。从上层来看,所有的Spark程序都遵循同样的结构
程序从输入数据创建一系列RDD,再使用转化操作派生出新的RDD,最后使用行动操作收集或存储结果RDD中的数据。Spark程序其实是隐式创建
出一个由操作组成的逻辑上的有向无环图(DAG),当驱动器程序运行时,他会把这个逻辑图转为物理执行计划。
Spark 会对逻辑执行计划做一些优化,比如将连续的映射转为流水线化执行,将多个操作合并成一个步骤中等。这样Spark就把逻辑计划转为
一系列步骤,而每个步骤又由多个任务组成。这些人物会被打爆并送到集群中,任务是Spark中最小的工作单元,用户程序通常要启动成百上千
个独立任务。
2. 为执行器节点调度任务
有了物理执行计划之后,Spark驱动器程序必须在各执行器进程间协调任务的调度。执行器进程启动后,会向驱动器进程注册自己。因此驱动器
进程始终对应用中所有的执行节点有完整的记录。每个执行器节点代表一个能够处理任务和存储RDD数据的进程。

   Spark驱动器程序会根据当前的执行器节点集合,尝试把所有任务基于数据所在位置分配给合适的执行器进程,当任务执行时,执行器进程会把
   缓存数据存储起来,而驱动器进程同样会跟踪这些缓存数据存储的位置,并且利用这些位置信息来调度以后的任务,以尽量减少数据的网络传输

   驱动器程序会将一些Spark引用的运行时的信息通过网页界面呈现出来,默认在端口4040 .

执行器节点:
Spark执行器节点是一种工作进程,负责在Spark作业中运行任务,任务间相互独立。Spark应用启动时,执行器节点就会同时启动,并且始终伴随着
整个Spark应用的生命周期而存在。如果有执行器节点发生了异常或崩溃,Spark应用也可以继续执行
作用:
1.负责运行组成Spark应用的任务,并将结果返回给驱动器进程
2.通过自身块的管理器,为用户程序中要求缓存的RDD提供内存式存储。RDD是直接缓存在执行器进程内的,因此任务可以在运行时充分利用缓存加速计算。

集群管理器:

  Spark依赖于集群管理器来启动执行器节点,而在某些特殊情况下,也依赖集群管理器来启动驱动器节点。集群管理器是Spark中的可插拔
  式组件。这样Spark既可以运行在自带的独立集群管理器上,又可以运行在其他外部集群管理器上。比如yarn 或mesos

值得注意的是Spark应用的进程分为驱动器节点和执行器节点。而主节点和工作节点的概念则被用来分别表述集群管理中的中心化部分和分布式部分。

spark启动:spark-submit:将应用程序提交到集群管理器上。通过不同的配置选项,spark可以连接到对应的集群管理器上。并控制应用所使用的资源数量

流程:
用户通过spark-submit脚本提交应用
spark-submit脚本提交应用
spark-submit脚本启动驱动器程序,调用用户自定义的main()
驱动器程序与集群管理器通信,申请资源以启动执行器节点
集群管理器为驱动程序启动执行器节点。
驱动器进程执行用户应用中的操作,根据程序中所定义的RDD的转换操作和行动操作,驱动器节点把工作以任务的形式发送到执行器的进程中
任务在执行器程序中进行计算并保存结果
如果驱动器程序的main()退出 或者调用了sc.stop() ,驱动器程序会中止执行器进程,并且通过集群管理器释放资源。

spark-submit --class com.xiaoding.test.WordCount  ../spark/examples/jars/spark-test-2.jar /usr/local/spark/README.md /usr/local/wordcount1 

Spark应用内与应用间调度

在调度多用户集群时,Spark主要依赖集群管理器来在Spark应用间共享资源,当Spark应用向集群管理器申请执行器节点时,应用收到的执行器节点
个数比它申请的更多或者更少,这取决与集群的可用性与争用。许多集群管理器支持队列,可以为队列定义不同优先级或容量限制,这样Spark可以
把作业提交到相应的队列中。

Spark应用有一种特殊情况,就是那些长期运行的应用,这意味这这些应用从不主动退出。Spark SQL中的服务器就是一个长期运行的Spark应用。当
JDBC服务器启动后,他会从集群管理器获取一系列执行器节点,然后就成为用户提交SQL查询的永久入口,由于这个应用本身就是为多用户调度工作的,
所以他需要一种细粒度的调度机制来强制共享资源。Spark提供了一种用来配置应用内调度策略的机制。SPark内部的公平调度器会让长期运行的应用
定义调度任务的优先级队列。

集群管理器
Spark可以运行在各种集群管理器上,并通过集群管理器访问集群中的机器,如果你只想在一堆机器上运行Spark,那么自带的独立模式是部署该集群
的最简单的方法。如果你有一个需要与别的分布式应用的集群(比如既可以在Spark作业又可以运行Hadoop MP)则需要两个广泛的集群管理器
yarn 和 apache meos 。最后Spark部署到Amazon

选择合适的集群管理器
1. 如果从0开始,可以先选择独立集群管理器,独立模式安装起来最简单,而且如果你只是使用spark的话,独立集群管理器提供与其他集群管理器完全
一样的全部功能
2. 如果你要在使用Spark的同时使用其他应用,或者是要用到更丰富的资源调度功能,那么yarn和mesos都能满足你的需求,建议使用yarn
3. mesos相对yarn和独立模式的一大优点在于其细粒度共享的选项,该选项可以将类似Spark shell这样的交互应用中的不同命令分配到不同的cpu上
4. 任何使用最好把Spark运行HDFS的节点上,这样能快速访问存储。

总结:
Spark应用的运行时架构,它是由一个驱动器节点和一系列分布式执行器节点组成的,如果构建、打包sPARK应用程序并向集群提交执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值