本文主要是介绍lzo格式作为输入时调整map个数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
普通文本文件作为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个数了
这篇关于lzo格式作为输入时调整map个数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!