【问题标题】:Finding the location of my spark job output file查找我的 spark 作业输出文件的位置
【发布时间】:2019-12-03 20:03:59
【问题描述】:

我正在 AWS 上的 EMR 集群中测试 pyspark 作业。目标是使用 Lambda 函数来触发 spark 作业,但现在我手动运行 spark 作业。因此,我通过 SSH 连接到主节点,然后运行 ​​spark 作业,如下所示:

spark-submit /home/hadoop/testspark.py mybucket

mybucket - 传递给 spark 作业的参数。

保存RDD的行是

rddFiltered.repartition(1).saveAsTextFile("/home/hadoop/output.txt")

火花作业似乎正在运行,但它会将输出文件放在某个位置 - 输出目录 hdfs://ip-xxx-xx-xx-xx.ec2.internal:8020/home/hadoop/output.txt。

  1. 它的确切位置在哪里,如何查看内容?原谅我对 HDFS 和 Hadoop 的无知。
  2. 最后,我想将 output.txt 重命名为有意义的名称,然后转移到 S3,只是还没到那里。
  3. 如果我重新运行 spark 作业,它会显示“输出目录 hdfs://ip-xxx-xx-xx-xx.ec2.internal:8020/home/hadoop/output.txt 已经存在”。如何防止这种情况发生或至少覆盖文件?

谢谢

【问题讨论】:

    标签: pyspark amazon-emr


    【解决方案1】:

    根据 EMR 文档: https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-file-systems.html

    如果不指定前缀,spark默认会向HDFS写入数据。您可以使用以下命令检查 EMR HDFS:

    hadoop fs -ls /home/hadoop/
    

    您还可以使用 S3DistCp 从 HDFS 传输到 S3:

    https://docs.aws.amazon.com/emr/latest/ReleaseGuide/UsingEMR_s3distcp.html

    很遗憾,您无法使用 saveAsTextFile 覆盖现有文件:

    https://spark-project.atlassian.net/browse/SPARK-1100

    正如我所见,您将文件重新分区为一个分区,因此您也可以将其写入本地文件系统:

    rddFiltered.repartition(1).collect().saveAsTextFile("file:///home/hadoop/output.txt")
    

    注意,如果您使用分布式集群,您必须先collect() 回到驱动程序!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      • 2019-03-26
      相关资源
      最近更新 更多