Запросы на вставку в запросы занимают слишком много времени в Apache spark - PullRequest
0 голосов
/ 04 января 2019

Я использую базу данных Oracle с Apache spark 2.3.0

В моем коде я пишу окончательный результат (после всей обработки) в трех таблицах , используя команду "spark" ниже.

billableChargeKDF.write().mode("append").format("jdbc").option("url", connection).option("dbtable", "CI_BILL_CHG_K").save();
billableChargeDF.write().mode("append").format("jdbc").option("url", connection).option("dbtable", "CI_BILL_CHG").save();
billableChargeSqDF.write().mode("append").format("jdbc").option("url", connection).option("dbtable", "CI_BCHG_SQ").save();

Каждый из трех кадров данных имеет 130 разделов. Каждый фрейм данных записывает 30 миллионов строк.

Я использую 130 ядер, 26 исполнителей (каждый исполнитель имеет 30 ГБ памяти), 2 рабочих машины (каждая имеет 88 виртуальных ядер и 502. ГБ памяти)

После анализа AWR report я обнаружил, что выше INSERT INTO запросов занимает больше всего времени выполнения.

Можно ли как-нибудь уменьшить то же самое?

Есть ли способ улучшить производительность?

EDIT

Также высокий уровень конкуренции по водяному знаку составляет 30% времени БД.

Машина

DB имеет 16 ядер и 264 ГБ.

ДАННЫЕ ОТЧЕТА ПО AWR

AWR image 1

AWR image 2

1 Ответ

0 голосов
/ 04 января 2019

Не могли бы вы попробовать с настройками ниже?

ядра исполнителей: 25

ядер на исполнителя: 5

память исполнителя - 35G

всего 130 ядер - давайте оставим одно ядро ​​и назначим каждому исполнителю 5 ядер, что означает

125 Cores/5 => 25 Executors with 5 cores each.
1004 GB Memory => 1004/25 => 40.16 - (40.16 * 0.07 for system) =37.36 Lets assign 35G for each executor.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...