【发布时间】:2017-08-06 22:37:51
【问题描述】:
我写信是想看看有没有人知道如何加快 EMR 中运行的 Spark 的 S3 写入时间?
我的 Spark 作业需要 4 个多小时才能完成,但集群仅在前 1.5 小时内处于负载状态。
我一直很好奇 Spark 一直在做什么。我查看了日志,发现许多s3 mv 命令,每个文件一个。然后直接看一下 S3,我发现我所有的文件都在 _temporary 目录中。
其次,我担心我的集群成本,看来我需要为这个特定任务购买 2 小时的计算。但是,我最终购买了 5 个小时。我很好奇 EMR AutoScaling 在这种情况下是否可以帮助降低成本。
一些文章讨论了更改文件输出提交器算法,但我在这方面收效甚微。
sc.hadoopConfiguration.set("mapreduce.fileoutputcommitter.algorithm.version", "2")
写入本地 HDFS 很快。我很好奇如果发出 hadoop 命令将数据复制到 S3 会更快吗?
【问题讨论】:
-
最后,你使用了哪个实现?我遇到了同样的问题。
-
@JaspinderVirdee 将您的数据写入本地 HDFS 目录,然后使用
s3-dist-cp将您的数据复制回 S3。此外,如果您的 EMR 集群缺少s3-dist-cp命令,您必须在 create-cluster 命令中列出 Hadoop。例如:--applications Name=Hadoop Name=Spark Name=Ganglia Name=zeppelin -
你的意思是我使用s3只是为了备份?例如 - 目前,我正在使用 Spark Streaming,并且我的数据按键分区 - 直接保存在 s3 上的“城市”。每个流批多 1 分钟的数据进来并添加到每个城市中。我将如何使用您的策略将这些数据附加到 s3 -> 保存在本地然后复制到 s3。
-
我的流的最后一步是保存到 fs(hdfs 或 s3)。在hdfs上成功写入后如何将更改推送到s3?甚至可以使用 scala/python 代码吗?还是仅在 shell 中使用 s3-dist-cp?
标签: amazon-web-services apache-spark amazon-s3 amazon-emr