Оптимизация Alibaba Cloud Spark Shuffle

Большое количество данных

На этот раз докладчик: Чен Ши, технический эксперт из команды EMR подразделения вычислительных платформ Alibaba, в настоящее время занимается хранением больших данных и работой, связанной со Spark.

  • Введение в Spark Shuffle
  • Умный дизайн в случайном порядке
  • анализ производительности

Процесс Spark Shuffle

Spark 0.8 и предыдущая версия ShuffleSpark на основе хэша 0.8.1 представили механизм консолидации файлов для перемешивания на основе хэша. Spark 0.9 представила ExternalAppendOnlyMapSpark 1.1. Внедрила перемешивание на основе сортировки, но по умолчанию по-прежнему используется ShuffleSpark на основе хэша 1.2. Метод перемешивания по умолчанию был изменен на ShuffleSpark на основе сортировки 1.4 Представлена ​​сортировка на основе ShuffleSpark 1.6 Сортировка Tungsten объединяется с сортировкой на основе ShuffleSpark 2.0 На основе хэша Shuffle выходит из исторической сцены

Подводя итог, сначала использовалось перемешивание на основе хэшей. В настоящее время каждый Mapper создаст соответствующий сегмент в соответствии с количеством редукторов. Количество сегментов равно M x R , где M — количество карт, а R – Уменьшить количество. Это создает большое количество маленьких файлов, создает большую нагрузку на файловую систему и плохо влияет на пропускную способность ввода-вывода. После того, как я не выдержал, я сделал оптимизацию и объединил выходные данные нескольких картографов, работающих на одном ядре, в один и тот же файл, чтобы количество файлов стало числом ядер x R.

file

Реализация Spark Shuffle

Введение в перемешивание на основе сортировки

Выбор этого пути делается в org.apache.spark.SparkEnv:

    // Let the user specify short names forshuffle managers
    val shortShuffleMgrNames = Map(
      "hash" ->"org.apache.spark.shuffle.hash.HashShuffleManager",
      "sort" ->"org.apache.spark.shuffle.sort.SortShuffleManager")
    val shuffleMgrName =conf.get("spark.shuffle.manager", "sort") //获得Shuffle Manager的type,sort为默认
    val shuffleMgrClass =shortShuffleMgrNames.getOrElse(shuffleMgrName.toLowerCase, shuffleMgrName)
    val shuffleManager =instantiateClass[ShuffleManager](shuffleMgrClass)

Каждому преобразователю на основе хэширования необходимо записать файл для каждого преобразователя для чтения преобразователем, то есть ему необходимо сгенерировать файлы M x R. Если число преобразователей и преобразователей относительно велико, количество сгенерированных файлов будет очень большим. большой. Одна из целей дизайна тасования на основе хэша — избежать ненужной сортировки (там, где Hadoop Map Reduce критикуют, сортировка во многих местах, где сортировка не требуется, приводит к ненужным накладным расходам). Однако, когда он обрабатывает сверхбольшие наборы данных, он генерирует много DiskIO и потребления памяти, что, несомненно, влияет на производительность. Перетасовка на основе хэшей также постоянно оптимизируется, и, как упоминалось ранее, консолидация файлов, представленная в Spark 0.8.1, в определенной степени решает эту проблему. Чтобы лучше решить эту проблему, в Spark 1.1 введено перемешивание на основе сортировки. Во-первых, каждая задача Shuffle Map Task не будет генерировать отдельный файл для каждого редуктора, вместо этого она будет записывать все результаты в файл и создавать индексный файл, через который редуктор сможет получить данные для обработки. Непосредственным преимуществом отказа от большого количества файлов является экономия использования памяти и низкая задержка, вызванная последовательным дисковым вводом-выводом. Экономия использования памяти может снизить риск и частоту GC. А уменьшение количества файлов поможет избежать нагрузки на систему, вызванной одновременной записью нескольких файлов.

В настоящее время существует три реализации модуля записи: BypassMergeSortShuffleWriter, SortShuffleWriter и UnsafeShuffleWriter.

file

SortShuffleManager имеет только один тип ShuffleReader, BlockStoreShuffleReader.

Проблемы с Spark-shuffle

Синхронная работа

Данные в случайном порядке могут инициировать многостороннее слияние для создания окончательных данных только после завершения задачи сопоставления.

много дискового ввода-вывода

Данные в случайном порядке имеют большой объем дисковых операций чтения и записи на этапе слияния и требуют высокой пропускной способности дискового ввода-вывода на этапе сортировки-слияния.

Последовательные вычисления и сеть

Последовательная операция расчета задачи и сетевого ввода-вывода.

Smart Shuffle

file

перетасовать конвейер данных

Данные в случайном порядке накапливаются на стороне карты до определенного количества и отправляются на сторону уменьшения.

Избегайте ненужных сетевых операций ввода-вывода

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

Асинхронные вычисления и сетевой ввод-вывод

Генерация перетасованных данных и передача перетасованных данных могут выполняться параллельно.

Избегайте сортировки-слияния, чтобы уменьшить дисковый ввод-вывод

Данные в случайном порядке разделены по разделам, данные в случайном порядке не требуют сортировки-слияния.

Использование Smart Shuffle

  • Настройте spark.shuffle.manager: org.apache.spark.shuffle.hash.HashShuffleManager.
  • Настройка spark.shuffle.smart.spill.memorySizeForceSpillThreshold: управление размером памяти, занимаемой данными в случайном порядке, по умолчанию 128M.
  • Настройте spark.shuffle.smart.transfer.blockSize: контролируйте размер блоков данных передачи в случайном порядке в сети.

анализ производительности

Аппаратные и программные ресурсы:

file

Производительность ТПК-ДС:

file

Производительность Smart Shuffle TPC-DS увеличилась на 28%:

  • Smart shuffle не снижает производительность одного запроса
  • Один запрос может повысить производительность не более чем в 2 раза.

Извлеките анализ производительности запросов Q2 и Q49:

  • Q2 соответствует производительности двух тасовок
  • Производительность Q49 была значительно улучшена в Smart Shuffle.

Сравнение одного запроса:

file

Сортированное перемешивание слева и умное перемешивание справа. Запрос Q2 относительно прост, данные перемешивания относительно малы, а производительность интеллектуального перемешивания остается неизменной.

Сравнение процессоров Q2: упорядоченное перемешивание слева, интеллектуальное перемешивание справаfile

Сравнение дисков:

Сортировка слева, умная перетасовка справаfile

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

Подпишитесь на мой официальный аккаунт и ответьте на [JAVAPDF] в фоновом режиме, чтобы получить 200 страниц тестовых вопросов!Большие данные, на которые обращают внимание 50 000 человек, — это дорога к Богу, почему бы вам не прийти и не узнать об этом?50 000 человек обращают внимание на то, как большие данные становятся богом, разве вы не хотите узнать об этом?50 000 человек обращают внимание на то, как большие данные становятся богом, вы уверены, что действительно не хотите прийти и узнать об этом?

приветствую ваше внимание«Дорога к большим данным становится Богом»

大数据技术与架构