1. 程式人生 > >如何確定 Hadoop map和reduce的個數--map和reduce數量之間的關係是什麼?

如何確定 Hadoop map和reduce的個數--map和reduce數量之間的關係是什麼?

閱讀本文可以帶著下面問題:
1.map和reduce的數量過多會導致什麼情況?
2.Reduce可以通過什麼設定來增加任務個數?
3.一個task的map數量由誰來決定?
4.一個task的reduce數量由誰來決定?

一般情況下,在輸入源是檔案的時候,一個task的map數量由splitSize來決定的,那麼splitSize是由以下幾個來決定的
goalSize = totalSize / mapred.map.tasks
inSize = max {mapred.min.split.size, minSplitSize}
splitSize = max (minSize, min(goalSize, dfs.block.size))

一個task的reduce數量,由partition決定。
在輸入源是資料庫的情況下,比如mysql,對於map的數量需要使用者自己指定,比如
jobconf.set(“mapred.map.tasks.nums”,20);
如果資料來源是HBase的話,map的數量就是該表對應的region數量。
map和reduce是hadoop的核心功能,hadoop正是通過多個map和reduce的並行執行來實現任務的分散式平行計算,從這個觀點來看,如果將map和reduce的數量設定為1,那麼使用者的任務就沒有並行執行,但是map和reduce的數量也不能過多,數量過多雖然可以提高任務並行度,但是太多的map和reduce也會導致整個hadoop框架因為過度的系統資源開銷而使任務失敗。所以使用者在提交map/reduce作業時應該在一個合理的範圍內,這樣既可以增強系統負載勻衡,也可以降低任務失敗的開銷。


1 map的數量
map的數量通常是由hadoop叢集的DFS塊大小確定的,也就是輸入檔案的總塊數,正常的map數量的並行規模大致是每一個Node是10~100個,對於CPU消耗較小的作業可以設定Map數量為300個左右,但是由於hadoop的每一個任務在初始化時需要一定的時間,因此比較合理的情況是每個map執行的時間至少超過1分鐘。具體的資料分片是這樣的,InputFormat在預設情況下會根據hadoop叢集的DFS塊大小進行分片,每一個分片會由一個map任務來進行處理,當然使用者還是可以通過引數mapred.min.split.size引數在作業提交客戶端進行自定義設定。還有一個重要引數就是mapred.map.tasks,這個引數設定的map數量僅僅是一個提示,只有當InputFormat 決定了map任務的個數比mapred.map.tasks值小時才起作用。同樣,Map任務的個數也能通過使用JobConf 的conf.setNumMapTasks(int num)方法來手動地設定。這個方法能夠用來增加map任務的個數,但是不能設定任務的個數小於Hadoop系統通過分割輸入資料得到的值。當然為了提高叢集的併發效率,可以設定一個預設的map數量,當用戶的map數量較小或者比本身自動分割的值還小時可以使用一個相對交大的預設值,從而提高整體hadoop叢集的效率。


2 reduece的數量
reduce在執行時往往需要從相關map端複製資料到reduce節點來處理,因此相比於map任務。reduce節點資源是相對比較缺少的,同時相對執行較慢,正確的reduce任務的個數應該是0.95或者1.75 *(節點數 ×mapred.tasktracker.tasks.maximum引數值)。如果任務數是節點個數的0.95倍,那麼所有的reduce任務能夠在 map任務的輸出傳輸結束後同時開始執行。如果任務數是節點個數的1.75倍,那麼高速的節點會在完成他們第一批reduce任務計算之後開始計算第二批 reduce任務,這樣的情況更有利於負載均衡。同時需要注意增加reduce的數量雖然會增加系統的資源開銷,但是可以改善負載勻衡,降低任務失敗帶來的負面影響。同樣,Reduce任務也能夠與 map任務一樣,通過設定JobConf 的conf.setNumReduceTasks(int num)方法來增加任務個數。

3 reduce數量為0
有些作業不需要進行歸約進行處理,那麼就可以設定reduce的數量為0來進行處理,這種情況下使用者的作業執行速度相對較高,map的輸出會直接寫入到 SetOutputPath(path)設定的輸出目錄,而不是作為中間結果寫到本地。同時Hadoop框架在寫入檔案系統前並不對之進行排序。

相關推薦

reduce個數到底哪些因素有關

reduce的數目到底和哪些因素有關 1、我們知道map的數量和檔案數、檔案大小、塊大小、以及split大小有關,而reduce的數量跟哪些因素有關呢?  設定mapred.tasktracker.reduce.tasks.maximum的大小可以決定單個tasktra

如何確定 Hadoop mapreduce個數--mapreduce數量之間關係是什麼?

閱讀本文可以帶著下面問題:1.map和reduce的數量過多會導致什麼情況?2.Reduce可以通過什麼設定來增加任務個數?3.一個task的map數量由誰來決定?4.一個task的reduce數量由誰來決定?一般情況下,在輸入源是檔案的時候,一個task的map數量由splitSize來決定的,那麼spli

Hadoop MapReduce Job效能調優——修改MapReduce個數

MapReduce框架將檔案分為多個splits,併為每個splits建立一個Mapper,所以Mappers的個數直接由splits的數目決定。而Reducers的數目可以通過job.setNumReduceTasks()函式設定,預設情況只有一個Reducer。在真正的叢集環境下,如果預設,那麼所有的中

Hadoop MapReduce Job效能調優——MapReduce個數

 map task的數量即mapred.map.tasks的引數值,使用者不能直接設定這個引數。Input Split的大小,決定了一個Job擁有多少個map。預設input split的大小是64M(與dfs.block.size的預設值相同)。然而,如果輸入的資料量

hadoop中每個節點mapreduce個數的設定調優

hadoop中每個節點map和reduce個數的設定調優 2012-02-21 14:40:32|  分類:舉報|字號訂閱 map red.tasktracker.map.tasks.maximum 這個是一個task tracker中可同時執行的map的最大個數,預設值

mapreduce中mapreduce個數

case when 生成 task 輸入 slots align reducer 進行 很多 一、 控制hive任務中的map數: 1. 通常情況下,作業會通過input的目錄產生一個或者多個map任務。 主要的決定因素有: input的文件總個數,input的

hadoop中slot簡介(map slot reduce slot)

Slots是Hadoop的一個重要概念。然而在Hadoop相關論文,slots的闡述難以理解。網上關於slots的概念介紹也很少,而對於一個有經驗的Hadoop開發者來說,他們可能腦子裡已經理解了slots的真正含義,但卻難以清楚地表達出來,Hadoop初學者聽了還是雲裡

hadoop二次排序 (Map/Reduce中分割槽分組的問題)

1.二次排序概念:首先按照第一欄位排序,然後再對第一欄位相同的行按照第二欄位排序,注意不能破壞第一次排序的結果 。如: 輸入檔案:20 21 50 51 50 52 50 53 50 54 60 51 60 53 60 52 60 56 60 57 70 58 60 61 70 54 70 55 70 56 

MapReduce個數設定問題

看了Hadoop的API和官方文件,加上自己原創,大致分析如下: map和reduce是hadoop的核心功能,hadoop正是通過多個map和reduce的並行執行來實現任務的分散式平行計算,從這個觀點來看,如果將map和reduce的數量設定為1,那麼使用者的任務就

MapReduce 個數的設定 (Hive優化)經典

1.    通常情況下,作業會通過input的目錄產生一個或者多個map任務。 主要的決定因素有: input的檔案總個數,input的檔案大小,叢集設定的檔案塊大小(目前為128M, 可在hive中通過set dfs.block.size;命令檢視到,該引數不能自定義修改);2.    舉例: a)   

第四課:YarnMap/Reduce配置啟動原理講解

data 程序 jar sheet 編輯 datanode 示例 數據 說過 前三節課主要講了hdfs,hdfs就是一個分魚展的大硬盤 分:分塊 魚:冗余 展:動態擴展 接下來講雲計算,也可以理解為分布式計算,其設計原則: 移動計算,而不是移動數據 前面說過,hadoo

Python:高階函式mapreduce以及filtersorted的使用

#map and reduce 是進行分散式處理的python 高階函式 map () :將叢集的資料進行解析 reduce() 將解析後的資料集合 filter() 用於過濾序列傳入的函式作用於序列的每個元素返回True or False #map(args1,args2) args1 :

mapreduce中mapreduce的最大併發數量設定

     reduce數量究竟多少是適合的。目前測試認為reduce數量約等於cluster中datanode的總cores的一半比較合適,比如cluster中有32臺datanode,每臺8 core,那麼reduce設定為128速度最快。因為每臺機器8 core,4個作m

Hadoop Map&Reduce個數優化設定以及JVM重用

來源:http://irwenqiang.iteye.com/blog/1448164        Hadoop與JVM重用對應的引數是mapred.job.reuse.jvm.num.tasks,預設是1,表示一個JVM上最多可以順序執行的task數目(屬於同一個J

python迭代解析(3):range、map、zip、filterreduce函式

range range()是一個內建函式,它返回一個數字序列,功能和Linux下的seq命令差不多。 >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(5,10)) [5, 6, 7,

listset、map的差別叠代器讀取數據

lin style tor shm obj span col ring value package collectiondemo; import java.util.ArrayList; import java.util.LinkedList; import java.

51nod 1094 為k的連續區間【前綴/區間差/map

分別是 F12 nod question 空間限制 多個 for 數列 bsp 1094 和為k的連續區間 基準時間限制:1 秒 空間限制:131072 KB 分值: 10 難度:2級算法題 收藏 關註 一整數數列a1, a2, ..

List&Map&Set的操作遍歷

log treeset author eset class int 一個 println 組成 List&Map&Set的操作和遍歷 Java的三大集合即:Set、List、Map。 Set:代表無序、不可重復的集合,常用的有HashSet(哈希表實現)、

Map四種獲取keyvalue值的方法,以及對map中的元素排序(轉)

compareto map.entry 排序 區別 sta hashmap 得到 package log 獲取map的值主要有四種方法,這四種方法又分為兩類,一類是調用map.keySet()方法來獲取key和value的值,另一類則是通過map.entrySet()方法來

CXF2.7整合spring發布webservice,返回值類型是MapList<Map>類型

col oca 嚴重 jaxb worker 並且 數據 返回 anr      在昨天研究了發布CXF發布webservice之後想著將以前的項目發布webservice接口,可是怎麽也發布不起來,服務啟動失敗,原來是自己的接口有返回值類型是Map。   研究了一番之