Чтобы поделиться пониманием MapReduce, в этой статье мы поделимся с вами пониманием MapReduce больших данных.
Зачем вам MapReduce?Поскольку MapReduce может «разделять и властвовать», разложите сложную задачу вычисления больших данных на несколько простых небольших задач. «Простой» означает: меньший масштаб вычислений, вычисление данных на соседних узлах и параллельные задачи.
Версия с одним предложением:
Входной файл -> [задача карты] разделить --> карта --> раздел --> сортировать --> объединить (записать буфер памяти) ~~ разлить (независимая запись потока на диск) --> объединить --> результат вывода карты ~ ~~ [уменьшить задачу] скопировать --> объединить --> уменьшить --> выходной файл
Задачи M map начинают и обрабатывают выделенные множественные разделенные данные.
Раздел:
Функция: назначьте вывод этапа карты соответствующему редюсеру, количество разделов == количеству редукторов.
По умолчанию используется HashPartitioner. Затем запишите выходные данные в буфер памяти буфера памяти.
Проливать:
Когда данные в буфере памяти достигают определенного порога, значение по умолчанию равно 80%, и переполнение будет записано в сброс, сначала заблокируйте 80% памяти, запишите эту часть данных на локальный диск и сохраните ее. как временный файл. Эта фаза управляется отдельным потоком, синхронизированным с потоком баффа записи в память.
сортировать и комбинировать:
Перед тем, как Spill запишет файл, 80% данных (формат) должны быть отсортированы, сначала раздел, а затем ключ, чтобы убедиться, что ключи в каждом разделе находятся в порядке. , и, наконец, вывести файл Spill.
Несколько файлов разливов сортируются путем многостороннего слияния, а затем объединяются в один файл, который является окончательным результатом этапа карты. Существует также индексный файл (file.out.index), в котором записаны начальная позиция и длина каждого раздела.
уменьшить этап:
копирование: Многопоточность одновременно извлекает блоки данных, принадлежащие этому редюсеру, из каждого преобразователя (в соответствии с разделом), сохраняет их в буфере памяти после их получения и записывает на диск, когда использование достигает порога.
Слияние: всегда запускайте, потому что выходные файлы разных карт не сортируются, поэтому вам необходимо выполнить слияние перед записью на диск, зная, что новые данные на стороне карты не записываются. Наконец, запустите слияние, чтобы объединить и отсортировать данные на всех дисках, чтобы сформировать окончательный файл в качестве входного файла редуктора, и фаза перемешивания заканчивается.
Сокращение: аналогично объединению, один и тот же ключ объединяется и вычисляется, а окончательный результат записывается в HDFS.