Как установить размер блока выходных файлов, созданных заданием потоковой передачи Hadoop? - PullRequest
5 голосов
/ 11 июня 2011

Похоже, это должно быть просто;У меня есть набор файлов в нашем кластере с размером блока кластера по умолчанию 128 МБ.У меня есть потоковое задание, которое их обрабатывает, и я хотел бы, чтобы выходные файлы, созданные потоковым заданием, использовали другой размер блока, в частности 16 МБ.Я думал, что будет работать следующее:

$ 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 / пользователь / me / logprocess / 20110609/00 / access_log -mapper / bin / cat -outputformat org.apache.hadoop.mapred.SequenceFileOutputFormat

Нет любви,Все файлы, созданные в / user / me / logprocess / 20110609/00 / access_log, используют размер блока по умолчанию для кластера 128 МБ.Я попытался заменить dfs.block.size на fs.local.block.size в команде, но с теми же результатами.Любые идеи, как управлять этим в потоковой работе?

1 Ответ

0 голосов
/ 02 декабря 2012

Это не будет «точный» размер блока, но вы можете установить количество редукторов.Это работает так, что каждый редуктор выводит один файл, поэтому, если вы знаете, что ваш файл OUTPUT имеет размер 128 МБ (вход не имеет значения) и вы хотите, чтобы каждый из ваших выходных файлов не превышал 16 КБ каждый, вы можете назначить 8 редукторов (128/16).ПРИМЕЧАНИЕ: файлы, скорее всего, будут примерно 16K каждый, и нет никакой гарантии, что все файлы будут <16K. </p>

...