查找我的 spark 作业输出文件的位置

Posted

技术标签:

【中文标题】查找我的 spark 作业输出文件的位置【英文标题】:Finding the location of my spark job output file 【发布时间】: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。

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

谢谢

【问题讨论】:

【参考方案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() 回到驱动程序!

【讨论】:

以上是关于查找我的 spark 作业输出文件的位置的主要内容,如果未能解决你的问题,请参考以下文章

Spark 作业的输出可以用作另一个 Spark 作业的输入吗?

Apache Spark:从IDE远程运行作业时的无限循环

使用 Shell 脚本文件提交 Spark 作业

本地运行 spark 作业时出现“Scheme 没有文件系统:gs”

从作业实际运行的其他位置访问 Spark Web UI

由于令牌在 24 小时后无法在缓存中找到,Spark Launcher 作业未启动