【云计算】Spark性能优化之数据本地性调优
小标 2019-01-07 来源 : 阅读 1145 评论 0

摘要:本文主要向大家介绍了【云计算】Spark性能优化之数据本地性调优,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

本文主要向大家介绍了【云计算】Spark性能优化之数据本地性调优,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。


一:性能优化之数据本地性

1、数据本地性对分布式系统的性能而言是一件最为重要的情况之一,程序运行本身饮食代码和数据两部分,单机版本一般情况下很少考虑数据本地性的问题(因为数据在本地),但是对于单机版本的程序,由于数据本性有PROCESS_LOCAL和NODE_LOCAL之分, 所以,尽量让数据处于PROCESS_LOCAL级别。Spark作为分布式系统,更加注重数据本地性,在Spark中数据本地性分为PROCESS_LOCAL、NODE_LOCAL、NO_PREF、RACK_LOCAL、ANY(数据可能在任何地方,包括在其它网络环境中,例如百度云,数据和计算集群不在同一集群中,此时就是ANY的一种表现)等;

2、对于ANY的情况,默认状态下性能会非常低,此时强烈建议使用Tachyon。例如在百度云上,为了确保计算速度,就在计算集群和存储集群之间加入Tachyon,通过Tachyon来从远程抓取数据,而Spark基于Tachyon来进行计算,这就更好的满足了数据本地性。

3、如果数据是PROCESS_LOCAL,但是此时并没有空闲的Core来运行Task,此时Task就要等待,例如等待3000ms,如果在该时间内获取core则直接运行,如果超过3000ms,此时数据本地性就退而采用NODE_LOCAL级别的数据。同样,NODE_LOCAL数据也会有等待超时时间,以此类推。。。

4、如何配置Locality

统一采用spark.locality.wait参数来设置(例如设置为5000ms),也可以分别设置spark.locality.wait.process、spark.locality.wait.node、spark.locality.wait.rack等。一般的具体设置是Locality优先级越高,则设置越长的等待超时时间。

二:RDD的自定义(以Spark on HBase为例)

第一步,定义RDD.getPartitions的实现

1)createRelation具体确定HBase的链接方式和具体访问的表;

2)通过HBase的API来获取Region的List;

3)过滤出有效的数据;

4)返回Region的Array[Partition],也就是说一个Partition处理一个Region的数据,为更佳的数据本地性打下基础。

第二步,RDD.getPreferredLocations

1)根据split饮食的Region信息来确定Region具体在什么节点上,这样Task在调度时就可以优先被 调度到Region所在的机器上,最大化的提高数据本地性;

第三步,RDD.compute(split: Partition, context: TaskContext)

1)根据split中的Region等信息调用HBase的API来进行操作(主要是查询)


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved