состоит из двух типов: Hash Shuffle; Другой - Shuffle на основе сортировки. Во-первых, мы представим их процесс разработки, чтобы помочь нам лучше понять
Shuffle:До Spark 1.1 Spark реализует только один режим Shuffle, то есть Shuffle на основе хэша. В Spark 1.1 введено перемешивание на основе сортировки. После Spark 1.2 режим реализации перемешивания по умолчанию изменен с перемешивания на основе хэша на случайное воспроизведение на основе сортировки. Используемый ShuffleManager был изменен с хэша по умолчанию на сортировку. В Spark 2.0 Hash Shuffle больше не используется.
Одна из основных целей реализации Shuffle в Spark на основе Hash в первую очередь заключается в том, чтобы избежать ненужной сортировки. Если вы думаете о MapReduce в Hadoop, сортировка — это фиксированный шаг. Есть много задач, которые не нуждаются в сортировке. MapReduce также сортирует их, вызывая много ненужных накладных расходов.
В реализации Shuffle, основанной на Hash, каждая задача на этапе Mapper генерирует файл для каждой задачи iна этапе сокращения, который обычно генерирует большое количество файлов (соответствующих промежуточным файлам M * R, среди которых M указывает количество задач в фазе Mapper, а R указывает количество задач в фазе Reduce). Требуется большое количество случайных операций ввода-вывода на диске и большой объем накладных расходов на память.
Чтобы устранить вышеуказанные проблемы, в Spark 0.8.1 был введен механизм ShuffleConsolidate (механизм слияния файлов) для реализации Shuffle на основе хэша для объединения промежуточных файлов, созданных стороной Mapper. Настройте spark.shuffie. consolidateFiles = true для уменьшения количества промежуточных файлов. После объединения файлов можно изменить режим создания промежуточных файлов, чтобы создать по одному файлу для каждой задачи на этапе сокращения.
Единица выполнения — это количество ядер на каждом Mapper/количество Ядер, выделенных для каждой Задачи (значение по умолчанию — 1). Вы можете изменить количество файлов от M * R в E * C / T * R, где E указывает количество Исполнителей, C — количество доступных Ядер, а T — количество Ядер, выделенных для Задачи.
В Spark1.1 появилась сортировка в случайном порядке:
В реализации перемешивания на основе хэшей количество создаваемых промежуточных файлов результатов зависит от количества задач на этапе сокращения, то есть от степени параллелизма на стороне сокращения. Следовательно, количество файлов по-прежнему неконтролируемо, и проблемы не могут быть решены. Чтобы лучше решить эту проблему, в Spark1.1 была введена реализация Shuffle на основе сортировки, а после Spark 1.2 реализация по умолчанию изменилась с Shuffle на основе хэша, Change на реализацию Shuffle на основе Sort. То есть ShuffleManager изменяется с хэша по умолчанию на Sort.
В случайном порядке на основе сортировки задачи на каждом этапе сопоставления не создают отдельный файл для задач на каждом этапе сокращения. Вместо этого задачи на каждом этапе Mapper записываются в файл Создается файл данных и файл индекса. Задачи на этапе сокращения могут получать связанные данные через файл индекса. Непосредственным преимуществом отказа от больших файлов является уменьшение случайного дискового ввода-вывода / 0 и накладных расходов на память. Количество генерируемых файлов сокращается до 2 x M, где M обозначает количество задач на этапе Mapper. Каждая задача на этапе сопоставления создает два файла (один файл данных и один файл индекса), а окончательное количество файлов составляет M файлов данных и M индексных файлов. Поэтому итоговое количество файлов составляет 2*М.
Начиная с версии 1.4 Spark, в процессе Shuffle была введена реализация Shuffie, основанная на Tungstin-sort. Оптимизация вольфрамового проекта может значительно повысить производительность Spark при обработке данных. (Вольфрам переводится с китайского как вольфрам)
Примечание: В некоторых специфических сценариях применения механизм Shuffle на основе Hash может превзойти механизм Shuffle на основе Sort.