Apache Spark - Управление на паметта

Да предположим, че имам клъстер със 100 GB памет за използване на spark. Имам набор от данни от 2000 GB и искам да стартирам итеративно приложение за този набор от данни. 200 повторения.

Въпросът ми е, когато използвам .cache(), ще запазя ли Spark първите 100 GB в паметта и ще изпълни 200 итерации, преди автоматично да прочете следващите 100 GB?

Когато работите в рамките на ограничението на паметта, предимствата на sparks са много ясни, но когато работите с по-големи набори от данни, не съм напълно сигурен как spark и yarn управляват данните.


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, spark ще трябва да чете от диска след всяка итерация? Печалбата би била, че RDD няма да бъде преизчисляван с помощта на линията след всяка итерация, нали? - person Madzor; 09.07.2015
comment
Това е идеята. Обикновено четенето от локален диск е по-бързо от повторното изчисляване на данните. - person Holden; 11.07.2015