Я пытаюсь запустить потоковое приложение 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.