pyspark对s3中外部配置单元表的写入不是并行的

r8xiu3jd  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(443)

我在s3中定义了一个外部配置单元表

LOCATION 's3n://bucket/path/'

在聚合一堆数据的pyspark作业结束时写入此表时,写入配置单元的速度非常慢,因为只有1个执行器/容器用于写入。当写入hdfs支持的表时,写入是并行进行的,并且速度明显更快。
我尝试使用s3a路径定义表,但是由于一些模糊的错误,我的工作失败了。
这是在amazonemr5.0(hadoop2.7)和pyspark2.0上实现的,但是我在emr/spark的早期版本中也遇到了同样的问题。
是否有一个配置或替代库,我可以使用,使这个写更有效?

dm7nw8vv

dm7nw8vv1#

我猜你用的是Parquet地板。这个 DirectParquetOutputCommitter 已删除,以避免潜在的数据丢失问题。这一变化实际上发生在2016年4月。
这意味着您写入s3的数据将首先保存在 _temporary 文件夹,然后“移动”到其最终位置。不幸的是,在s3中“moving”=“copying&deleting”,速度相当慢。更糟糕的是,这最后的“搬家”只能由司机来做。
如果您不想争着把这个类添加回去,那么您必须先写入本地hdfs,然后再复制数据(我建议这样做)。在hdfs中“移动”~“重命名”,所以不需要时间。

相关问题