Hadoop的MR程式中map的個數

2021-07-15 06:38:59 字數 563 閱讀 2053

1)map的個數是由輸入所分成的split的個數決定的,有多少個split,就會有多少個map任務。

2)split由兩個因素決定:乙個是檔案數量,乙個是檔案大小。

一般情況下,hadoop為每乙個檔案或檔案的一部分分配乙個map任務。如果檔案小於要split的size,該檔案就對應乙個map;如果檔案大於要split的size,該檔案就會對應多個map。所以,一般來說,檔案數量越多,map越多;檔案越大,map越多。

4)大量小檔案

hadoop更適合來處理小量的大檔案,而不是大量的小檔案。

(1)hadoop為大量的明顯小於blocksize的檔案建立若干map,相比只建立幾個處理blocksize資料的map,執行效率會更低;

(2)儲存大量的小檔案需要耗用大量的namenode的記憶體,這是一種浪費;

(3)mr在以磁碟的傳輸速率工作時,效果達到最好。大量的小檔案增加了在執行乙個job時的查詢次數。

所以,盡量避免大量小檔案。可用序列化檔案把若干小檔案合併到乙個大檔案中。若是已經存在了大量小檔案,可使用combinefileinputformat來改善mr的執行效率。

Hadoop實戰 四 編寫MR程式

正文之前,先放出本章重點概括 一 mr程式框架 myjob類,內含 2.run 作為driver,以例項化和配置作業 二 hadoop streaming 使用unix中的流域程式進行互動 三 mr框架擴充套件 combiner 解決shuffle任務過於繁重 資料傾斜 資料非均勻分布,某些redu...

Hadoop中Map任務的執行框架

類吧。關於上面我抽象出來的這個map任務執行框架,還需要補充的是,在map任務對應的上下文執行環境context中有個任務報告器taskreporter,它被用來不斷的向這個map任務的tasktracker報告任務的執行進度 這個精度只是乙個估計值,不一定很準確 另外,有人可能會問這個map任務的...

如何在hadoop中控制map的個數

hadooop提供了乙個設定map個數的引數mapred.map.tasks,我們可以通過這個引數來控制map的個數。但是通過這種方式設定map的個數,並不是每次都有效的。原因是mapred.map.tasks只是乙個hadoop的參考數值,最終map的個數,還取決於其他的因素。為了方便介紹,先來看...