zoukankan      html  css  js  c++  java
  • 浅谈spark的数据本地性(data locality)

    spark的数据本地性(data locality)

    Spark其中一个特性就是数据本地性,简单的说就是“移动数据不如移动计算”。

    因为数据在网络传输中会有不小的I/O消耗,并且传输距离越长消耗越大。

    所以,数据本地性可以理解为数据传输距离,而我们的目的就是避免数据在网络中传输或尽量减少传输的距离。

    根据传输的距离,我们可以对数据本地性根据传输距离进行分级。

    查看Spark Web UI任务信息,我们可以看到下面的信息,其中Locality Level 一栏就是数据本地性的情况。


    数据本地性级别划分
    • PROCESS_LOCAL:要处理的数据在同一个本地进程,
      即数据和Task在同一个Excutor JVM中。
      这种情况是RDD的数据经过缓存,此时不需要网络传输,是最优locality。(但是数据要先缓存)。
    • NODE_LOCAL:分两种情况:
      一是数据和Task在同一节点上的不同executor中;
      二是数据HDFS和Task在同一个结点上,
      此时需要进行进程间进行传输,速度比PROCESS_LOCAL略慢。
    • NO_PREF:数据从哪访问都一样,相当于没有数据本地性
      一般值从Mysql之类的数据源读取数据。
    • RACK_LOCAL:数据与Task在同机架的不同节点

      此时需要通过网络传输,速度比NODE_LOCAL慢。
    • ANY:数据和Task可能在集群的任何地方,
      性能最差,一般出现这种情况就该排查原因了

    相关参数

    Spark程序调度过程中不一定严格按照计算出来的数据本地性进行执行。

    因为我们的任务是并行执行的,但是Executor的core资源有限,在你计算出来最优本地性的时候也许资源被占用。

    此时如果我们降级到其他本地性级别也许整体效率更高。

    所以,我们可以通过一些参数,控制等待时间,

    一旦到达等待时间仍然没有获得资源,就尝试降低本地性级别让其他Excutor 执行。

    相关参数如下:

    参数 含义 默认值
    spark.locality.wait 设置所有级别的数据本地性
    默认:3s
    spark.locality.wait.process 多长时间等不到PROCESS_LOCAL就降级 默认:spark.locality.wait
    spark.locality.wait.node 多长时间等不到NODE_LOCAL就降级 默认:spark.locality.wait
    spark.locality.wait.rack 多长时间等不到RACK_LOCAL就降级 默认:spark.locality.wait

    降级顺序如下:

  • 相关阅读:
    php文件加密
    Laravel框架学院
    php生成rss订阅
    ThinkPHP带表情无限级评论回复
    jQuery + Cookie引导客户操作
    基于jQuery表格增加删除代码示例
    Web前端开发与PHP设计
    世界各大名牌大学课件
    传智播客免费公开课
    Android,ios,手游视频网站
  • 原文地址:https://www.cnblogs.com/lillcol/p/14838348.html
Copyright © 2011-2022 走看看