Apache Spark — управление памятью

Итак, предположим, что у меня есть кластер со 100 ГБ памяти для искры. У меня есть набор данных размером 2000 ГБ, и я хочу запустить итеративное приложение для этого набора данных. 200 итераций.

Мой вопрос: при использовании .cache() искра сохранит первые 100 ГБ в памяти и выполнит 200 итераций перед автоматическим чтением следующих 100 ГБ?

При работе в пределах памяти преимущества искр очень очевидны, но при работе с большими наборами данных я не совсем уверен, как искра и пряжа управляют данными.


person Madzor    schedule 09.07.2015    source источник


Ответы (1)


Это не то поведение, которое вы увидите. Кэширование Spark выполняется с помощью вытеснения LRU, поэтому, если вы кешируете набор данных, который слишком велик для памяти, в памяти будет храниться только самая последняя использованная часть. Однако у spark также есть режим сохранения MEMORY_AND_DISK (более подробно описанный в https://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence ), что может подойти для вашего случая.

person Holden    schedule 09.07.2015
comment
Спасибо. Итак, при использовании .persist() с аргументом MEMORY_AND_DISK искре придется читать с диска после каждой итерации? Выгода будет заключаться в том, что RDD не будет пересчитываться с использованием родословной после каждой итерации, верно? - person Madzor; 09.07.2015
comment
Это идея. Обычно чтение с локального диска выполняется быстрее, чем пересчет данных. - person Holden; 11.07.2015