使用 saveAsTable 将 parquet 数据写入 S3 未完成

Posted

技术标签:

【中文标题】使用 saveAsTable 将 parquet 数据写入 S3 未完成【英文标题】:Writing parquet data into S3 using saveAsTable does not complete 【发布时间】:2017-03-03 18:08:58 【问题描述】:

在 EC2 机器上使用 Spark 2.0.2,我一直在尝试将带有分区的 parquet 格式的表写入 S3,但应用程序似乎永远不会完成。我可以看到 Spark 已将文件写入 _temporary 下的 S3 存储桶/文件夹,并且一旦 Spark saveAsTable JOB 完成,应用程序就会挂起。

查看s3显示分区是用文件夹分区内的数据生成的(抽查),但_temporary文件夹仍然存在,并且显示表不包括新表。

还有其他人遇到这种情况或有解决方案吗?

有人知道 saveAsTable 命令下面发生了什么吗?

【问题讨论】:

请使用日志级别 DEBUG/INFO 运行作业并检查卡在哪里。 【参考方案1】:

它没有挂起,只是需要将数据从临时存储复制到目的地,这需要大约 data/(10 MB/s) 的时间。 Spark 正在调用 Hadoop 的 FileOutputCommitter 来执行此操作,它认为它与 rename() 所在的 Fileytsem 对话是一个即时事务。

【讨论】:

我今天在启用 AWS Glue 的情况下使用 saveAsTable() 使用 Apache Spark 编写数据时发现了类似的情况。

以上是关于使用 saveAsTable 将 parquet 数据写入 S3 未完成的主要内容,如果未能解决你的问题,请参考以下文章

Spark SaveAsTable 元数据更新慢

从 Parquet 格式的配置单元表中查询时如何抑制日志

Spark 2.x saveAsTable

将 Spark 数据帧保存为 Hive 中的动态分区表

将 pyspark 中的数据框保存为 csv 中的 hivetable

将数据帧保存为外部配置单元表