2017-01-11 14 views
8

Позвольте пояснить около shuffle in depth и как Spark использует shuffle руководителей. Сообщить некоторые очень полезные ресурсы:Понимание менеджеров в случайном порядке в Spark

https://trongkhoanguyenblog.wordpress.com/

https://0x0fff.com/spark-architecture-shuffle/

https://github.com/JerryLead/SparkInternals/blob/master/markdown/english/4-shuffleDetails.md

Читая их, я понял, есть разные менеджеры перетасовать. Я хочу сосредоточиться на двух из них: hash manager и sort manager (который является менеджером по умолчанию).

Для разоблачить мой вопрос, я хочу начать с самим общим преобразования:

val rdd = reduceByKey(_ + _) 

Это преобразование вызывает агрегацию карты стороны, а затем перетасовать для чего всех одинаковых ключей в том же раздел ,

Мои вопросы:

  • ли агрегация Map-Side реализуется с помощью внутренней трансформации mapPartition и, таким образом, агрегацию все те же клавиши, используя функцию объединителя или он реализуется с помощью AppendOnlyMap или ExternalAppendOnlyMap?

  • Если AppendOnlyMap или ExternalAppendOnlyMap карты используются для объединения, они используются также для уменьшения боковой агрегации, что происходит в ResultTask?

  • Какова цель этих двух видов карт (AppendOnlyMap или ExternalAppendOnlyMap)?

  • Есть AppendOnlyMap или ExternalAppendOnlyMap используется от всех менеджеров shuffle или только от sortManager?

  • Я прочитал, что после AppendOnlyMap или ExternalAppendOnlyMap сыты, которые пролитой в файл, как именно это произойдет шаги?

  • Используя диспетчер сортировки Shuffle, мы используем appendOnlyMap для агрегирования и объединения записей разделов, правильно? Затем, когда исполняемая память заполняется, мы начинаем сортировку карты, проливая ее на диск, а затем очищаем карту, мой вопрос: в чем разница между разливом на диск и перетасовкой? Они состоят в основном в создании файла в локальной файловой системе, но они обрабатываются по-разному, Shuffle записывают записи, не помещаются в appendOnlyMap.

  • Можете ли вы объяснить в глубину Что происходит при выполнении reduceByKey, объясняя мне все шаги, связанные с этим? Например, все шаги для агрегации карты, перетасовки и т. Д.

+0

@JacekLaskowski Вы являетесь экспертом в Спарк перетасовки;) –

+0

Также @ 0x0FFF является экспертом в Спарк перетасовки – Giorgio

ответ

1

Отсюда следует описание reduceByKey шаг за шагом:

  1. reduceByKey вызовы combineByKeyWithTag, с единицей объединителя и одинаковым значением слияния и создания стоимости
  2. combineByKeyWithClassTag создает Aggregator и возвращает ShuffledRDD. Оба «map» и «уменьшить» побочные агрегаты используют внутренний механизм и не используют mapPartitions.
  3. Agregator использует ExternalAppendOnlyMap как для combineValuesByKey ("карты уменьшения бокового") и combineCombinersByKey ("уменьшить снижение на сторону")
  4. Оба метода использует ExternalAppendOnlyMap.insertAllMethod
  5. ExternalAppendOnlyMapkeeps track of spilled parts и текущая карта памяти (SizeTrackingAppendOnlyMap)
  6. insertAll обновляет карту памяти и checks on insert, если размер расчетной величины текущей карты превышает пороговое значение. Он использует унаследованный метод Spillable.maybeSpill. Если порог превышен, этот метод вызывает spill as a side effect, а insertAll инициализирует чистый SizeTrackingAppendOnlyMap
  7. spill вызывает spillMemoryIteratorToDisk which gets DiskBlockObjectWriter object от менеджера блока.

insertAll шагов применяются для оба карты и уменьшить побочные агрегаты с соответствующими Aggregator функции с этапом в случайном порядке между ними.

На Спарк 2.0 есть своего рода основаны только менеджер: SPARK-14667

 Смежные вопросы

  • Нет связанных вопросов^_^