如何设置Hadoop Streaming作业生成的输出文件的块大小?

Jas*_*son 5 streaming hadoop

看起来这应该很简单; 我的集群上有一组文件,其集群默认块大小为128MB.我有一个流处理作业来处理它们,我希望流作业创建的输出文件使用不同的块大小,特别是16MB.我认为以下内容可行:

$ HADOOP_HOME/bin/hadoop jar $ HADOOP_HOME/contrib/streaming/hadoop-0.20.1 + 152-streaming.jar -D dfs.block.size = 16777216 -D mapred.job.name ='Log Processor'-D mapred. reduce.tasks = 5 -D mapred.output.compress = true -D mapred.output.compression.type = BLOCK -input/production/beacon/vbox*/20110609/00/access_log -output/user/me/logprocess/20110609/00/access_log -mapper/bin/cat -outputformat org.apache.hadoop.mapred.SequenceFileOutputFormat

不爱,在/ user/me/logprocess/20110609/00/access_log中生成的文件都使用128MB集群的默认块大小.我也尝试在命令中用fs.local.block.size替换dfs.block.size,结果相同.有任何想法如何在流媒体工作中控制这个?

rIC*_*ICh -1

它不会是“精确”的块大小,但您可以做的是设置减速器的数量。其工作原理是每个减速器输出一个文件,因此如果您知道输出文件为 128MB(输入无关)并且您希望每个输出文件不超过 16K,则可以分配 8 个减速器 (128/16)。注意:每个文件可能大约为16K,并且不能保证所有文件都小于 16K。