MapReduce的input为SequenceFile的相关实验

来源:互联网 发布:微店和淘宝哪个安全 编辑:程序博客网 时间:2024/05/01 05:53

书接上文:解决小文件多的另外一个办法是使用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。












0 0
原创粉丝点击