Что произойдет, если я использую lowerByKey или groupByKey один большой набор данных, имеющий только два ключа - PullRequest
2 голосов
/ 12 марта 2020

Я использую искру для обработки моих данных. У меня есть пара RDD, которая распространяется на нескольких исполнителей. Размер данных составляет 10 ТБ, а количество разделов - 4000. Общее количество исполнителей - 100, а память каждого исполнителя - 20 ГБ.

Таким образом, размер каждого раздела будет около 128 МБ.

т.е.

pairedRDD = sc.textFile("myhost:9000/data/largedataset.txt", 4000);
resultRdd = pairedRDD.reduceByKey(lambda (x, y) : (x + y));

Данные в файле похожи на

1 Apple
1 Apple
2 Mango
1 Apple
3 Banana

У нас всего 3 ключа. Таким образом, все связанные ключи будут перемещены в один и тот же раздел. Поскольку у нас один раздел размером 512 МБ и у нас 4000 разделов, это приведет к любой ошибке OOM или будет выполнено без ошибок.

Если он будет выполнен без ошибок, то как Spark обрабатывает размер данных внутренне

1 Ответ

0 голосов
/ 12 марта 2020

Поведение Spark будет сильно зависеть от того, что вы выберете: reduceByKey или groupByKey.

  • GroupByKey сведет все данные в один раздел (с использованием перетасовки) и в вашем случае это вызовет OOM (Out Of Memory).
  • ReduceByKey сначала выполнит logi c для каждого исполнителя, а затем выведет полученные значения для одного исполнителя.
...