您如何使用 spark 和 elasticsearch-hadoop 读写 from/into 个不同的 ElasticSearch 集群?

How do you read and write from/into different ElasticSearch clusters using spark and elasticsearch-hadoop?

原标题:除了HDFS,spark还支持哪些DFS(推荐)?

我很高兴将 spark 和 elasticsearch(使用 elasticsearch-hadoop driver)与几个巨大的集群一起使用。

时不时想把整个集群的数据拉出来,处理每一个doc,然后全部放到不同的Elasticsearch(ES)集群中(是的,数据迁移也是)。

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

的 RDD。

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

更新如下

感谢@Daniel Darabos 在下面的回答,我现在可以使用以下 Scala 代码读取和写入数据 from/into 不同的 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)

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

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

的 ES 集群