【问题标题】:Distributing partitions across cluster跨集群分布分区
【发布时间】:2018-05-08 07:49:40
【问题描述】:

apache spark 中,允许从许多不同来源加载数据集。据我了解spark 集群的计算节点可能与hadoop 用于存储数据的节点不同(我说的对吗?)。更重要的是,我们甚至可以将本地文件加载到spark 作业中。这是主要问题:即使我们将同一台计算机用于hdfsspark 目的,spark 在创建RDD 期间是否总是会洗牌所有数据?或者spark 只会尝试以利用现有数据局部性的方式加载数据?

【问题讨论】:

    标签: apache-spark hadoop pyspark bigdata cluster-computing


    【解决方案1】:

    您可以使用HDFS 作为MapReduce (Hadoop)Spark 引擎的通用底层存储,并使用YARN 之类的集群管理器来执行资源管理。 Spark 将尝试利用数据局部性,并尽可能靠近数据执行任务。

    它是这样工作的:如果节点上有数据可以处理,但是CPU没有空闲,Spark会等待一定的时间(由配置参数决定:@ 987654327@ 秒,默认为 3 秒)使 CPU 可用。

    如果经过配置的时间后 CPU 仍然没有空闲,Spark 会将任务切换到较低的位置级别。然后它将再次等待spark.locality.wait 秒,如果再次发生超时,它将切换到更低的位置级别。

    位置级别定义如下,按从最接近数据到最远数据的顺序排列 (https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.scheduler.TaskLocality$):

    PROCESS_LOCAL (data is in the same JVM as the running code)
    NODE_LOCAL (data is on the same node)
    NO_PREF (data is accessed equally quickly from anywhere and has no locality preference)
    RACK_LOCAL (data is on the same rack of servers)
    ANY (data is elsewhere on the network and not in the same rack)
    

    也可以单独配置位置级别的等待时间。对于较长的作业,等待时间可以增加到比默认值 3 秒更大的值,因为 CPU 可能会占用更长的时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 2017-02-10
      • 2020-10-08
      • 2021-07-11
      • 2018-12-19
      • 1970-01-01
      相关资源
      最近更新 更多