При использовании java tenorflow для вывода объем памяти для выполнения задания на YARN слишком велик. Работа отлично выполняется с моим компьютером (2 ядра по 16 ГБ ОЗУ) и занимает 35 минут. Но когда я пытаюсь запустить его на YARN с 10 исполнителями 16 Гб памяти и 16 Гб памяти, накладные расходы приводят к гибели исполнителей за использование слишком большого объема памяти.
Прогнозирование запускается в кластере Hortonworks с YARN 2.7.3 и Spark 2.2.1,Ранее мы использовали DL4J для вывода и все работало менее 3 минут. Тензор корректно закрывается после использования, и мы используем mapPartition для прогнозирования. Каждая задача содержит приблизительно 20 000 записей (1 МБ), поэтому входной тензор будет равен 2 000 000 x 14, а выходной тензор - 2 000 000 (5 МБ). Параметр
передается на искру при работе на YARN
--master yarn --deploy-mode cluster --driver-memory 16G --num-executors 10 --executor-memory 16G --executor-cores 2 --conf spark.driver.memoryOverhead=16G --conf spark.yarn.executor.memoryOverhead=16G --conf spark.sql.shuffle.partitions=200 --conf spark.tasks.cpu=2
Эта конфигурация может работать, если мы установим spark.sql.shuffle.partitions = 2000, но это займет 3 часа
ОБНОВЛЕНИЕ:
Разница между локальным и кластернымбыло на самом деле из-за отсутствия фильтра. мы на самом деле выполняем прогноз на большем количестве данных, чем мы.