查看: 154|回复: 4

Spark数据本地化

[复制链接]
论坛徽章:
0
发表于 2019-9-12 17:23 | 显示全部楼层 |阅读模式

Spark 原理

Spark数据本地化原理
回复

使用道具 举报

论坛徽章:
0
 楼主| 发表于 2019-9-12 17:24 | 显示全部楼层
PROCESS_LOCAL   进程本地化:task要计算的数据在同一个Executor中
回复 支持 反对

使用道具 举报

论坛徽章:
0
 楼主| 发表于 2019-9-12 17:24 | 显示全部楼层
NODE_LOCAL    节点本地化:速度比 PROCESS_LOCAL 稍慢,因为数据需要在不同进程之间传递或从文件中读取
                                        情况一:task要计算的数据是在同一个Worker的不同Executor进程中
                                        情况二:task要计算的数据是在同一个Worker的磁盘上,或在 HDFS 上,恰好有 block 在同一个节点上。
回复 支持 反对

使用道具 举报

论坛徽章:
0
 楼主| 发表于 2019-9-12 17:24 | 显示全部楼层
NODE_PREF    没有较佳位置这一说,数据从哪里访问都一样快,不需要位置优先。比如说SparkSQL读取MySql中的数据

    RACK_LOCAL 机架本地化,数据在同一机架的不同节点上。需要通过网络传输数据及文件 IO,比 NODE_LOCAL 慢
                                         情况一:task计算的数据在Worker2的Executor中
                                         情况二:task计算的数据在Worker2的磁盘上
回复 支持 反对

使用道具 举报

论坛徽章:
0
 楼主| 发表于 2019-9-12 17:24 | 显示全部楼层
总的来说:
      Spark中的数据本地化由DAGScheduler和TaskScheduler共同负责。
      DAGScheduler切割Job,划分Stage, 通过调用submitStage来提交一个Stage对应的tasks,submitStage会调用submitMissingTasks,submitMissingTasks 确定每个需要计算的 task 的preferredLocations,通过调用getPreferrdeLocations()得到partition 的优先位置,就是这个 partition 对应的 task 的优先位置,对于要提交到TaskScheduler的TaskSet中的每一个task,该task优先位置与其对应的partition对应的优先位置一致。
      TaskScheduler接收到了TaskSet后,TaskSchedulerImpl 会为每个 TaskSet 创建一个 TaskSetManager 对象,该对象包含taskSet 所有 tasks,并管理这些 tasks 的执行,其中就包括计算 TaskSetManager 中的 tasks 都有哪些locality levels,以便在调度和延迟调度 tasks 时发挥作用。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

 

GMT+8, 2019-11-16 04:29 , Processed in 0.114931 second(s), 34 queries .

关闭

扫一扫加入
本版微信群