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

    降级顺序如下:

  • 相关阅读:
    android 各国语言对应的缩写
    Android 程式开发:(十三)特殊碎片 —— 13.2 DialogFragment
    Android Bitmap和Canvas学习笔记 [转]
    Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
    XAMPP 在windows下无法启动Apache解决方案
    深入浅出Java并发包—锁机制(一)
    深入浅出Java并发包—锁(Lock)VS同步(synchronized)
    深入浅出Java并发包—CAS机制
    深入浅出Java并发包—指令重排序
    深入浅出Java并发包—原子类操作
  • 原文地址:https://www.cnblogs.com/lillcol/p/14838348.html
Copyright © 2011-2022 走看看