2017-01-11 7 views
1

Я был бы очень признателен, если бы кто-то мог ответить на эти несколько вопросов, связанных с shuffle, в упрощенном виде.Понимание случайного и повторного образования в искры

В искры при загрузке набора данных указывается количество разделов, указывающее, сколько блоков необходимо разделить входным данным (RDD) и на основе количества разделов, равное количество запускаются задачи (правильно, если предположение неверно) .for X Число ядер в рабочем узле. Соответствует X Количество задач, выполняемых за один раз.

Вдоль подобных линий, вот несколько вопросов.

Поскольку все операции byKey вместе с объединением, перераспределением, объединением и cogroup приводят к перетасовке данных.

  1. Является ли данные перетасовкой другого имени для операции перераспределения?

  2. Что происходит с начальными разделами (количество объявленных разделов) при перераспределениях.

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

ответ

0

Прежде всего, блоки HDFS делятся на количество разделов, не входящих в блоки. Эти ходатайства хранятся в памяти. Эти разделы находятся в рабочей памяти.

Q- Это данные перетасовывают другое название для операции repartitiong?

A-No. В общем случае перераспределение означает увеличение существующего раздела, в котором данные делятся на. Поэтому всякий раз, когда мы увеличиваем раздел, мы на самом деле пытаемся «переместить» данные в количестве новых разделов, установленных в коде, а не «Shuffling». Перетасовка - это несколько, когда мы перемещаем данные определенного ключа в один раздел.

Q- Что происходит с начальными разделами (количество объявленных разделов) при перераспределениях? A- Покрытие выше Еще одна основная вещь: rdd.repartition (n) не будет изменять значение no. Из разделов РДА, его tranformation, который будет работать, когда какой-либо другой рдд создается как rdd1 = rdd.repartition (п)

Now it will create new rdd1 that have n number of partition.To do this, we can call coalesce function like rdd.coalesce(n) Being an action function, this will change the partitions of rdd itself. 

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

Ans- раздел и разбиение на две разные концепции, поэтому раздел - это то, в котором данные разделяются равномерно по количеству разделов, заданных пользователем, но при разбиении на разделы данные перетасовываются между этими разделами в соответствии с алгоритмами, заданными пользователем как HashPartitioning & RangePartitioning.

Как RDD = sc.textFile («../ путь», 5) rdd.partitions.size/длина

O/p: Int: 5(No.of partitions) 

rdd.partitioner.isDefined

O/p: Boolean= false 

rdd.partitioner

O/p: None(partitioning scheme) 

Но

РДД = sc.textFile («../ путь», 5) .partitionBy (новый org.apache.spark.HashPartition (10) .cache()

rdd.partitions.size

O/p: Int: 10 

rdd.partitioner.isDefined

O/p: Boolean: true 

rdd.partitioner

O/p: [email protected] 

Надеется, что это поможет !!!