MapReduce的input爲小文件和har文件的相關實驗

如果MapReduce的input是一些小文件(文件size小於hdfs的默認block大小),那麼MapReduce job將會爲每一個小文件開啓一個單獨的map——最後導致有大量的map,而每一個map其實只處理一小部分數據,卻花了很大的時間在map自身的啓動和停止上。

以下的實驗將會驗證小文件數量對map數量的影響,以及input爲har文件時map數量的情況。


實驗一:WordCount——input爲5個小文件

執行WordCount job:$hadoop jar hadoop-example.jar wordcount /input01 /output01

Job執行完後,我們可以看到該Job一共啓動了5個map:



實驗二:WordCount——input爲6個小文件

執行WordCount job:$hadoop jar hadoop-example.jar wordcount /input01 /output01

Job執行完後,我們可以看到該Job一共啓動了6個map:



實驗三:WordCount——input爲1個har文件,它包含了6個小文件

首先,我們把上面的6個小文件打包成爲一個har文件:

 hadoop archive -archiveName files.har -p /input01 /input-har

查看該har文件:


執行WordCount job:$hadoop jar hadoop-example.jar wordcount har://hdfs-host:9000/input-hars/files.har /output-hars

Job執行完後,我們可以看到該Job同樣根據har包中的小文件數量一共啓動了6個map:


從MapReduce job的角度看,har 文件並沒有帶來什麼變化。但是,由於使用har文件歸檔小文件,hdfs上的文件數變少了,namenode的壓力也變小了。



發佈了29 篇原創文章 · 獲贊 6 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章