2、Spark系统部署与应用运行的基本流程

1、Spark系统架构

与Hadoop MapReduce 的结构类似,Spark 也是采用 Master-Worker 架构。

Master 节点与Worker 节点的职责如下:

1)、Master 节点上常驻Master 进程。该进程负责给Worker 进程分发Spark 任务,监控Worker 进程的存活情况以及监控Worker 进程上任务的执行情况。

2)、Worker 节点上常驻Worker 进程。该进程除了与Master 进程进行通信外,还负责管理Spark 任务的执行,如启动 Exector 来执行具体的task,以及监控task 的执行情况。

Spark 以线程的方式运行task 而不是以进程的方式运行task 的讨论:在Hadoop Map/Reduce 中,每个task 是以java 进程的方式运行。这样的好处是,每个task 独享进程资源,每个task 之间相互独立,不会相互干扰,但坏处是,task 之间不方便共享数据。例如,如果同一个机器上的不同task 想要读取同一份字典进行数据过滤的时候,需要将这个字典拷进各自的进程中,这样就能造成了数据的多次拷贝、内存资源的浪费问题。另外,在应用的执行过程中,需要不停的启动/停止新旧task,在task 的启动/停止过程中,需要做很多初始化的工作,因此采用进程的方式运行task 会降低执行的效率。为了数据共享和提高执行效率,Spark 使用线程的方式执行task,但缺点是线程间会有资源的竞争,而且 Executor JVM 的日志中会包换多个并行执行task 的运行日志,比较混乱。

1.1 用户代码基本逻辑

在Spark 中,需要注意的是数据处理流程在执行 action() 的时候,才会执行数据处理流程。如果没有action() 操作的话,Spark 是不会执行数据处理流程的。

1.2 物理执行计划

Spark 根据数据依赖关系,将逻辑处理流程转换为物理执行计划,包括执行阶段和执行任务。包括以下3个步骤:

(1) 首先确定应用会产生哪些作业(job)。

(2)其次根据逻辑处理流程中的数据依赖关系,将每个job 拆分为执行阶段(stage)。

(3) 最后,根据每个RDD 的分区个数确定执行task 的个数和种类。

为什么要拆分执行阶段?如果将每个操作当做一个任务,那么效率太低,错误容忍也比较困难。将job 拆分为任务阶段 stage 后,第1个好处是,拆分得到的stage 不会太小,也不会太大,而且是同构的,便于并行执行。第2个好处是,可以将多个操作放到一个task 中执行,使得操作可以串行、流水化处理,提高了数据处理的效率。第3个好处是,可以方便进行错误容忍处理,一个stage失效,我们只需要重新运行失效的stage,而不是重新运行整个job。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值