Заполнение Hadoop Mapper объектами MapOutputBuffer, есть ли лучший способ пропустить плохие ключи?

1

Я работаю над проектом mapreduce, где я не могу заранее гарантировать, что моему картографу всегда будет предоставлена полезная пара ключевых значений. Я попытался окружить соответствующий код с помощью блока catch try

public void map(LongWritable Key, Text values, Context context)
                throws IOException, InterruptedException {

            try {
                    //Attempt process

                    context.write(HKey, HValue);

                }
            } catch (Exception e) {
                //was given invalid value, drop it and move on
                context.nextKeyValue();
                e.printStackTrace();
            }
}

Профилирование данных на большом наборе данных показывает, что MapOutputBuffers занимают большую часть моей памяти, что дает мне возможную ошибку из памяти. Есть ли лучший способ структурирования моего Mapper, поэтому у меня нет этой проблемы? Я бы предпочел не выделять дополнительную память в качестве остановки.

Теги:
hadoop
mapreduce

1 ответ

0
Лучший ответ

Я считаю, что трассировка стека стека бесполезна, я использую этот код:

// Define enumeration    
    public static enum LOCAL_COUNTER_MAP {
                INVALID 
            }   


        public void map(LongWritable Key, Text values, Context context)
                            throws IOException, InterruptedException {

                        try {
                                //Attempt process

                                context.write(HKey, HValue);

                            }
                        } catch (Exception e) {
                        // ignore value
                          context.getCounter(LOCAL_COUNTER_MAP.INVALID).increment(1);
                          return;
                        }
            }

В результатах вашей работы вы увидите, сколько у mappers неверной пары значений ключа.

Удачи :)

  • 0
    Трассировка стека печати на самом деле не является проблемой, хотя это действительно хороший способ справиться с этим. Я собираюсь сделать это, чтобы мои файлы журналов не всплыли. В любом случае проблема заключается в том, что даже когда я пропускал неверные значения с помощью оператора return, я сталкивался с ограничением накладных расходов gc.
  • 0
    Итак, проблема в том, что процесс потратил более 98% на сборку мусора и менее 2% кучи восстанавливается. Поэтому попробуйте увеличить размер кучи, посмотрите на этот пост, подумайте, что это может помочь - Ошибка нехватки памяти
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню