Spark (version=2.2.0)
没有DirectParquetOutputCommitter
。作为替代方案,我可以使用
dataset
.option("mapreduce.fileoutputcommitter.algorithm.version", "2")//magic here
.parquet("s3a://...")
以避免在_temporary
上创建S3
文件夹。
在我将partitionBy
设置为数据集
dataset
.partitionBy("a", "b")
.option("mapreduce.fileoutputcommitter.algorithm.version", "2")//magic stop working creating _temporary on S3
.parquet("s3a://...")
还尝试添加但无法正常工作
spark.conf.set("mapreduce.fileoutputcommitter.algorithm.version", "2")
在Spark数据集中使用partitionBy
,它将创建_temporary
并移动文件,这将成为一个非常慢的操作。
有任何替代或缺失的配置吗?
答案 0 :(得分:2)
Hadoop 3.1的s3a将内置零重命名提交者(va HADOOP-13786)。在此之前,您可以使用其前体is from netflix
请注意,“算法2”不是消除_temp目录的神奇步骤,只是在单个任务提交时将任务输出直接重命名为目标。如果目录列表中的延迟一致性仍然容易出错,并且仍然是O(数据)。您不能安全地直接使用S3的v1或v2提交者,而不能使用Hadoop 2.x中的S3A连接器
答案 1 :(得分:0)
替代方案(按推荐顺序+轻松 - 最佳排名):