Понимание кэширования, сохранение в Spark

может ли кто-нибудь, пожалуйста, исправить мое понимание о сохранении искры.

Если мы выполнили cache () на RDD, его значение кэшируется только на тех узлах, где фактически RDD был вычислен изначально. Значение, если есть кластер из 100 узлов, а RDD вычисляется в разделах первого и второго узлов. Если мы кэшируем этот RDD, то Spark будет кэшировать его значение только в первом или втором рабочих узлах. Поэтому, когда это приложение Spark пытается использовать этот RDD позже этапы, затем Spark driver должен получить значение от первого / второго узлов.

Я прав?

(или)

Это то, что значение RDD сохраняется в памяти драйвера, а не на узлах ?

3 ответов


изменить это:

тогда Spark будет кэшировать свое значение только в first или вторые рабочие узлы.

для этого:

тогда Spark будет кэшировать свое значение только в first и вторые рабочие узлы.

а...да правильно!

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

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

вот почему вы хотите unpersist() ваш RDD, когда он вам больше не нужен...! :)

проверьте этот рисунок, с одной из моих работ, где я запросил 100 исполнителей, однако вкладка "исполнители" отображала 101, т. е. 100 рабов / рабочих и одного мастера / водителя:

enter image description here


RDD.кэш-это ленивая операция. он ничего не делает, пока вы не вызовете действие, подобное count. После вызова действия операция будет использовать кэш. Он просто возьмет данные из кэша и сделает операцию.

RDD.кэш-сохраняется RDD с уровнем хранения по умолчанию (только память). Spark RDD API

2.Это то, что значение RDD сохраняется в памяти драйвера, а не на узлах ?

RDD может быть сохранен к диску и памяти также . Нажмите на ссылку на документ Spark для всех опций Spark Rdd Упорствуют


вот отличный ответ на кэширование

(почему) нам нужно вызвать кэш или сохранить на RDD

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