如何解决 pyspark/hive 的 5GB s3 复制限制?

How do I workaround the 5GB s3 copy limit with pyspark/hive?

我正在尝试 运行 针对 EMR 集群的 spark sql 作业。我的创建 table 操作包含许多列,但出现 s3 错误:

 The specified copy source is larger than the maximum allowable size for a copy source: 5368709120

是否有可以设置的 hive/spark/pyspark 设置,以便 _temporary 文件不会达到写入 s3 的 5GB 阈值?

这是有效的:(只有 1 列)

create table as select b.column1 from table a left outer join verysmalltable b on ...

这不起作用:(很多列)

create table as select b.column1, a.* from table a left outer join verysmalltable b on ...

在这两种情况下,select 语句单独起作用。 (见下文)

工作:

select b.column1 from table a left outer join verysmalltable b on ...

select b.column1, a.* from table a left outer join verysmalltable b on ...

我想知道是否与内存相关 - 但不确定。如果是内存错误,我认为我会 运行 在 运行 进入复制错误之前进入内存错误(还假设如果 select 包含多列的语句将不起作用这是内存问题)

只有在调用 create table 时,我才会 运行 进入 s3 错误。我没有不使用 s3 来保存 tables 的选项,我想知道是否有办法解决这个问题。 5GB 限制似乎是一个硬性限制。如果有人知道我在 hive/spark 端可以做什么,将不胜感激。

我想知道是否可以在 spark-defaults.conf 文件中包含一个特定的设置来限制临时文件的大小。

额外信息:错误发生后_temporary文件为4.5GB。

在过去的几个月里,s3 使用参数的方式发生了一些变化

fs.s3a.multipart.threshold

此设置需要低于 5G 才能使特定大小的查询生效。以前我将这个设置设置得很大,以便保存更大的文件,但显然这个行为已经改变了。

此设置的默认值为 2GB。在 spark 文档中,根据所使用的 hadoop 版本有多种不同的定义。