查找我的 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 作业的输入吗?