2015-08-27 2 views
3

Основываясь на документации, существует несколько способов, как обработка ошибок выполняется на карте. Ниже приведены некоторые из них:Обработка ошибок на карте hadoop уменьшить

a. Пользовательские счетчики, использующие enum - приращение для каждой неудавшейся записи.

b. Ошибка журнала и анализ позже.

Счетчики дают количество неудачных записей. Однако, чтобы получить идентификатор неудавшейся записи (может быть ее уникальным ключом), а также сведения об исключении, узел, на котором произошла ошибка, - нам нужно выполнить централизованный анализ журнала и запустить множество узлов. Доступен Logstash.

Помимо этого, существуют ли другие способы обработки сценариев ошибок без ручного вмешательства. Любые инструменты, ссылки, лучшие практики приветствуются.

Я думаю, что тот же метод применяется к любым распределенным приложениям с незначительными изменениями.

ответ

1

Несколько вопросов, чтобы спросить, при работе с обработкой ошибок:

  1. Если работа будет остановлена, если произошла ошибка в проверке данных. Большинство случаев использования больших данных могут быть в порядке, чтобы оставить мало плохих записей. Но если ваш usecase хочет, чтобы все записи были достаточно хорошими, вы должны принять это решение и перейти к нижеследующим шагам.

    Несколько раз лучше, чтобы работа выполнялась путем пропуска плохих записей или и параллельно, чтобы получить проблемы (ошибки), используя нижеприведенные методы, исправьте и измените по мере продвижения.

  2. Вы хотите, чтобы ошибки возникали, но были ограничены. Тогда сколько раз исключение может быть выброшено, прежде чем вся работа становится остановлено, как показано ниже

    Для Карта задач: mapreduce.map.maxattempts недвижимости

    Для задач редуктора: mapreduce.reduce.maxattempts

    По умолчанию 4

  3. Обработка искаженных данных.

    Итак, мы решили обработать искаженные данные. Затем определите условие или , запись которого плохая. Вы можете использовать счетчики, чтобы быстро дать вам количество плохих записей.

    В классе Mapper,

    enum Temperature { OVER_10 } 
    

    Внутри метода отображения,

    // разобрать запись

    if(value > 10) { 
        System.err.println("Temperature over 100 degrees for input: " + value); 
        context.setStatus("Detected possibly corrupt record: see logs."); 
        context.getCounter(Temperature.OVER_10).increment(1);  
    } 
    

    С описанным выше способом, все записи обрабатываются и счетчики добавляются основанный на плохих записях. Вы можете увидеть значение счетчика в конце задания, после статистики заданий или через веб-интерфейс или из командной оболочки.

    $mapred job -counter <job_id> '${fully_qualified_class_name}' ${enum_name} 
    $mapred job -counter job_1444655904448_17959 'com.YourMapper$Temperature' OVER_10 
    

    После того, как вы знаете, влияние проблемы т.е. числа плохих записей, мы должны знать, «почему это плохо». Для этого нам нужно перейти в журналы и найти сообщения об ошибках.

    Пряжа обеспечивает агрегацию журналов и объединяет все журналы для идентификатора задания и сохраняет в hdf. Его можно использовать с использованием

    yarn logs -applicationId <application ID> 
    
Смежные вопросы