Spark 2.3.3 输出镶木地板到 S3

Spark 2.3.3 outputing parquet to S3

前一段时间我遇到了直接将镶木地板输出到 S3 并不可行的问题,在我最终将镶木地板复制到 S3 之前我需要一个缓存层看到这个

我知道 HADOOP-13786 应该可以解决这个问题,它似乎在 HDFS >3.1.0

中实现了

现在的问题是我如何在 spark 2.3.3 中使用它,据我所知,spark 2.3.3 带有 hdfs 2.8.5。我通常使用 flintrock 在 AWS 上编排我的集群。是否只是在 flintrock 配置中将 HDFS 设置为 3.1.1 然后我得到了所有好东西?或者我是否仍然必须像以前那样在代码中设置一些东西。例如像这样:

conf = SparkConf().setAppName(appname)\
.setMaster(master)\
.set('spark.executor.memory','13g')\
.set('spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version','2')\
.set('fs.s3a.fast.upload','true')\
.set('fs.s3a.fast.upload.buffer','disk')\
.set('fs.s3a.buffer.dir','/tmp/s3a')

(我知道这是旧代码,可能不再相关)

您将需要 Hadoop 3.1、 Spark 2.4 构建,其中应用了此 PR:https://github.com/apache/spark/pull/24970

一些具有自己的 Spark 构建的下游产品执行此操作 (HDP-3.1),但它(尚未)在 apache 构建中。

然后您需要配置 parquet 以使用新的桥接提交程序(Parquet 仅允许 Parquet 提交程序的子类),以及 select 三个特定的 S3A 提交程序(长话短说)以使用。 Staging committer 是我推荐的一个,因为它 (a) 基于 Netflix 使用的一个和 (b) 我测试过最多的那个。

相同的 PR 不能应用于 Spark 2.3 没有根本原因,只是没有人尝试过。