Спарк пишет файл внутри рабочего процесса

У меня есть работа Spark, которая генерирует набор результатов со статистикой. Мое количество рабочих элементов больше, чем количество рабов. Таким образом, я делаю больше чем одну обработку на раба.

я cache результаты после генерации RDD объекты, чтобы иметь возможность использовать их повторно, так как у меня есть несколько операций записи: одна для объектов результата, а другая для статистики. Обе операции записи используют saveAsHadoopFile,

Без кэширования Spark перезапускает задание снова для каждой операции записи, и это занимает много времени и повторяет одно и то же выполнение дважды (больше, если у меня было больше записей).

С кешированием я бью по пределу памяти. Некоторые из ранее рассчитанных результатов теряются во время кэширования, и я вижу "CacheManager:58 - Partition rdd_1_0 not found, computing it" Сообщения. В конечном итоге Spark входит в бесконечный цикл, пытаясь кэшировать больше результатов, теряя при этом некоторые другие.

Мне известно о том, что Spark имеет разные уровни хранения для кэширования. Использование памяти + диск решит нашу проблему. Но мне интересно, можем ли мы записывать файлы прямо на рабочем месте без генерации RDD объекты или нет. Я не уверен, если это возможно, хотя. Это?

1 ответ

Решение

Оказывается, что запись файлов внутри рабочего процесса Spark не отличается от записи файла в процессе Java. Операция записи требует только создания функциональности для сериализации и сохранения файлов в HDFS. На этот вопрос есть несколько ответов о том, как это сделать.

saveAsHadoopFile это просто удобный способ сделать это.

Другие вопросы по тегам