2015-07-09 5 views
2

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

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

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

ответ

3

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

+0

Спасибо. Поэтому при использовании параметра .persist() с аргументом MEMORY_AND_DISK искра должна считываться с диска после каждой итерации? Коэффициент усиления будет заключаться в том, что RDD не будет повторно вычисляться с использованием линии после каждой итерации, верно? – Madzor

+0

Это идея. Обычно чтение с локального диска происходит быстрее, чем пересчет данных. – Holden