gpt4 book ai didi

hadoop - spark + hadoop 数据本地化

转载 作者:可可西里 更新时间:2023-11-01 14:16:30 25 4
gpt4 key购买 nike

我得到了一个文件名的 RDD,所以是一个 RDD[String]。我通过并行化文件名列表(hdfs 中的文件)来获得它。

现在我映射这个 rdd,我的代码使用 FileSystem.open(path) 打开一个 hadoop 流。然后我处理它。

当我运行我的任务时,我使用 spark UI/Stages,我看到所有任务的“Locality Level”=“PROCESS_LOCAL”。我认为 spark 不可能以我运行任务的方式(在 4 个数据节点的集群上)实现数据局部性,这怎么可能?

最佳答案

When FileSystem.open(path) gets executed in Spark tasks, File content will be loaded to local variable in same JVM process and prepares the RDD ( partition(s) ). so the data locality for that RDD is always PROCESS_LOCAL

-- vanekjar has already commented the on question


关于 data locality in Spark 的附加信息:

根据数据的当前位置,有多个位置级别。从最近到最远的顺序:

  • PROCESS_LOCAL 数据与运行代码位于同一 JVM 中。这是最好的地方
  • NODE_LOCAL 数据在同一节点上。示例可能在同一个节点上的 HDFS 中,或者在同一个节点上的另一个执行程序中。这比 PROCESS_LOCAL 慢一点,因为数据必须在进程之间传输
  • NO_PREF 数据可以从任何地方同样快速地访问,并且没有位置偏好
  • RACK_LOCAL 数据位于同一机架服务器上。数据位于同一机架上的不同服务器上,因此需要通过网络发送,通常是通过单个交换机
  • 任何数据都在网络的其他地方,不在同一个机架中

Spark 更喜欢在最佳位置级别安排所有任务,但这并不总是可能的。在任何空闲执行程序上都没有未处理数据的情况下,Spark 会切换到较低的位置级别。

关于hadoop - spark + hadoop 数据本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31006632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com