Spark: весь набор данных сосредоточен в одном исполнителе - PullRequest
0 голосов
/ 23 октября 2019

enter image description here

Я выполняю задание спарк с 3 файлами по 100 МБ каждый, по какой-то причине мой интерфейс спарк отображает весь набор данных, сконцентрированный в 2 исполнителях. Работа выполняется в течение 19 часов и все еще выполняется. Ниже моя конфигурация искры. Используется версия 2.3.

spark2-submit --class org.mySparkDriver \
    --master yarn-cluster \
    --deploy-mode cluster \
    --driver-memory 8g \
    --num-executors 100 \
    --conf spark.default.parallelism=40 \
    --conf spark.yarn.executor.memoryOverhead=6000mb \
    --conf spark.dynamicAllocation.executorIdleTimeout=6000s \
    --conf spark.executor.cores=3 \
    --conf spark.executor.memory=8G \

Я попытался перераспределить код внутри кода, который работает, так как это заставляет файл разделиться на 20 разделов (я использовал rdd.repartition (20)). Но зачем мне перераспределять, я считаю, что указание в скрипте spark.default.parallelism = 40 должно позволить spark разделить входной файл на 40 исполнителей и обработать файл на 40 исполнителей.

Может кто-нибудь помочь.

Спасибо, Ниту

1 Ответ

1 голос
/ 23 октября 2019

Я предполагаю, что вы выполняете свои задания в YARN, если да, вы можете проверить следующие свойства.

yarn.scheduler.maximum-allocation-mb
yarn.nodemanager.resource.memory-mb
yarn.scheduler.maximum-allocation-vcores
yarn.nodemanager.resource.cpu-vcores

В YARN эти свойства будут влиять на количество контейнеров, которые могут быть созданы в NodeManager на основеspark.executor.cores, spark.executor.memory значения свойств (вместе с накладными расходами памяти исполнителя)

Например, если кластер с 10 узлами (ОЗУ: 16 ГБ, ядра: 6) и установлен со следующими свойствами пряжи

yarn.scheduler.maximum-allocation-mb=10GB 
yarn.nodemanager.resource.memory-mb=10GB
yarn.scheduler.maximum-allocation-vcores=4
yarn.nodemanager.resource.cpu-vcores=4

Тогда со свойствами искры spark.executor.cores=2, spark.executor.memory=4GB вы можете ожидать 2 Executors / Node, итого вы получите 19 исполнителей + 1 контейнер для драйвера

Если свойства искры spark.executor.cores=3, spark.executor.memory=8GB, то вы получите 9Executor (только 1 Executor / Node) + 1 контейнер для драйвера

вы можете обратиться к ссылке для более подробной информации

Надеюсь, это поможет

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