У меня есть процесс PySpark, который извлекает запросы запросов из очереди, выполняет их через Spark, а затем записывает их в какое-то местоположение.
Все это выполняется с использованием одного SparkContext / SQLContext.
Может ли вызов stop
в контексте между запросами оказать негативное влияние на кластер / приложение (использование памяти, нечастая сборка мусора, накопление временных файлов и т. Д.)?
Я заметил, что в моих меньших кластерах использование временных файлов быстро заполняется без очистки каталога "SPARK_LOCAL_DIRS".
Для кластеров с большим дисковым пространством и большим количеством оперативной памяти, я замечаю, что кластер редко (раз в месяц или около того) сталкивается с ошибкой spark gc overhead limit exceeded
и зависает.
Грубый обзор кода.Примечание: sc.stop()
никогда не вызывается.
sc = SparkContext(conf=conf)
sql = SQLContext(sc)
while(jobs.hasNext():
conf = jobs.next()
df = sql.read.options(**conf).load()
results = df.groupBy(col("foo")).aggs(count("*"))
sql.write.options(**conf).save()
pass