2016-11-19 6 views
0

Я пытаюсь запустить работу хауопа несколько раз с разным количеством карт и редуктора. Я установил конфигурацию:Настройка Hadoop число преобразователей с входным разветвлением не работает

  • mapreduce.input.fileinputformat.split.maxsize
  • mapreduce.input.fileinputformat.split.minsize
  • mapreduce.job.maps

Мой размер файла 1160421275, когда я попытался настроить его с помощью 4-х карт и 3-х редукторов в этом коде:

Configuration conf = new Configuration(); 
FileSystem hdfs = FileSystem.get(conf); 
long size = hdfs.getContentSummary(new Path("input/filea").getLength(); 
size+=hdfs.getContentSummary(new Path("input/fileb").getLength(); 
conf.set("mapreduce.input.fileinputformat.split.maxsize", String.valueOf((size/4))); 
conf.set("mapreduce.input.fileinputformat.split.minsize", String.valueOf((size/4))); 
conf.set("mapreduce.job.maps",4); 
.... 
job.setNumReduceTask(3); 

Размер/4 дает 290105318. Выполнение задания дает ниже вывод:

2016-11-19 12:30:36,426 INFO [main] input.FileInputFormat (FileInputFormat.java:listStatus(287)) - Total input paths to process : 1 
2016-11-19 12:30:36,535 INFO [main] input.FileInputFormat (FileInputFormat.java:listStatus(287)) - Total input paths to process : 4 
2016-11-19 12:30:36,572 INFO [main] mapreduce.JobSubmitter (JobSubmitter.java:submitJobInternal(396)) - number of splits:7 

Количество разделений равно 7, а не 4, а выход задания успеха является:

File System Counters 
    FILE: Number of bytes read=18855390277 
    FILE: Number of bytes written=14653469965 
    FILE: Number of read operations=0 
    FILE: Number of large read operations=0 
    FILE: Number of write operations=0 
Map-Reduce Framework 
    Map input records=39184416 
    Map output records=36751473 
    Map output bytes=787022241 
    Map output materialized bytes=860525313 
    Input split bytes=1801 
    Combine input records=0 
    Combine output records=0 
    Reduce input groups=25064998 
    Reduce shuffle bytes=860525313 
    Reduce input records=36751473 
    Reduce output records=1953960 
    Spilled Records=110254419 
    Shuffled Maps =21 
    Failed Shuffles=0 
    Merged Map outputs=21 
    GC time elapsed (ms)=1124 
    CPU time spent (ms)=0 
    Physical memory (bytes) snapshot=0 
    Virtual memory (bytes) snapshot=0 
    Total committed heap usage (bytes)=6126829568 
Shuffle Errors 
    BAD_ID=0 
    CONNECTION=0 
    IO_ERROR=0 
    WRONG_LENGTH=0 
    WRONG_MAP=0 
    WRONG_REDUCE=0 
File Input Format Counters 
    Bytes Read=0 
File Output Format Counters 
    Bytes Written=77643084 

Карта показывает, что она обрабатывала 21 перетасованные карты. Я хочу, чтобы он обработал только 4 карты. Для редуктора это дает правильное количество файлов с общим количеством 3. Неправильно ли меняются настройки размера разметки Mapper?

+0

AFAIK те конфеты в порядке. Сколько файлов находится на входе? – mrsrinivas

+0

Для файла A есть 1 файл, для файла B - 4 файла. – mkvem

+0

Когда я использую 9, он выходит с 10 расколами – mkvem

ответ

0

Я считаю, что вы используете TextInputFormat.

  1. Если у вас есть несколько файлов, то для каждого файла будет создан минимум один картограф. Если размер файла (не кумулятивный, но индивидуальный) больше, чем размер блока (который вы изменили, установив min и max), снова появится множество картографов.

  2. Попробуйте использовать combineTextInputFormat, который поможет вам в acheiving, что вы хотите, но все еще может быть не совсем 4.

  3. Посмотрите на логику InputFormats, что вы используете, чтобы определить, сколько картостроители будет порождал ,