Spark - on EMR saveAsTextFile不会将数据写入本地目录

时间:2015-08-05 22:26:12

标签: hadoop apache-spark emr

在EMR上运行Spark(AMI 3.8)。当尝试将RDD写入本地文件时,我在名称/主节点上没有得到任何结果。

在我之前的EMR集群上(使用引导脚本安装的相同版本的Spark而不是作为EMR的附加组件),数据将写入名称节点上的本地目录。现在我可以看到它出现在集群中其他节点上的“/ home / hadoop / test / _temporary / 0 / task *”目录中,但只出现在主节点上的“SUCCESS”文件中。

如何才能将文件写入名称/主节点?

以下是我正在使用的命令的示例:

myRDD.saveAsTextFile("file:///home/hadoop/test")

1 个答案:

答案 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)) !

  }