我发现一篇文章提到了 Spark S3 Magic Committer。
有人可以解释一下什么是 Spark S3 提交者以及 Magic 提交者与其他提交者有何不同?我什么时候应该使用其中一种而不是另一种?
最佳答案
这很复杂。关键点:您无法使用重命名来安全/快速地将多个任务尝试的输出提交到聚合作业输出。
相反,特殊的“s3 提交者”使用 S3 的分段上传 API 来上传任务中的所有数据,但不是最终的 POST 来实现它;在作业提交中,这些 POST 已完成
- S3A 暂存提交者:任务在开始上传之前将所有输出暂存到 localfs。需要 HDFS 或其他“真正的”文件系统将 list 文件从任务传递到作业提交者
- S3A 魔法提交者:使用/滥用“魔法”路径重写来确定文件的最终目的地。应用程序创建一个文件到
s3a://bucket/dest/__magic/task1/__base/dir/file.parquet
,最终文件将转到s3a://bucket/dest/dir/file.parquet
。不需要HDFS,但需要更多S3 IO。 - EMR Spark 提交者。暂存提交者的 EMR 副本。在 EMR 上使用此功能。
在舞台和魔术之间?我会使用 hadoop-3.3.1 二进制文件,如果 HDFS 存在则暂存,如果不存在则使用 magic。
我还将 Apache Iceberg 作为长期替代方案
您一直想知道的一切:https://github.com/steveloughran/zero-rename-committer/releases/tag/tag_release_2021-05-17
关于apache-spark - 简而言之,Spark S3(或 S3A)提交者是什么以及何时应该使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70008471/