我在外部配置单元表中定义了s3中的位置
LOCATION 's3n://bucket/path/'
当在聚合一堆数据的pyspark作业结束时写入此表时,对Hive的写入非常慢,因为只有1个执行程序/容器用于写入。写入HDFS支持的表时,写入并行发生并且速度明显更快。
我尝试使用s3a路径定义表格,但由于一些模糊的错误,我的工作失败了。
这是在Amazon EMR 5.0(hadoop 2.7),pyspark 2.0上,但我遇到过与以前版本的EMR / spark相同的问题。
我可以使用配置或替代库来提高写入效率吗?
答案 0 :(得分:3)
我想你正在使用镶木地板。 DirectParquetOutputCommitter
has been removed可避免潜在的数据丢失问题。 change实际上是在04/2016。
这意味着您写入S3的数据将首先保存在_temporary
文件夹中,然后移动"到最后的位置。很遗憾"移动" =="复制&删除"在S3中它很慢。更糟糕的是,这个最后的"移动"只有司机才能完成。
你必须写信给当地的HDFS然后复制数据(我建议这样做),如果你不想打算再添加那个课程。在HDFS"移动" 〜"重命名"所以它不需要时间。