如何使用spark和elasticsearch-hadoop从/向不同的ElasticSearch集群读写?

时间:2015-03-12 01:02:20

标签: elasticsearch apache-spark hdfs dfs elasticsearch-hadoop

原标题:除了HDFS之外,还有什么其他DFS可以激发支持(并推荐)?

我很高兴使用spark和elasticsearch(带有elasticsearch-hadoop驱动程序)和几个巨大的集群。

我不时会将整个数据集拉出来,处理每个文档,并将所有数据放入不同的Elasticsearch(ES)集群中(是的,数据迁移也是如此)。

目前,无法将集群中的ES数据读入RDD,并使用spark + elasticsearch-hadoop将RDD写入另一个RDD,因为这将涉及从RDD交换SparkContext。所以我想将RDD写入目标文件,然后再将它们读回到具有不同SparkContext s的RDD中。

然而,问题出现了:我需要一个DFS(分布式文件系统)来共享整个spark集群中的大文件。最流行的解决方案是HDFS,但我会非常避免将Hadoop引入我的堆栈。是否还有其他推荐的DFS可以支持火花?

更新

感谢@Daniel Darabos的回答,我现在可以使用以下Scala代码从/向不同的ElasticSearch集群读取和写入数据:

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 个答案:

答案 0 :(得分:3)

Spark使用hadoop-common库进行文件访问,因此Hadoop支持的任何文件系统都可以与Spark一起使用。我已经将它用于HDFS,S3和GCS。

我不确定我理解为什么你不只是使用elasticsearch-hadoop。您有两个ES群集,因此需要使用不同的配置访问它们。 sc.newAPIHadoopFilerdd.saveAsHadoopFile获取hadoop.conf.Configuration个参数。因此,您可以毫无问题地使用两个具有相同SparkContext的ES群集。