Как разделить Spark RDD между двумя контекстами Spark?

У меня есть кластер RMI. Каждый сервер RMI имеет контекст Spark. Есть ли способ поделиться RDD между разными контекстами Spark?


person simafengyun    schedule 13.01.2015    source источник


Ответы (3)


Как уже заявил Даниэль Дарабос, это невозможно. Каждый распределенный объект в Spark привязан к определенному контексту, который использовался для его создания (SparkContext в случае RDD, SQLContext в случае DataFrame набора данных). Если вы хотите совместно использовать объекты между приложениями, вы должны использовать общие контексты (см., например, spark-jobserver , Ливи или Apache Zeppelin). Так как RDD или DataFrame — это всего лишь небольшой локальный объект, делиться им особо нечем.

Совместное использование данных — это совсем другая проблема. Вы можете использовать специализированный кэш в памяти (Apache Ignite) или распределенный в файловых системах памяти (например, Alluxio — бывший Tachyon), чтобы минимизировать задержку при переключении между приложениями, но вы не можете этого избежать.

person zero323    schedule 08.03.2016

Нет, RDD привязан к одному SparkContext. Общая идея заключается в том, что у вас есть кластер Spark и одна программа-драйвер, которая сообщает кластеру, что делать. Этот драйвер будет иметь SparkContext и запускать операции с RDD.

Если вы хотите просто переместить RDD из одной программы драйвера в другую, решение состоит в том, чтобы записать его на диск (S3/HDFS/...) в первом драйвере и загрузить его с диска в другом драйвере.

person Daniel Darabos    schedule 14.01.2015

Вы не можете изначально, в моем понимании, RDD - это не данные, а способ создания данных с помощью преобразований/фильтров из исходных данных.

Другая идея - вместо этого поделиться окончательными данными. Итак, вы будете хранить RDD в хранилище данных, например: - HDFS (файл паркета и т. д.) - Elasticsearch - Apache Ignite (в памяти)

Я думаю, вам понравится Apache Ignite: https://ignite.apache.org/features/igniterdd.html

Apache Ignite предоставляет реализацию абстракции Spark RDD, которая позволяет легко обмениваться состоянием в памяти между несколькими заданиями Spark либо в одном приложении, либо между разными приложениями Spark.

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

(Я позволяю вам копаться в их документации, чтобы найти то, что вы ищете.)

person Thomas Decaux    schedule 09.02.2018