HDFS 单个Map任务耗时较长,并且在配置单元Map缩减中失败

jgovgodb  于 2022-12-09  发布在  HDFS
关注(0)|答案(1)|浏览(171)

我正在运行一个简单的查询,如下所示(类似的表单)

INSERT OVERWRITE table TABLE2
PARTITION(COLUMN)
SELECT *
FROM TABLE1

查询语法没有任何问题。
TABLE2为空,TABLE1在HDFS中的总大小为2GB(存储为parquet格式,压缩迅速)
当我在hive中运行查询时,我看到启动了17个map任务和0个reducer任务。
我注意到,大多数map任务在一分钟内完成,但其中一个map任务需要很长时间,就像表中的所有数据都要转到那个map任务。
由于容器物理内存限制错误,整个查询最终失败。
为什么会发生或可能发生这种情况?

gstyhher

gstyhher1#

这可能是因为某些分区比其他分区大。
尝试通过添加分发方式触发reducer任务

INSERT OVERWRITE table TABLE2
PARTITION(COLUMN)
SELECT *
FROM TABLE1
DISTRIBUTE BY COLUMN

此外,您可以将其他一些基数较低的均匀分布列添加到DISTRIBUTE BY以提高并行度:

DISTRIBUTE BY COLUMN, COLUMN2

如果COLUMN2具有高基数,它将在每个分区中产生太多的文件,如果列值分布不均匀(偏斜),则它将导致reducer中偏斜,因此使用低基数、均匀分布的列或具有相同属性的确定性函数(如substr()等)非常重要。
或者,也可以尝试增加Map器并行度,并检查是否有帮助:https://stackoverflow.com/a/48487306/2700344

相关问题