第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

spark讀取hdfs數(shù)據(jù)本地性異常

標(biāo)簽:
Spark

在分布式计算中,为了提高计算速度,数据本地性是其中重要的一环。
不过有时候它同样也会带来一些问题。

一.问题描述

在分布式计算中,大多数情况下要做到移动计算而非移动数据,所以数据本地性尤其重要,因此我们往往也是将hdfs和spark部署在相同的节点上,有些人可能会发现即使他已经这么做了,在spark的任务中的locality还是ANY,这说明所有的数据都是走的网络IO。

webp

ANY

在没有没有shuffle的情况下,仅在数据读取阶段网络IO占用都很严重,可以看下ganglia的监控,最高峰出现在读取数据阶段


webp

ganglia

后来发现slave的标识都是ip

webp

这里写图片描述

二.解决方案

而hdfs以hostname作为slave标示,所以改变启动slave的方式

start-slave.sh -h <hostname> <master>

启动后

webp

这里写图片描述

再运行任务就变成了NODE_LOCAL,效率有了极大的提升

webp

这里写图片描述

三.数据本地性的副作用

大多数情况下,数据本地性可以减少网络的IO,提高程序整体的运行效率。不过在一些比较特殊的情况下(Spark的延时调度),他反而会拖累整体运行速度。

taskSetManager在分发任务之前会先计算数据本地性,优先级依次是:

process(同一个executor) -> node_local(同一个节点) -> rack_local(同一个机架) -> any(任何节点)

Spark会优先执行高优先级的任务,如果一个task运行的时间很短(小于设置的spark.locality.wait时间),则数据本地性下一级别的任务则一直不会启动,这就是Spark的延时调度机制。

举个极端例子:运行一个count任务,如果数据全都堆积在某一台节点上,那将只会有这台机器在长期执行任务,集群中的其他机器则会处于等待状态(等待本地性降级)而不执行任务,造成了大量的资源浪费。

判断的公式为:

curTime – lastLaunchTime >= localityWaits(currentLocalityIndex)

其中 curTime 为系统当前时间,lastLaunchTime 为在某优先级下最后一次启动task的时间

如果满足这个条件则会进入下一个优先级的时间判断,直到 any,不满足则分配当前优先级的任务。

数据本地性任务分配的源码在 taskSetManager.scala

如果存在大量executor处于等待状态,可以降低以下参数的值(也可以设置为0),默认都是3s。

spark.locality.waitspark.locality.wait.processspark.locality.wait.nodespark.locality.wait.rack

当你数据本地性很差,可适当提高上述值,当然也可以直接在集群中对数据进行balance。



作者:breeze_lsw
链接:https://www.jianshu.com/p/a1d0824053d8


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消