大數據開發之Hive案例篇4-Map數過少導致性能低下 一. 問題描述 二. 解決方案 參考:

一. 問題描述

大表 通過 非等值連接 關聯 小表,數據量激增,但是Hadoop沒有讀取到,導致只分配了6個map數,運行時間長達90分鐘,此時集羣很多資源都處於空閒狀態。

二. 解決方案

問題分析,主要是因爲非等值連接,導致hive錯誤的估計了數據量,進而map數分配少了。

2.1 初步方案嘗試

這些都試過,無用

-- 修改reduce個數
set mapred.reduce.tasks=10;

-- MapJoin
/*+ MAPJOIN(b) */ 

-- 排序
distribute by rand(123)

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;

參考:

  1. https://cwiki.apache.org/confluence/display/HADOOP2/LimitingTaskSlotUsage
  2. https://blog.csdn.net/qq_26442553/article/details/99438121/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章