【问题标题】:Pyspark write to External Hive table in S3 is not parallelPyspark 在 S3 中写入外部 Hive 表不是并行的
【发布时间】:2016-12-25 11:13:08
【问题描述】:

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

LOCATION 's3n://bucket/path/'

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    这意味着您写入 S3 的数据将首先保存在 _temporary 文件夹中,然后“移动”到其最终位置。不幸的是,S3 中的“移动”==“复制和删除”,而且速度相当慢。更糟糕的是,这个最后的“移动”只有司机才能完成。

    如果您不想努力重新添加该类,则必须写入本地 HDFS,然后将数据复制过来(我建议这样做)。在 HDFS 中“移动”~“重命名”所以不需要时间。

    【讨论】:

    • 我肯定会采用同样的方法。在 EMR/HDFS 中写入比复制到 S3 便宜得多。
    • 感谢您的回复,但至少这是对我设想的写入 hdfs 并迁移到 s3 的方法的一些确认。
    • Orc 格式使用FileOutputCommitter,它会再次创建临时文件然后移动。然而,这是一个稍微容易一些的情况。您可以尝试配置使用DirectFileOutputCommitter
    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 2020-11-26
    • 1970-01-01
    • 2018-05-24
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多