MapReduce的input爲SequenceFile的相關實驗

書接上文:解決小文件多的另外一個辦法是使用SequenceFile。


實驗一:用Java code把指定文件夾下的所有小文件打包成SequenceFile

代碼如下:


執行完該java 程序後,hdfs上面生成了SequenceFile: /sfile/sfile.seq

我們可以用命令"hadoop dfs -text /sfile/sfile.seq" 以text file的格式(而非二進制格式)查看該sequencefile 的內容 。


實驗二:用Java code讀取SequenceFile內容

代碼如下:


執行該java 程序後便可以把SequenceFile裏面的內容挨條讀出。


實驗三:用SequenceFile當作MapReduce Job的輸入

需要說明的是:在MR job裏面需要指定對應的FileInputFormat,比如“conf.setInputFormat(SequenceFileAsTextInputFormat.class)”。

執行完後,雖然SequenceFile裏面包含了很多的小文件,但是可以看到Job啓動的Map數量只有2——這樣也驗證了SequenceFile可以較好地解決小文件過多的問題。



簡單總結一下:通過使用SequenceFile不僅可以減少NameNode的壓力,同樣也可以來減少map的數量。不過,它的代價是:需要花工夫創建該SequenceFile。












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