前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark性能调优03-数据本地化调优

Spark性能调优03-数据本地化调优

作者头像
CoderJed
发布2018-09-13 10:43:53
9320
发布2018-09-13 10:43:53
举报

1. task数据本地化级别

(1) PROCESS_LOCAL:进程本地化

(2) NODE_LOCAL:节点本地化

(3) NO_PREF:没有本地化级别

(4) RACK_LOCAL:机架本地化

(5) ANY:跨机架取数据

2. TaskScheduler发送task选择本地化级别的策略

比如计算需要的数据在node01这台服务器中的Executor1这个进程中,那么TaskScheduler会把TaskSet发往Executor1进程中执行,此时的数据本地化级别时PROCESS_LOCAL,Executor1是最佳的计算位置,如果发送的task在等待了3秒,重试了5次之后仍然没有执行,那么TaskScheduler就认为Executor1的资源不充足,不足以支撑计算,那么降低数据本地化级别,把task发往node01的另外一个进程Executor2中,这时的数据本地化级别为NODE_LOCAL,如果还无法执行,降低为RACK_LOCAL,ANY,直到Task可以开始计算

3. 查看某任务的数据本地化级别的方法

(1) 在Spark Web UI中查看

(2) 查看Spark作业的执行日志

4. 修改task数据本地化级别的方法

增加等待时间,默认3s,可以成倍数提高,按照6s,12s,24s…这样的方式来修改,这样可以快速找到最佳值,配置参数:

# 可以调整全部级别的task执行等待时间,也可以分别调整
spark.locality.wait         default(3s)
spark.locality.wait.process default(3s)
spark.locality.wait.node    default(3s)
spark.locality.wait.rack    default(3s)

在默认情况下,最初的数据本地化级别为PROCESS_LOCAL,如果等待了3s,重试5次后还没有开始执行task,那么会降低级别,再尝试开始执行task,比如,我们就想让task的数据本地化级别为PROCESS_LOCAL,那么把spark.locality.wait.process修改为一个很大的值,那么这个task会一直等待,直到本机的executor中已经加载过来了需要的数据,当然,我们不会这么做。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.01.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. task数据本地化级别
    • (1) PROCESS_LOCAL:进程本地化
      • (2) NODE_LOCAL:节点本地化
        • (3) NO_PREF:没有本地化级别
          • (4) RACK_LOCAL:机架本地化
            • (5) ANY:跨机架取数据
            • 2. TaskScheduler发送task选择本地化级别的策略
            • 3. 查看某任务的数据本地化级别的方法
              • (1) 在Spark Web UI中查看
                • (2) 查看Spark作业的执行日志
                • 4. 修改task数据本地化级别的方法
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档