В SPARK, почему Narrow Dependency строго не требуется перестановка по сети? - PullRequest
0 голосов
/ 03 мая 2018

Я читал о узких и широких зависимостях СДР, разделенных на несколько частей.

Мой вопрос: я не понимаю, почему RDD, созданные с узкими зависимостями , не требуют перестановки в сети ? ИЛИ это случайность случается, но только несколько раз?

Пожалуйста, обратитесь к диаграмме ниже - enter image description here

Допустим, дочерний RDD создается с узкой зависимостью от родительского RDD, как отмечено красным прямоугольником ниже. Теперь родительский RDD имел 3 раздела, скажем (P1, P2, P3), и данные в каждом соответствующем разделе были сопоставлены и были сопоставлены с 3 другими разделами, скажем (P1, P4, P5) соответственно.

Поскольку данные в родительском разделе СДР P1 были сопоставлены с самим собой, поэтому в сети нет перестановок. Но поскольку данные из родительского раздела RDD P2 и P3 были сопоставлены с дочерними разделами RDD P4 и P5, которые являются разными разделами, естественно, данные должны пройти через сеть, чтобы соответствующие значения были помещены в P4 & P5. Итак, почему мы говорим, что в сети нет перестановок?

Посмотрите на прямоугольник зеленого цвета, это еще более сложный случай. Единственный случай, который я мог бы визуализировать, когда нет перестановки по сети, должен быть, когда родительские разделы RDD сопоставлены с собой.

Я уверен, что мои рассуждения неверны. Может ли кто-нибудь дать какое-то объяснение? Спасибо

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

По предоставленной вами ссылке:

Типичная последовательность выполнения выглядит следующим образом ... СДР создается первоначально из внешних источников данных (например, HDFS, локальный файл и т. Д.). СДР подвергается последовательности ТРАНСФОРМАЦИИ (например, map, flatMap, filter, groupBy, join) каждый из них предоставляет свой RDD, который используется для следующего преобразования. Наконец, последний шаг - это ДЕЙСТВИЕ (например, подсчет, сбор, сохранение, получение), которое преобразует последний СДР в вывод во внешние источники данных. Вышеуказанная последовательность обработки называется линией (результат топологической сортировки группы обеспечения доступности баз данных)

Теперь подумайте о том, как обрабатываются данные, когда они проходят через конвейер.

Если существует узкая зависимость, то дочерний раздел зависит только от 1 родительского раздела. Данные родительского раздела могут быть обработаны на 1 компьютере, а дочерний раздел может существовать на том же компьютере. Перестановка данных не требуется.

Если существует широкая зависимость, то 1 дочерний раздел зависит от многих родительских разделов. Родительские разделы могут существовать на многих компьютерах, поэтому данные должны быть перетасованы по сети, чтобы завершить обработку данных.

0 голосов
/ 03 мая 2018

Узкая зависимость не означает отсутствие сетевого трафика.

Различие между узким и широким более тонкое:

  • При широкой зависимости каждый дочерний раздел зависит от каждого раздела его родителей. Это отношение многих ко многим.
  • При узкой зависимости каждый дочерний раздел зависит не более чем от одного раздела от каждого родителя. Это могут быть отношения один-к-одному или многие-к-одному.

Если сетевой трафик требуется, зависит от других факторов, а не только от преобразования. Например, разделенные на разделы RDD могут быть объединены без сетевого трафика, если в ходе одного и того же действия произошла перестановка (в этом случае имеется как совместное разбиение, так и совместное размещение) или в противном случае с сетевым трафиком.

...