一. 问题描述
fdf6be2da89482f23e5a05a26e880e5.png大表 通过 非等值连接 关联 小表,数据量激增,但是Hadoop没有读取到,导致只分配了6个map数,运行时间长达90分钟,此时集群很多资源都处于空闲状态。
image.png二. 解决方案
问题分析,主要是因为非等值连接,导致hive错误的估计了数据量,进而map数分配少了。
2.1 初步方案尝试
这些都试过,无用
-- 修改reduce个数
set mapred.reduce.tasks=10;
-- MapJoin
/*+ MAPJOIN(b) */
-- 排序
distribute by rand(123)
image.png
2.2 还得是官网
Hive官网:
Map个数的计算公式:
Num_Map_tasks= $inputsize/ max($mapred.min.split.size, min($dfs.block.size, $mapred.max.split.size))
dfs.block.size 这个系统值,不能修改,参考官网,修改如下参数至一个合适的值,问题解决。
set mapred.max.split.size=10000000 ;
set mapred.min.split.size=10000000;
网友评论