Будет ли Spark Coalesce выполнять Shuffle - PullRequest
0 голосов
/ 24 декабря 2018

Предположим, у меня есть 8-узловый кластер Spark с 8 разделами (т.е. каждый узел имеет 1 раздел). Теперь, если я попытаюсь уменьшить количество разделов до 4 с помощью coalesce (4), 1. Будет ли coalesce выполнять перемешивание?2. Если да, то в каких узлах будут находиться вновь созданные 4 раздела?

Ответы [ 3 ]

0 голосов
/ 25 декабря 2018

coalesce (numpartitions) - используется для уменьшения количества разделов без тасования coalesce (numpartitions, shuffle = false) - spark не выполняет никаких перемешиваний из-за опции shuffle = false и используется для уменьшения количества разделений coalesce (numpartitions), shuffle = true) - spark выполнит тасование из-за опции shuffle = true и используется для уменьшения и увеличения разделов

Пример: Предположим, что rdd с 8 разделами изначально

rdd.coalesce (4)- выдаст 4 партиона как выходные данные rdd.coalesce (4, false) - выдаст 4 партионы как выходные данные rdd.coalesce (10, false) - выдаст 8 частей как выходные данные (shuffle = false сможет уменьшить эти партионы, но неможет увеличиваться) rdd.coalesce (4, true) - выдаст 4 части в качестве выходных данных rdd.coalesce (10, true) - даст 10 частей в качестве выходных (shuffle = true будет иметь возможность увеличивать части)

0 голосов
/ 25 декабря 2018

Coalesce по умолчанию имеет флаг перетасовки, установленный на False.

Если вам нужно увеличить разделы, вы можете либо использовать coalesce с флагом shuffle, установленным в true (при false, раздел остается неизменным), либо использовать перераспределение

Если вы уменьшаете разделы, лучшеиспользуйте coalesce с флагом, установленным в False, поскольку это позволяет избежать полного перемешивания в отличие от перераспределения, где перемешивание гарантировано.Объединение с ложным перемешиванием перемещает данные из одного раздела в другой существующий раздел, избегая полного перемешивания, обеспечивая лучшую производительность.скажем, данные из разделов 5,6,7,8 будут перемещены в существующие разделы 1,2,3,4, а не перетасовывают данные всех 8 разделов

Определение того, на каком месте находятся данные узла, определяетсяиспользуемый вами разделитель

0 голосов
/ 24 декабря 2018

Если вы проверяете Spark API документацию Coalesce.Затем это следует за

coalesce(int numPartitions, boolean shuffle, scala.math.Ordering<T> ord)

по умолчанию, флаг тасования имеет значение False.Повторный вызов вызывает тот же метод, изменяя флаг перемешивания на True.С помощью этой информации, теперь давайте ответим на ваш вопрос

Чтобы изменить количество разделов с 8 на 4, должно произойти Shuffle.Но здесь вы явно говорите «Нет», чтобы перемешать. То есть количество разделов в этом случае не изменится.

, даже если вы попытаетесь увеличить количество разделов, оно не изменится.Так как флаг тасования ложный.Надеюсь, что это поможет

Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...