У меня есть потоковое задание (Spark 2.4.5), в котором использование памяти у исполнителей постоянно увеличивается.
Через несколько итерации, которые выпадают исполнителям (org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 6987
) из-за нехватки памяти.
Что потоковое задание выполняет в двух словах:
- Агрегирует ввод, кэширует и не обрабатывает различные кадры данных
- Сохраняет определенные кадры данных в HDFS (паркет)
- Сохраняет определенные кадры данных в контрольные точки
- Выполняет два pandas udf functions
- Публикует сообщения обратно в Kafka
Я не уверен, есть ли в моей работе внутренняя проблема с дизайном, или в чем причина медленного, но неуклонного увеличения памяти и как Я мог бы избежать этого. Есть идеи?