单个地图任务需要很长时间并且在蜂巢地图减少中失败

Single map task taking long time and failing in hive map reduce

我正在运行进行如下所示的简单查询(类似形式)

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

查询语法没有问题。

TABLE2 是空的,TABLE1 的总大小在 HDFS 中为 2gb(存储为带有 snappy 压缩的镶木地板)

当我 运行 在 hive 中查询时,我看到启动了 17 个 map 任务和 0 个 reducer 任务。

我注意到大部分地图任务在一分钟内完成。 但是其中一项地图任务需要很长时间。就像 table 中的所有数据都将转到该地图任务。

整个查询最终因容器物理内存限制错误而失败。

发生或可能发生这种情况的原因是什么?

这可能是因为某些分区比其他分区大。

尝试通过

添加分发来触发 reducer 任务
INSERT OVERWRITE table TABLE2
PARTITION(COLUMN)
SELECT *
FROM TABLE1
DISTRIBUTE BY COLUMN

此外,您可以向 DISTRIBUTE BY 添加一些其他具有低基数的均匀分布列以增加并行度:

DISTRIBUTE BY COLUMN, COLUMN2

如果COLUMN2有高基数,会在每个分区产生太多文件,如果列值分布不均匀(倾斜),那么会导致reducer倾斜,所以使用低基数很重要,具有相同属性(如 substr() 等)的均匀分布列或确定性函数

或者也尝试增加映射器并行度并检查它是否有帮助: