kos*_*ios 6 hadoop hdfs apache-spark
我有一个文件名的RDD,所以RDD [String].我通过并行化文件名列表(hdfs中的文件)得到它.
现在我映射这个rdd,我的代码使用FileSystem.open(path)打开一个hadoop流.然后我处理它.
当我运行任务时,我使用spark UI/Stages,我看到所有任务的"Locality Level"="PROCESS_LOCAL".我不认为spark可能像我运行任务一样(在4个数据节点的集群上)实现数据局部性,这怎么可能?
当
FileSystem.open(path)在星火任务得到执行,文件的内容将被加载到局部变量在同一个JVM进程,并准备RDD(分区(S))。因此该RDD的数据位置始终是PROCESS_LOCAL- vanekjar已经发表意见的问题上
有关Spark中数据局部性的其他信息:
根据数据的当前位置,可分为多个级别。从最远到最远的顺序:
Spark倾向于在最佳位置级别安排所有任务,但这并不总是可能的。在任何空闲执行器上没有未处理数据的情况下,Spark会切换到较低的本地级别。
数据局部性是 Spark 的功能之一,可提高其处理速度。数据局部性部分可以在Spark 数据局部性调整指南中看到。 开始时,当您编写 sc.textFile("path") 时,此时数据局部性级别将根据您指定的路径,但之后 Spark 尝试将局部性级别设置为 process_local,以便通过在数据存在的位置(本地)启动进程来优化处理速度。
| 归档时间: |
|
| 查看次数: |
2602 次 |
| 最近记录: |