我在运行读取文件的spark java程序时遇到了一些问题,请执行一些操作,然后在给定路径上生成输出文件。 当主机和从机在同一台机器上时,每件事情都可以正常工作.ie:在独立群集模式下。 但是当我在多机多节点集群设置中部署相同的程序时,问题就开始了。这意味着主人在x.x.x.102
上运行,从属人员在x.x.x.104
上运行。 两个master-slala都共享了它们的SSH密钥,并且可以互相访问。输出文件在apache火花的slave机器上生成
最初从属无法读取输入文件,因为我知道我需要在sc.textFile()
之前拨打sc.addFile()
。解决了问题。但是现在我看到在输出路径下的_temporary文件夹中的从属机器上正在生成输出。即:/tmp/emi/_temporary/0/task-xxxx/part-00000
在本地集群模式下,它工作正常,并在/tmp/emi/part-00000
中生成输出文件。
我开始知道我需要使用SparkFiles.get()
。但我无法了解如何以及在何处使用此方法。
到现在我使用
DataFrame dataobj = ...
dataObj.javaRDD().coalesce(1).saveAsTextFile("file:/tmp/emi");
任何一个可以请让我知道如何调用SparkFiles.get()
?
总之,我该如何告诉slave在驱动程序运行的机器上创建输出文件?
请帮忙。
非常感谢。
总之,我想知道,在多机多节点群集环境中如何告诉从机将输出文件保存在驱动程序机器中? – summary