spark-on emr saveastextfile不会将数据写入本地目录

67up9zun  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(410)

在emr上运行spark(ami3.8)。当尝试将rdd写入本地文件时,在名称/主节点上没有得到任何结果。
在我以前的emr集群上(与bootstrap脚本安装的spark版本相同,而不是作为emr的附加组件),数据将写入name节点上的本地dir。现在我可以看到它出现在集群中其他节点的“/home/hadoop/test/\u temporary/0/task*”目录中,但只有主节点上的“success”文件。
如何使文件只写入名称/主节点?
下面是我使用的命令示例:

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

mklgxw1f1#

我可以使用一种循环的方式来完成这一任务,首先推送到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)) !

  }

相关问题