在EMR上运行Spark(AMI 3.8)。当尝试将RDD写入本地文件时,我在名称/主节点上没有得到任何结果。
在我之前的EMR集群上(使用引导脚本安装的相同版本的Spark而不是作为EMR的附加组件),数据将写入名称节点上的本地目录。现在我可以看到它出现在集群中其他节点上的“/ home / hadoop / test / _temporary / 0 / task *”目录中,但只出现在主节点上的“SUCCESS”文件中。
如何才能将文件写入名称/主节点?
以下是我正在使用的命令的示例:
myRDD.saveAsTextFile("file:///home/hadoop/test")
答案 0 :(得分:0)
我可以通过首先推送到HDFS然后使用shell命令将结果写入本地文件系统来实现这一目的。但我很想知道其他人是否有更优雅的方法。
//rdd to local text file
def rddToFile(rdd: RDD[_], filePath: String) = {
//setting up bash commands
val createFileStr = "hadoop fs -cat " + filePath + "/part* > " + filePath
val removeDirStr = "hadoop fs -rm -r " + filePath
//rm dir in case exists
Process(Seq("bash", "-c", removeDirStr)) !
//save data to HDFS
rdd.saveAsTextFile(filePath)
//write data to local file
Process(Seq("bash", "-c", createFileStr)) !
//rm HDFS dir
Process(Seq("bash", "-c", removeDirStr)) !
}