Apache Spark кеширует RDD на уровне узла или на уровне кластера? - PullRequest
0 голосов
/ 20 сентября 2018

Я знаю, что метод Apache Spark persist сохраняет RDD в памяти и что, если не хватает места в памяти, он сохраняет оставшиеся разделы RDD в файловой системе (диске),Кажется, я не могу понять следующее:

Представьте, что у нас есть кластер, и мы хотим сохранить СДР.Предположим, что у узла A недостаточно места в памяти, а у узла B - много.Предположим теперь, что после выполнения команды persist узлу A не хватает памяти.Теперь возникает вопрос:

Ищет ли Apache Spark больше места в памяти узла B и пытается ли хранить все в памяти?

Или, учитывая, что в узле A недостаточно места, Spark хранитоставшиеся разделы СДР на диске узла A, даже если в узле B доступно некоторое пространство памяти?

Спасибо за ваши ответы.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Самое близкое, что я мог найти, это Кэшировать или не кэшировать .У меня было много ситуаций, когда данные были слегка искажены и возникали связанные с памятью исключения / сбои при попытке кэширования / сохранения в ОЗУ, одним из способов было использование StorageLevels, например MEMORY_AND_DISK , но, очевидно, это занимало больше временикэшировать и затем читать эти разделы.

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

0 голосов
/ 20 сентября 2018

Обычно Spark не ищет свободное место.Данные кэшируются локально на исполнителе, ответственном за конкретный раздел.

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

...