Как вы читаете и пишете из / в разные кластеры ElasticSearch, используя spark и asticsearch-hadoop?
Оригинальное название: Помимо HDFS, какие еще DFS поддерживает spark (и рекомендуется)?
Я с радостью использую spark и asticsearch (с драйвером asticsearch-hadoop) с несколькими гигантскими кластерами.
Время от времени я хотел бы вытащить весь кластер данных, обработать каждый документ и поместить их все в другой кластер Elasticsearch (ES) (да, миграция данных тоже).
В настоящее время нет способа считывать данные ES из кластера в RDD и записывать RDD в другой файл с помощью spark +asticsearch-hadoop, поскольку это может привести к обмену SparkContext
из РДД. Поэтому я хотел бы записать RDD в объектные файлы, а затем прочитать их обратно в RDD с различными SparkContext
s.
Однако возникает проблема: мне нужна DFS (распределенная файловая система) для совместного использования больших файлов по всему моему спарк-кластеру. Наиболее популярным решением является HDFS, но я бы очень не хотел вводить Hadoop в свой стек. Есть ли другие рекомендуемые DFS, которые поддерживает спарк?
Обновление ниже
Благодаря ответу @Daniel Darabos, приведенному ниже, теперь я могу читать и записывать данные из / в различные кластеры ElasticSearch, используя следующий код Scala:
val conf = new SparkConf().setAppName("Spark Migrating ES Data")
conf.set("es.nodes", "from.escluster.com")
val sc = new SparkContext(conf)
val allDataRDD = sc.esRDD("some/lovelydata")
val cfg = Map("es.nodes" -> "to.escluster.com")
allDataRDD.saveToEsWithMeta("clone/lovelydata", cfg)
1 ответ
Spark использует общую библиотеку hadoop для доступа к файлам, поэтому любые файловые системы, поддерживаемые Hadoop, будут работать со Spark. Я использовал его с HDFS, S3 и GCS.
Я не уверен, что понимаю, почему вы не просто используете elasticsearch-hadoop
, У вас есть два кластера ES, поэтому вам нужно получить к ним доступ с разными конфигурациями. sc.newAPIHadoopFile
а также rdd.saveAsHadoopFile
принимать hadoop.conf.Configuration
аргументы. Таким образом, вы можете без проблем использовать два кластера ES с одинаковыми SparkContext
,