http://spark.apache.org/docs/latest/rdd-programming-guide.html#rdd-persistence

оложим, у нас есть СДР, который используется несколько раз. Поэтому, чтобы снова и снова сохранять вычисления, мы сохранили этот RDD, используя метод rdd.persist ().

Поэтому, когда мы сохраняем этот RDD, узлы, вычисляющие RDD, будут хранить свои разделы.

Итак, предположим, что узел, содержащий этот постоянный раздел RDD, дает сбой, тогда что произойдет? Как искра восстановит потерянные данные? Есть ли механизм репликации? Или какой-то другой механизм?

 Indrajit Swain08 дек. 2017 г., 11:14
Та же самая ошибка Torrance будет работать только здесь

Ответы на вопрос(2)

что лучший способ понять, насколько Spark является отказоустойчивым, - это когда кто-то сказал мне, что я не должен думать о СДР как о больших распределенных массивах данных.

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

Теперь, если вы действительно хотите потерять данные при сохранении, вы можете указать, что вы хотите реплицировать ваши кэшированные данные.

Для этого вам нужно выбрать уровень хранения. Поэтому вместо обычного использования этого:

MEMORY_ONLY - Store RDD as deserialized Java objects in the JVM. If the RDD does not fit in memory, some partitions will not be cached and will be recomputed on the fly each time they're needed. This is the default level.
MEMORY_AND_DISK - Store RDD as deserialized Java objects in the JVM. If the RDD does not fit in memory, store the partitions that don't fit on disk, and read them from there when they're needed.

Вы можете указать, что вы хотите, чтобы ваши сохраненные данные были воспроизведены

MEMORY_ONLY_2, MEMORY_AND_DISK_2, etc. -    Same as the levels above, but replicate each partition on two cluster nodes.

Таким образом, если узел выходит из строя, вам не придется пересчитывать данные.

Проверьте уровни хранения здесь:http://spark.apache.org/docs/latest/rdd-programming-guide.html#rdd-persistence

Решение Вопроса

rdd не материализует содержимое. Это происходит, когда вы выполняете действие на RDD. Следует тот же ленивый принцип оценки.

Теперь СДР знает раздел, на котором он должен работать, и группу DAG, связанную с ним. С DAG он отлично способен воссоздать материализованный раздел.

Таким образом, когда узел выходит из строя, драйвер порождает другого исполнителя в каком-то другом узле и предоставляет ему раздел данных, на котором он должен был работать, и группу DAG, связанную с ним, в замыкании. Теперь с этой информацией он может пересчитать данные и материализовать их.

В то же время кэшированные данные в СДР не будут содержать все данные в памяти, а данные потерянных узлов, которые нужно извлечь с диска, будут занимать так мало времени.

На репликации да поддерживает спарк в репликации памяти. Вам нужно установить StorageLevel.MEMORY_DISK_2, когда вы сохранитесь.

rdd.persist(StorageLevel.MEMORY_DISK_2)

Это гарантирует, что данные реплицируются дважды.

 Jacek Laskowski08 дек. 2017 г., 11:54
Я бы сказал, что«Теперь СДР знает раздел, на котором он должен работать, и связанный с ним DAG. С DAG он вполне способен воссоздать материализованный раздел». правильно. Там нет RDD во время выполнения, но набор задач, какTaskSet.

Ваш ответ на вопрос