Если один раздел потерян, мы можем использовать родословную для его восстановления. Будет ли снова загружен базовый RDD?

Я прочитал статью «Отказоустойчивые распределенные наборы данных. Отказоустойчивая абстракция для кластерных вычислений в памяти». Автор сказал, что если один раздел потерян, мы можем использовать родословную для его восстановления. Однако исходного RDD сейчас не существовало в памяти. Так будет ли снова загружен базовый RDD, чтобы восстановить потерянный раздел RDD?


person zickr sivolin    schedule 03.08.2015    source источник


Ответы (1)


Да, как вы упомянули, если RDD, который использовался для создания раздела, больше не находится в памяти, его необходимо снова загрузить с диска и пересчитать. Если исходного RDD, который использовался для создания вашего текущего раздела, также нет (ни в памяти, ни на диске), Spark придется снова вернуться на один шаг назад и пересчитать предыдущий RDD. В худшем случае Spark придется полностью вернуться к исходным данным.

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

@Comment: у меня проблемы с поиском каких-либо официальных справочных материалов, но, насколько я помню из их кодовой базы, Spark воссоздает только ту часть данных, которая была потеряна.

person Mateusz Dymczyk    schedule 03.08.2015