在S3中写入外部Hive表的Pyspark不是并行的

时间:2016-08-18 13:32:35

标签: apache-spark amazon-s3 hive pyspark emr

我在外部配置单元表中定义了s3中的位置

LOCATION 's3n://bucket/path/'

当在聚合一堆数据的pyspark作业结束时写入此表时,对Hive的写入非常慢,因为只有1个执行程序/容器用于写入。写入HDFS支持的表时,写入并行发生并且速度明显更快。

我尝试使用s3a路径定义表格,但由于一些模糊的错误,我的工作失败了。

这是在Amazon EMR 5.0(hadoop 2.7),pyspark 2.0上,但我遇到过与以前版本的EMR / spark相同的问题。

我可以使用配置或替代库来提高写入效率吗?

1 个答案:

答案 0 :(得分:3)

我想你正在使用镶木地板。 DirectParquetOutputCommitter has been removed可避免潜在的数据丢失问题。 change实际上是在04/2016。

这意味着您写入S3的数据将首先保存在_temporary文件夹中,然后移动"到最后的位置。很遗憾"移动" =="复制&删除"在S3中它很慢。更糟糕的是,这个最后的"移动"只有司机才能完成。

你必须写信给当地的HDFS然后复制数据(我建议这样做),如果你不想打算再添加那个课程。在HDFS"移动" 〜"重命名"所以它不需要时间。