Я запускаю потоковое задание под Spark 1.6.2, которое принимает партии из очереди. Я пробовал различные размеры памяти и числа исполнителей, например:Как контролировать растущую задержку планировщика под Spark 1.6.2?
spark-submit --class "MyStreamingClass" --master yarn --deploy-mode cluster --driver-memory 11g --executor-memory 11g
--num-executors 7 --conf spark.yarn.executor.memoryOverhead=256 mystuff-*.jar
Каждая партия запрашивает повторную обработку одного и того же набора данных, обновляя изменения значений. То есть, такая же структура, тот же размер, одинаковых ключей, но значения обновляются каждой партией. С каждым запросом увеличивается время между запросом, считываемым из очереди и доставляемым на вход DStream. Я полагаю, что это Задержка Планировщика. Это значение можно регулировать до в некоторой степени, регулируя память и количество исполнителей. Проблема заключается в том, что задержка планировщика растет с каждой партией, и может занять несколько минут после пары запросов. Длинные клавиши никогда не меняются, поэтому HashPartitioner использует одинаковые ключи каждый раз. Это небольшой объем данных, менее 100 миллионов, но обработка обширна и должна быть распределена между узлами.
Почему Задержка планировщика растет так быстро, тем более, что ключи не меняются? Что мне нужно изменить, чтобы стабилизировать задержку планировщика?
Ваше время обработки больше, чем периодический интервал? –
@NishantKumar - Дольше. Однако каждая партия обрабатывается отдельно. Я отправляю пакет, ожидая его очистки, а затем вступая в следующий. Надеемся, что кластер будет в чистом состоянии и обработает каждую партию без помех от предыдущего. –