单个地图任务需要很长时间并且在蜂巢地图减少中失败
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() 等)的均匀分布列或确定性函数
或者也尝试增加映射器并行度并检查它是否有帮助:
我正在运行进行如下所示的简单查询(类似形式)
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() 等)的均匀分布列或确定性函数
或者也尝试增加映射器并行度并检查它是否有帮助: