我在s3中定义了一个外部配置单元表
LOCATION 's3n://bucket/path/'
在聚合一堆数据的pyspark作业结束时写入此表时,写入配置单元的速度非常慢,因为只有1个执行器/容器用于写入。当写入hdfs支持的表时,写入是并行进行的,并且速度明显更快。
我尝试使用s3a路径定义表,但是由于一些模糊的错误,我的工作失败了。
这是在amazonemr5.0(hadoop2.7)和pyspark2.0上实现的,但是我在emr/spark的早期版本中也遇到了同样的问题。
是否有一个配置或替代库,我可以使用,使这个写更有效?
1条答案
按热度按时间dm7nw8vv1#
我猜你用的是Parquet地板。这个
DirectParquetOutputCommitter
已删除,以避免潜在的数据丢失问题。这一变化实际上发生在2016年4月。这意味着您写入s3的数据将首先保存在
_temporary
文件夹,然后“移动”到其最终位置。不幸的是,在s3中“moving”=“copying&deleting”,速度相当慢。更糟糕的是,这最后的“搬家”只能由司机来做。如果您不想争着把这个类添加回去,那么您必须先写入本地hdfs,然后再复制数据(我建议这样做)。在hdfs中“移动”~“重命名”,所以不需要时间。