Мне нужно использовать spark для экспорта данных из Hive (с разделами) в Teradata (без разделов).
Спецификация кластера: 120 рабочих узлов, каждый из которых имеет 16 ядерных процессоров, 128 ГБ ОЗУ.Размер таблицы составляет около 130 ГБ, и когда я создаю из нее фрейм данных, она создает 1,30000 разделов.
val df=spark.sql("select * from <hive-external-table>")
df.mode(SaveMode.Append).write.jdbc(<jdbc_url>,<teradata_table>,<connectionproperties>)
Я запускаю искру в режиме клиента, используя следующую конфигурацию:
--executor-cores 5 --executor-memory 16G --num-executors 200
Задание работало гладко, но оно создало более 300 соединений JDBC на конце Teradata, администраторы баз данных запаниковали и убилииз-за них моя работа провалилась.
Теперь мои вопросы:
Должен ли я использовать объединение, чтобы уменьшить количество разделов с 1,30,000?Если да, что является оптимальным и как его выбрать?
Как я уже говорил, работа выполнялась довольно быстро, она использовала около 900 голосов из 1500, которые я запросил: Этап 0> -> -------------------------- (40230 + 932) / 1,30,000
Как я могу настроить это так, чтобы моя работа не создавала, скажем, более 100 соединений JDBC?
Помогло бы, если целевая таблица на конце Teradata разбита на один столбец?Как?
Было получено столько vcores из Yarn, когда они простаивали, но когда были представлены другие производственные задания, они работали очень медленно, так как не получали необходимое количество исполнителей.
Самый важный вопрос: не должен ли Yarn освободить исполнителей, которых он первоначально предоставил моей работе, и распределить их на другие рабочие места?Я выполнял свою работу в очереди по умолчанию, которая не имеет особого приоритета.
Разве я не должен использовать spark и использовать вместо нее Sqoop?
Пожалуйста, дайте мне знать, если вам нужна какая-либо другая информация о системе, и извините, если у меня нет ясности с моей проблемой, поскольку я не настолько опытен в искре.