Зависит ли Spark Shell JDB C значение numPartitions от количества исполнителей? - PullRequest
0 голосов
/ 14 апреля 2020

У меня Spark настроен в автономном режиме на одном узле с 2 ядрами и 16 ГБ ОЗУ для создания грубых POC.
Я хочу загрузить данные из источника SQL, используя val df = spark.read.format('jdbc')...option('numPartitions',n).load(). Когда я попытался измерить время, необходимое для чтения таблицы для различных значений numPartitions, вызвав df.rdd.count, я увидел, что время было одинаковым, независимо от того, какое значение я дал. Я также заметил один контекстный веб-интерфейс, что количество активных исполнителей было 1, хотя я дал SPARK_WORKER_INSTANCES=2 и SPARK_WORKER_CORES=1 в моем файле spark_env. sh.

У меня есть 2 вопроса:
Зависит ли numPartitions на самом деле от количества исполнителей?
Как мне запустить spark-shell с несколькими исполнителями в моей текущей настройке?

Спасибо!

1 Ответ

2 голосов
/ 14 апреля 2020

Количество разделов не зависит от вашего числа исполнителей - хотя есть лучшая практика (разделы на ядра), но это не определяется экземплярами исполнителей.

В случае чтения из JDB C, для параллелизации чтения вам необходим столбец раздела, например:

spark.read("jdbc")
  .option("url", url)
  .option("dbtable", "table")
  .option("user", user)
  .option("password", password)
  .option("numPartitions", numPartitions)
  .option("partitionColumn", "<partition_column>")
  .option("lowerBound", 1)
  .option("upperBound", 10000)
  .load()

, который будет параллелизировать запросы из баз данных к 10 000 / numPartitions результатам каждого запроса.

О программе Ваш второй вопрос, вы можете найти всю конфигурацию spark здесь: https://spark.apache.org/docs/latest/configuration.html, (spark2-shell --num-executors или конфигурация --conf spark.executor.instances).

Указание количества исполнителей, означающее динамическое c распределение, будет отключено, так что имейте это в виду.

...