Map-Reduce входного разделения не работает должным образом - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь запустить потоковое приложение hadoop в кластере hadoop2. Я использую следующую конфигурацию для запуска приложения

hadoop jar /usr/lib/hadoop2/share/hadoop/tools/lib/hadoop-streaming.jar \
-D mapred.job.name=step01_load_delta_customer_events \
-D mapreduce.input.fileinputformat.split.minsize=134217728 \
-D mapreduce.job.reduces=10 \
-D mapreduce.map.memory.mb=4704 \
-D mapreduce.map.java.opts=-Xmx4416m \
-D stream.map.input.ignoreKey=true  \
-D mapreduce.map.output.compress=true \
-D mapreduce.output.fileoutputformat.compress=true \
-D mapreduce.output.fileoutputformat.compress.type=BLOCK \
-D mapred.max.map.failures.percent=7 \
-D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec \
-D mapreduce.map.output.compress.codec=com.hadoop.compression.lzo.LzoCodec \
-D mapred.output.committer.class=org.apache.hadoop.mapred.DirectFileOutputCommitter \
-D mapreduce.use.directfileoutputcommitter=true \
-files <file path>  \
-mapper <mapper code in python>  \
-reducer <reduce code in python>  \
-input "$INPUT"  \
-outputformat org.apache.hadoop.mapred.TextOutputFormat  \
-output "$OUTPUT"

Мои входные файлы хранятся в AWS S3, и у меня есть 5400 s3 объектов в моем пути ввода. Размер входного объекта варьируется от 1 до 100 МБ, а общий размер входного файла составляет ~ 25 ГБ. В соответствии с моей конфигурацией входного размера я ожидаю выполнения 200 задач картографирования. Но во время работы приложения выполняется 5400 задач mapper, что в точности соответствует количеству объектов s3 в моем входе. Я думаю, что это влияет на производительность моего приложения. Может ли кто-нибудь помочь мне понять это поведение. Также как я могу контролировать количество картографов в этом случае? Мое приложение работает в кластере qubole hadoop2.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Мое задание потоковой передачи hadoop выполняется медленно и выполняется только с 2 сопоставителями. Я добавил опцию «-D mapreduce.input.fileinputformat.split.maxsize = 33554432 -inputformat org.apache.hadoop.mapred.lib.CombineTextInputFormat», он использует много картографических карт, но дает пустой результат. Вход не сжат.

Если не указать "-inputformat org.apache.hadoop.mapred.lib.CombineTextInputFormat", split.maxsize не будет иметь никакого эффекта и будет по-прежнему использовать только 2 преобразователя.

Что могло вызвать это? В журнале не отображаются полезные данные отладки.

0 голосов
/ 07 мая 2018

Проблема была с форматом ввода. Я использовал combTextInputFormat вместо textInputFormat, и разделение ввода работает просто отлично.

...