Я прочитал статью «Отказоустойчивые распределенные наборы данных. Отказоустойчивая абстракция для кластерных вычислений в памяти». Автор сказал, что если один раздел потерян, мы можем использовать родословную для его восстановления. Однако исходного RDD сейчас не существовало в памяти. Так будет ли снова загружен базовый RDD, чтобы восстановить потерянный раздел RDD?
Если один раздел потерян, мы можем использовать родословную для его восстановления. Будет ли снова загружен базовый RDD?
Ответы (1)
Да, как вы упомянули, если RDD, который использовался для создания раздела, больше не находится в памяти, его необходимо снова загрузить с диска и пересчитать. Если исходного RDD, который использовался для создания вашего текущего раздела, также нет (ни в памяти, ни на диске), Spark придется снова вернуться на один шаг назад и пересчитать предыдущий RDD. В худшем случае Spark придется полностью вернуться к исходным данным.
Если у вас есть длинные цепочки родословных, подобные той, что описана выше как наихудший сценарий, что может означать длительное время повторного вычисления, тогда вам следует рассмотреть возможность использования checkpointing, который сохраняет промежуточные результаты в надежном хранилище (например, HDFS), что не позволяет Spark выполнять все вернуться к исходному источнику данных и вместо этого использовать данные с контрольными точками.
@Comment: у меня проблемы с поиском каких-либо официальных справочных материалов, но, насколько я помню из их кодовой базы, Spark воссоздает только ту часть данных, которая была потеряна.