Работа Spark занимает много времени # Код или проблема окружающей среды? - PullRequest
0 голосов
/ 24 октября 2018

у нас есть кластер из 300 узлов, каждый узел имеет 132 ГБ памяти и 20 ядер.Спросите: удалите данные из таблицы A, которая находится в таблице B, а затем объедините B с A и нажмите A для получения teradata.

ниже приведен код

val ofitemp = sqlContext.sql("select * from B")
val ofifinal = sqlContext.sql("select * from A")
val selectfromfinal = sqlContext.sql("select A.a,A.b,A.c...A.x from A where A.x=B.x")
val takefromfinal = ofifinal.except(selectfromfinal)
val tempfinal = takefromfinal.unionAll(ofitemp)tempfinal.write.mode("overwrite").saveAsTable("C")
val tempTableFinal = sqlContext.table("C")tempTableFinal.write.mode("overwrite").insertInto("A")

, конфигурация, используемая для запуска spark,-

EXECUTOR_MEM="16G"
HIVE_MAPPER_HEAP=2048   ## MB
NUMBER_OF_EXECUTORS="25"
DRIVER_MEM="5G"
EXECUTOR_CORES="3"

с A и B, имеющими несколько миллионов записей, выполнение задания занимает несколько часов.Поскольку я очень новичок в Spark, я не понимаю, является ли это проблемой с кодом или настройкой среды.

будет обязательным, если вы сможете поделиться своими мыслями, чтобы преодолеть проблемы с производительностью.

1 Ответ

0 голосов
/ 24 октября 2018

В вашем коде except может быть узким местом, потому что он сравнивает все столбцы на равенство.Это действительно то, что вам нужно?leftanti "-join:

val takefromfinal = ofifinal.join(ofitemp,$"A.x"===$"B.y","leftanti")

Кроме того, изучите спарк-интерфейс и определите узкое место

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...