lzo格式作为输入时调整map个数

来源:互联网 发布:怎么查看数据库关系 编辑:程序博客网 时间:2024/05/21 10:22
普通文本文件作为mapreduce的输入时调整map个数需调整
mapred.min.split.size和mapred.max.split.size
mapred.min.split.size是每个map的大小的最小值,而map的大小不能超过mapred.max.split.size且不超过blocksize,因此map的大小是Math.max(minSize, Math.min(maxSize, blockSize))
但是输入为LZO压缩格式时,还需要 一些额外的设置。

用java编写mapreduce程序时,lzo格式作为输入跟用文本作为输入一样,可以把lzo文件当做文本直接使用,但是一个lzo文件会分在一个map上,如果lzo文件过大,希望用多个map时,调整mapred.min.split.size和mapred.max.split.size就不好使了。
解决方法:
lzo文件建索引,索引文件与lzo文件同名,后缀为.index,与lzo文件放在同一hdfs目录下
设置job的inputformat:默认的是TextInputFormat,这里要改成job.setInputFormatClass(LzoTextInputFormat.class)
加入头文件:import com.hadoop.mapreduce.LzoTextInputFormat。该头文件在hadoop-lzo-0.4.14.jar中。

加上这些之后,再设置mapred.min.split.size和mapred.max.split.size就可以调整map个数了
0 0
原创粉丝点击