大数据开发之Hive案例篇4-Map数过少导致性能低下

2022-10-19  本文已影响0人  只是甲

一. 问题描述

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官网:

image.png

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;

参考:

  1. https://cwiki.apache.org/confluence/display/HADOOP2/LimitingTaskSlotUsage
  2. https://blog.csdn.net/qq_26442553/article/details/99438121/
上一篇 下一篇

猜你喜欢

热点阅读