Ответ 1
Да, spark приложение имеет один и только драйвер.
Какова связь между
numWorkerNodes
иnumExecutors
?
Работник может размещать несколько исполнителей, вы можете думать о нем, как о рабочем, как о машине / node вашего кластера, а исполнитель должен быть процессом (выполняющим в ядре), который выполняется на этом рабочем месте.
Итак, `numWorkerNodes <= numExecutors '.
Есть ли у них рацион?
Лично, работая в поддельном кластере, где моим ноутбуком был Драйвер, а виртуальная машина на том же ноутбуке была рабочим, а в промышленном кластере из > 10 тыс. узлов мне не нужно было заботиться об этом, так как кажется, что spark позаботится что.
Я просто использую:
--num-executors 64
когда я запускаю/отправляю свои script и spark знает, я думаю, сколько рабочих нужно вызвать (конечно, учитывая другие параметры, а также характер машин).
Таким образом, лично я не знаю такого отношения.
Существует ли известное/общепринятое/оптимальное отношение от
numDFRows
доnumPartitions
?
Я не знаю об этом, но, как правило, вы можете положиться на произведение #executors на # executor.cores, а затем умножить его на 3 или 4. Конечно, это эвристика. В pyspark он будет выглядеть так:
sc = SparkContext(appName = "smeeb-App")
total_cores = int(sc._conf.get('spark.executor.instances')) * int(sc._conf.get('spark.executor.cores'))
dataset = sc.textFile(input_path, total_cores * 3)
Как рассчитывается "оптимальное" количество разделов на основе размера
DataFrame
?
Это отличный вопрос. Конечно, трудно ответить, и это зависит от ваших данных, кластера и т.д., Но, как обсуждалось здесь с собой.
Слишком мало разделов, и у вас будут огромные куски данных, особенно когда вы имеете дело с bigdata, тем самым помещая ваше приложение в стресс.
Слишком много разделов, и у вас будет hdfs требует большого давления, поскольку все метаданные, которые должны быть сгенерированы из hdfs значительно увеличивается по мере увеличения количества разделов (поскольку он поддерживает временные файлы и т.д.). *
Так что вы хотите найти слишком сладкое место для количества разделов, что является одной из частей тонкой настройки вашего приложения.:)
'правило:
numPartitions = numWorkerNodes * numCpuCoresPerWorker
, это правда?
А, я писал эвристику выше, прежде чем увидеть это. Так что это уже ответили, но учтите разницу между работником и исполнителем.
* Я просто не справился сегодня: Подготовьте мои bigdata с помощью Spark через Python, когда используется слишком много разделов, вызванных Активные задачи - это отрицательное число в пользовательском интерфейсе Spark.