spark任务执行流程及数据本地化介绍

本文介绍了Spark中数据的本地化级别,包括PROCESS_LOCAL(进程本地化)、NODE_LOCAL(节点本地化)、NO_PREF(无偏好)、RACK_LOCAL(机架本地化)和ANY(任意位置)。详细阐述了每种本地化级别的含义和数据访问速度,特别是当数据在Executor、worker磁盘或HDFS上的情况。
摘要由CSDN通过智能技术生成

Application任务执行流程


在Spark Application提交后,Driver会根据action算子划分成一个个的job,然后对每一 个job划分成一个个的stage,stage内部实际上是由一系列并行计算的task组成的,然后 以TaskSet的形式提交给你TaskScheduler,TaskScheduler在进行分配之前都会计算出 每一个task最优计算位置。Spark的task的分配算法优先将task发布到数据所在的节点上 ,从而达到数据最优计算位置。

Spark中数据的本地化介绍


Spark中数据的本地化方式分为5种,优先级依次是1到5

  1. PROCESS_LOCAL:进程本地化;
    表示 task 要计算的数据在同一个 Executor 中;
    如图:

  2. NODE_LOCAL:节点本地化;
    速度稍慢,因为数据需要在不同的进程之间传递或从文件中读取。
    分为两种情况,
    第一种:task 要计算的数据是在同一个 worker 的不同 Executor 进程中。
    第二种:task 要计算的数据是在同一个 worker 的磁盘上,或在 HDFS 上恰好有 block 在同一个节点上。如果 Spark 要计算的数据来源于 HDFS 上,那么最好的本地化级别就是 NODE_LOCAL。
    如图:
    在这里插入图片描述

  3. NO_PREF: 没有最佳位置,数据从哪访问都一样快,不需要位置优先。比如 Spark SQL 从 Mysql 中读取数据。

  4. RACK_LOCAL: 机架本地化,数据在同一机架的不同节点上。需要通过网络传输数据以及文件 IO,比 NODE_LOCAL 慢。
    情况一:task 计算的数据在 worker2 的 EXecutor 中。
    情况二:task 计算的数据在 work2 的磁盘上。
    如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值