Этот вопрос отчасти связан с моим другим вопросом Hadoop обрабатывает перекос данных в редукторе . Тем не менее, я хотел бы спросить, есть ли какие-либо доступные настройки конфигурации, чтобы, скажем, максимальная память редуктора была достигнута, а затем создать новый редуктор на другом узле данных с оставшимися данными в контексте? Или, может быть, даже на том же узле данных, чтобы, скажем, некоторые записи x вне контекста считывались в методе сокращения до некоторого предела, а затем оставшиеся считывались в новом редюсере?
Разделить ввод на редуктор в hadoop
Ответы (3)
Вы можете попробовать объединитель, который уменьшит рабочую нагрузку на один редуктор, обрабатывающий больше пар ключ-значение, выполнив возможную агрегацию, прежде чем он попадет в редуктор. Если вы выполняете соединение, вы можете попробовать skewed join
на Pig. Он включает в себя 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, написанная для балансировки нагрузки при перекосе данных. в ходе выполнения задания. Но я никогда не экспериментировал с этим, пожалуйста, проверьте, полезно ли это.
Это невозможно. Количество редукторов фиксируется в конфигурации драйвера.