Как добиться большего параллелизма при чтении данных из oracle db с помощью spark - PullRequest
0 голосов
/ 17 апреля 2019

Я бегу искрой на лазурных блоках данных. Мое требование - мне нужно вытащить данные из oracle db и передать их в файлы.

Spark verison - 2.4
Databricks cluster size - 8 nodes,8 cores for each node.

Чтобы добиться большего параллелизма, я использовал алгоритм хеширования для столбца раздела в запросе оракула. ​​

example - mod(ora_hash(id), 64) as partition_key

Проблема в том, что, хотя у меня в кластере Data-bricks доступно 64 ядра, только 8 ядер работают для извлечения данных из Oracle.

Пожалуйста, найдите прикрепленный снимок экрана для справки.

executors tab executor tab with task level

следующий код -

     spark
      .read
      .format("jdbc")
      .option("url", jdbc_url)
      .option("dbtable",crmquery)
      .option("lowerBound", 0)
      .option("upperBound", 64)
      .option("partitionColumn", "partition_key")
      .option("numPartitions", 64)
      .option("Driver",driverClass)
      .option("user", user)
      .option("password", pswd)
      .option("fetchsize",1000)
      .load()
      .write
      .option("header", "true")
      .option("escape","")
      .option("inferSchema", "false")
      .csv(path)

Может кто-нибудь помочь мне, как увеличить количество подключений к оракулу БД при его чтении? Я могу использовать ядра до 56 лет.

Заранее спасибо.

1 Ответ

0 голосов
/ 17 апреля 2019

Вам не нужно хэшировать свои данные перед чтением с помощью Spark, и я бы сказал, что это вызывает проблемы. Нижняя и верхняя границы позволяют Spark повторно выполнить ваш запрос, добавив предложение WHERE для чтения данных в раздел следующим образом:

SELECT * FROM crmquery WHERE partition_key >= 0 and owner_id < 64
SELECT * FROM crmquery WHERE partition_key >= 64 and owner_id < 128

...

Поскольку вы хэшировали данные раньше, у вас нет данных с ключом partition_key> = 64

Указание вместо этого только partitionColumn, lowerBound, upperBound и numPartitions должно позволить вам достичь того, что вы хотите. Также я думаю, что вам лучше полагаться на jdbc метод вместо форматирования со всеми этими опциями.

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

...