本地提交spark_Spark 数据本地化级别

6faa98d4492115a8a010028ad5872e01.png

RDD 源码

大家可以看到源码中的第五条注释说明,翻译过来的大概意思是提供一系列的最佳计算位置。

我之前一直不太清楚 spark 是如何内部实现的,今天就带领大家来看一看 spark 的本地数据化级别在任务执行中的演变过程。

1 数据的本地化级别有哪些?

Spark 中任务的处理需要考虑数据的本地性,以 spark 1.6 为例,目前支持一下几种。(中英文排版很头疼,谁来帮帮我啊)

PROCESS_LOCAL 进程本地化,表示 task 要计算的数据在同一个 Executor 中。

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

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

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

ANY 跨机架,数据在非同一机架的网络上,速度最慢。

如果不是很清楚,我画(造)了一张图放在这以供大家理解。

ee95b95b1801a9415ddc356a4c74da08.png

2 Spark 的数据本地化由谁来负责呢?

val rdd1 = sc.textFile("hdfs://tsl...") rdd1.cache()rdd1.map.filter.count()

上面这段简单的代码,背后其实做什么很多事情。Driver 的 TaskScheduler 在发送 task 之前,首先应该拿到 rdd1 数据所在的位置,rdd1 封装了这个文件所对应的 block 的位置,DAGScheduler 通过调用 getPrerredLocations() 拿到 partition 所对应的数据的位置,TaskScheduler 根据这些位置来发送相应的 task。

具体的解释:

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 时发挥作用。

总的来说,Spark 中的数据本地化是由 DAGScheduler 和 TaskScheduler 共同负责的。

3

计算节点与输入数据位置的关系,下面以一个图来展开 spark 是如何让进行调度的。这一个过程会涉及 RDD, DAGScheduler , TaskScheduler。

e72641b868db40d091b789d116fcf0b1.png

第一步:PROCESS_LOCAL

TaskScheduler 根据数据的位置向数据节点发送 task 任务。如果这个任务在 worker1 的 Executor 中等待了 3 秒。(默认的,可以通过spark.locality.wait 来设置),可以通过 SparkConf() 来修改,重试了 5 次之后,还是无法执行,TaskScheduler 就会降低数据本地化的级别,从 PROCESS_LOCAL 降到 NODE_LOCAL。

第二步:NODE_LOCAL

TaskScheduler 重新发送 task 到 worker1 中的 Executor2 中执行,如果 task 在worker1 的 Executor2 中等待了 3 秒,重试了 5 次,还是无法执行,TaskScheduler 就会降低数据本地化的级别,从 NODE_LOCAL 降到 RACK_LOCAL。

第三步:RACK_LOCAL

TaskScheduler重新发送 task 到 worker2 中的 Executor1 中执行。

第四步:

当 task 分配完成之后,task 会通过所在的 worker 的 Executor 中的 BlockManager 来获取数据。如果 BlockManager 发现自己没有数据,那么它会调用 getRemote() 方法,通过 ConnectionManager 与原 task 所在节点的 BlockManager 中的 ConnectionManager先建立连接,然后通过TransferService(网络传输组件)获取数据,通过网络传输回task所在节点(这时候性能大幅下降,大量的网络IO占用资源),计算后的结果返回给Driver。这一步很像 shuffle 的文件寻址流程,Spark 的 shuffle 文件寻址流程

4

TaskScheduler在发送task的时候,会根据数据所在的节点发送task,这时候的数据本地化的级别是最高的,如果这个task在这个Executor中等待了三秒,重试发射了5次还是依然无法执行,那么TaskScheduler就会认为这个Executor的计算资源满了,TaskScheduler会降低一级数据本地化的级别,重新发送task到其他的Executor中执行,如果还是依然无法执行,那么继续降低数据本地化的级别...

如果想让每一个 task 都能拿到最好的数据本地化级别,那么调优点就是等待时间加长。注意!如果过度调大等待时间,虽然为每一个 task 都拿到了最好的数据本地化级别,但是我们 job 执行的时间也会随之延长。

下面是官方提供的参数说明:

35840e9c502365fab8c8c351e15b76c5.png

可以在代码里面这样设置:

new SparkConf.set("spark.locality.wait

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

街舞中的rolling机器人_首家!爆点!奈雪の茶、蛙小侠..开业倒计时!街舞PK…这个六一就差你来围观了...

说起济南的各大shopping mall世茂广场绝对是最得人心的总能迅速集结当下最火爆的品牌各种线上线下活动也是搞得新颖又有趣五一的“刘看山”还没结束呢这就马不停蹄的要上新活动了前方预警⚠奈雪の茶等一大波新店又要入驻啦 还有 “奔跑吧爸爸”亲子活动、街舞大赛 ……统统都在…

简述isodata算法的原理_基于UWB技术的室内定位方法简述

1. UWB室内定位概述:UWB室内定位技术与传统通信技术有极大的差异,它不需要使用传统通信体制中的载波,而是通过发送和接收具有纳秒或纳秒级以下的极窄脉冲来传输数据,从而具有GHz量级的带宽。超宽带室内定位可用于各个领域的室内精…

slider获取点击 unity_Unity基础 | 70分钟带你轻松入门

Hello . 大家好今天给大家分享Unity3D的基础入门我是麦田这次录制的教程是面向零基础,想上手Unity的同学。所以就做了这一次大串讲。(只此一回,别无分号了。)时长1小时10分钟,我的建议是一口气看完。(因为我也是一口气讲完的)大家可以点击文末…

达梦数据库导入oracle数据_达梦数据库助力加速石油石化行业数字化转型升级

2020中国石油石化企业信息技术交流大会暨数字化转型、智能化发展高峰论坛于10月22日-23日在北京召开,武汉达梦数据库有限公司(简称达梦公司)作为国产数据库代表企业受邀参与此次活动,并以“国产数据库能源行业解决方案”为主题报告,为来宾介绍…

在lcd屏幕上窗口显示一个bitmap_SmartDrop——LED/LCD大屏内容投屏管理软件

产品简介SmartDrop是飞画推出的一款针对拼接大屏(LCD/LED)进行内容投屏管理的播控软件,支持LCD/LED两种应用环境,用户可以根据屏幕的使用场景进行选择安装LCD-Drop或LED-Drop。SmartDrop支持超高分辨率,显示窗口分辨率自定义,远程可视化控制&…

复杂电路简化经典例题_【中考物理】电路简化的10大原则和7大步骤

电路问题是初中物理比较难的知识,也是中考很重要的一部分。很多同学遇到电路类的题目,摆在面前的第一个问题就是不会简化电路图。今天给大家分享电路简化的10大原则和7大步骤,希望能够帮你解决这个难题!电路简化的10大基本原则初中…

单关闭功能_广告弹窗关闭

相信现在大部分电脑都安装360安全卫士和搜狗拼音输入法,关于这两款软件各有吐槽,最讨厌的莫过于莫名奇妙的各种广告弹窗,让人不厌其烦。因为我们是免费,所以不要渴求太多。360安全卫士广告弹窗关闭办法1、打开360安全卫士点击右上…

忽视大小写函数_使用率低但功能强大的6个Excel函数公式应用技巧解读!

在Excel函数公式中,有部分函数的使用率是比较低的,但是其功能也是非常强大的。一、Median函数。功能:返回一组数的中值。中值就是一组数的中间数值,如果参数包含的数值是偶数,Median函数将返回位于中间两个值的平均值。…

创建路径_PS钢笔工具是建立路径的基本工具

PS“钢笔工具”是建立路径的基本工具,用来绘制任意形状的图形路径,钢笔工具通过设置锚点绘制形状路径。新建一个页面,选择钢笔工具,在页面上单击,建立路径的开始点,也就是路径的第一个锚点。再单击&#xf…

使用 保存文件_使用SaveFileDialog调用保存文件对话框

使用SaveFileDialog调用保存文件对话框【实例介绍】本实例使用SaveFileDialog对话框实现了保存文件的功能。运行程序, 保存文件,打开“保存文件”对话框(Windows中一般称为“另存为”对话框),实现保存操作。【开发过程】(1) 创建一个Windows应…

js验证家庭住址_手摇充电电筒、多功能组合剪刀……官方清单建议上海家庭储备13种应急物资...

面对灾情或突发事件,第一时间自救、避险或撤离,可把损失和伤亡降到最低,因此,以家庭为单位进行应急物资储备尤为必要。12月8日,上海市应急管理局发布了《上海市家庭应急物资储备建议清单》,倡导家庭储备应急…

机器人搏击大赛冠军_机器人的江湖 谁主沉浮——2017格斗机器人大赛侧记

在2017世界机器人大会期间,格斗机器人大赛正如火如荼地进行着。 本报记者 李芃达摄狭路相逢勇者胜!相对而行的两辆高速赛车重重地撞在一起……这不是《速度与激情》里的经典桥段,而是2017格斗机器人大赛中狂暴战车之间的巅峰对决。“哇&#…

mysql输出美式报表_Navicat for MySQL 如何预览报表

Navicat for MySQL 使用用户友好 GUI 报表创建工具创建各种不同类型的报表,设计发票、统计、邮寄标签及更多其他报表。输出报表到多种格式,如 text、PDF、Lotus、Excel、Graphic、Html 及更多。Navicat Report Viewer 可浏览由报表创建工具设计的报表&am…

mysql server_id作用_MySQL复制过程中server-id的理解

一. server-id做什么用的,你知道吗?1、 MySQL的同步的数据中是包含server-id的,用于标识该语句最初是从哪个server写入的,所以server-id一定要有的2、 每一个同步中的slave在master上都对应一个master线程,该线程就…

java如何解析cron成可视化_宅家30天,2万字节java高级工程师面试题解析,如何斩获阿里p7...

宅家里一个月,“闭关修炼”的你是不是正在为金三银四跳槽季发愁呢?小编今天说的这富含的15个互联网大厂Java高级工程师核心面试问题整理!内容包括:kafka面试题及解析18道ZooKeeper面试题及解析28道Linux 面试真题及解析45道MySQL面…

java接口如何接受语音参数_Java 是如何优雅地实现接口数据校验的?

作者 | 无敌码农 责编 | 张文头图 | CSDN 下载自东方 IC来源 | 无敌码农(ID:jiangqiaodege)本篇文章给大家分享平时开发中总结的一点小技巧!在工作中写过 Java 程序的朋友都知道,目前使用 Java 开发服务最主流的方式就是通过 Spring MVC 定义…

msp430单片机 温度计编程_MSP430系列与89C5l系列的比较

1、89C51单片机是8位单片机。其指令是采用的被称为“CISC”的复杂指令集,共具有111条指令。而MSP430单片机是16位的单片机,采用了精简指令集(RISC)结构,只有简洁的27条指令,大量的指令则是模拟指令,众多的寄存器以及片…

php 正则表达式提取出合法的时间_PHP正则表达式核心技术完全详解 第1节

PHP正则表达式核心技术 第1节正则表达式: 就是描述字符串排列模式的一种自定义语法规则、也是用于描述字符串排列 或 匹配模式的一种语法规则、正则表达式: 就是用于描述字符串排列 或 匹配模式的一种语法规则、它主要用于字符串的: 分割字符串、查找字符串、替换字符串 的一系…

anacoda2如何连接使用mysql_Anaconda 安装 Python 库(MySQLdb)的方法-(转)

安装python库的过程中,最重要的地方就是版本需要兼容。其中操作系统为64位,Python为2.X 64位,下载安装文件的时候也要注意版本匹配。其中文件名中包含的cp27表示CPython 2.7版本,cp34表示CPython 3.4,win_amd64指的是6…

php mysql随机记录_php随机取mysql记录方法小结

这篇文章主要介绍了php随机取mysql记录方法,实例分析了几种常见的随机获取mysql数据的方法,是非常实用的技巧,具有一定的参考借鉴价值,需要的朋友可以参考下本文实例总结了php随机取mysql记录方法。分享给大家供大家参考。具体分析如下:在php中要随机取mysql记录我们…