Спарк пишет файл внутри рабочего процесса
У меня есть работа Spark, которая генерирует набор результатов со статистикой. Мое количество рабочих элементов больше, чем количество рабов. Таким образом, я делаю больше чем одну обработку на раба.
я cache
результаты после генерации RDD
объекты, чтобы иметь возможность использовать их повторно, так как у меня есть несколько операций записи: одна для объектов результата, а другая для статистики. Обе операции записи используют saveAsHadoopFile
,
Без кэширования Spark перезапускает задание снова для каждой операции записи, и это занимает много времени и повторяет одно и то же выполнение дважды (больше, если у меня было больше записей).
С кешированием я бью по пределу памяти. Некоторые из ранее рассчитанных результатов теряются во время кэширования, и я вижу "CacheManager:58 - Partition rdd_1_0 not found, computing it"
Сообщения. В конечном итоге Spark входит в бесконечный цикл, пытаясь кэшировать больше результатов, теряя при этом некоторые другие.
Мне известно о том, что Spark имеет разные уровни хранения для кэширования. Использование памяти + диск решит нашу проблему. Но мне интересно, можем ли мы записывать файлы прямо на рабочем месте без генерации RDD
объекты или нет. Я не уверен, если это возможно, хотя. Это?
1 ответ
Оказывается, что запись файлов внутри рабочего процесса Spark не отличается от записи файла в процессе Java. Операция записи требует только создания функциональности для сериализации и сохранения файлов в HDFS. На этот вопрос есть несколько ответов о том, как это сделать.
saveAsHadoopFile
это просто удобный способ сделать это.