我正在运行一个火花流应用程序,从Kafka接收HDFS上的文件路径,并应打开这些文件并对它们执行某种计算。
问题是我无法享受数据局部性的好处,因为执行者可能在任何节点上运行,而打开文件的执行者不一定是拥有它的人。
有没有办法以我提供的方式动态打开文件,同时保持数据的位置?
谢谢,
丹尼尔
答案 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)