Раздельный ввод в редуктор в hadoop
Этот вопрос отчасти связан с моим другим вопросом, касающимся обработки данных в Hadoop в редукторе. Однако я хотел бы спросить, есть ли доступные параметры конфигурации, чтобы, если, скажем, был достигнут максимальный объем памяти редуктора, тогда появился новый редуктор на другом датодане с остальными данными в контексте? Или, может быть, даже на одном и том же датоде, скажем, некоторые x-записи вне контекста считываются в методе Reduce до некоторого предела, а затем остальные считываются в новом редукторе?
3 ответа
Вы можете попробовать объединитель, который уменьшит рабочую нагрузку одного редуктора, обрабатывающего большее количество пар ключ-значение, выполнив возможную агрегацию до того, как она перейдет к редуктору. Если вы делаете соединение, то вы можете попробовать skewed join
в Свинья Он включает в себя 2 задания MR. В первом MR он выполняет выборку на одном входе, и если он находит ключ, который искажен настолько, что может поместиться в памяти, он разделяет этот ключ на несколько редукторов. Для других записей, отличных от той, которая указана в образце, выполняется соединение по умолчанию. Для искаженного ввода он дублирует вход и отправляет его на оба редуктора.
Невозможно создать новый вспомогательный редуктор, чтобы сбалансировать нагрузку при выполнении задания.
Скорее вы могли бы выбрать другой ключевой элемент из ваших записей, который поможет в перемещении данных даже между редукторами.
Иначе, как вариант, вы можете расширить существующие настройки памяти редуктора, чтобы разместить больше перемешанных записей и быстрее выполнить сортировку / объединение. Пожалуйста, обратитесь ниже свойства,
mapreduce.reduce.memory.mb
mapreduce.reduce.java.opts
mapreduce.reduce.merge.inmem.threshold
mapreduce.reduce.shuffle.input.buffer.percent
mapreduce.reduce.shuffle.merge.percent
mapreduce.reduce.input.buffer.percent
Я мог вспомнить, что была расширенная библиотека mapreduce, skewtune, написанная для балансировки нагрузки на перекос данных в ходе выполнения задания. Но я никогда не экспериментировал с этим, пожалуйста, проверьте, полезно ли это.
Это невозможно. Количество редукторов фиксируется в конфигурации драйвера.