Почему Spark Planner предпочитает сортировку слиянием вместо перемешанного хеш-соединения? - PullRequest
0 голосов
/ 25 апреля 2018

Почему Spark Planner в Spark 2.3 предпочитает сортировку слиянием по сравнению с перемешанным хеш-соединением? Другими словами, почему spark.sql.join.preferSortMergeJoin свойство конфигурации является внутренним и включено по умолчанию ? Что не так с перемешанным хеш-соединением? Это специфично для Spark, что он выполняет вычисления распределенным способом или что-то еще более присущее алгоритму соединения?

Вы можете найти свойство, используемое в JoinSelection стратегии планирования выполнения здесь и здесь , которое выглядит следующим образом:

case ... if !conf.preferSortMergeJoin && ... =>
  Seq(joins.ShuffledHashJoinExec(...))

1 Ответ

0 голосов
/ 25 апреля 2018

Чтобы ответить на ваш вопрос

Что не так с перемешанным хеш-соединением?

Сначала я предоставлю некоторый контекст.


Согласно SPARK-11675 Shuffled Hash Join был удален в Spark 1.6 и причина была

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

и повторно вводить в Spark 2.0 в соответствии с SPARK-13977 , поскольку

ShuffledHashJoin по-прежнему полезен, когда:

1) любой раздел стороны сборки может поместиться в памяти

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

Стоит упомянуть PR для SPARK-13977, который указывает, что Shuffled Hash Join был удален в пользу Sort Merge Join, который равен быстрее и более надежный .


Я не уверен, насколько быстрее Sort Merge Join по сравнению с Shuffled Hash Join но это определенно большеДля надежного Shuffled Hash Join требуется, чтобы хеш-таблица помещалась в памяти, в отличие от Sort Merge Join, который может пролиться на диск.

...