动态加载文件时的Spark Streaming和Data Locality

时间:2015-03-16 08:39:32

标签: hadoop apache-spark spark-streaming


我正在运行一个火花流应用程序,从Kafka接收HDFS上的文件路径,并应打开这些文件并对它们执行某种计算。 问题是我无法享受数据局部性的好处,因为执行者可能在任何节点上运行,而打开文件的执行者不一定是拥有它的人。

有没有办法以我提供的方式动态打开文件,同时保持数据的位置?

谢谢,
丹尼尔

2 个答案:

答案 0 :(得分:0)

我不确定你打开文件是什么意思,如果你可以分享一些代码,但是如果你使用sc.textFile这是一个RDD转换会很有帮助。 转换由集群管理器计划为任务,因此不一定从运行DStream转换的执行程序节点执行。

答案 1 :(得分:0)

目前似乎建议的解决方案无法支持数据位置。
为了从Data Locality中受益,我们编写了一个Kafka Consumer,它使用从Kafka检索的文件路径启动正常的spark作业,我们使用computePreferredLocations来确保在正确的节点上分配容器:

val locData = InputFormatInfo.computePreferredLocations
(Seq(new InputFormatInfo(conf, classOf[TextInputFormat], new Path(“myfile.txt”)))
 val sc = new SparkContext(conf, locData)