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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章