Spark - ElasticSearch索引创建性能太慢

时间:2016-03-09 09:45:09

标签: scala hadoop elasticsearch apache-spark

我正在尝试使用Apache spark在Elastic搜索中创建索引(将大量数据写入ES)。我已经完成了一个Scala程序来使用Apache spark创建索引。我必须索引大量数据,这是我的LinkedList中的产品bean。然后。然后我试图遍历产品bean列表并创建索引。我的代码如下。

val conf = new SparkConf().setAppName("ESIndex").setMaster("local[*]")
    conf.set("es.index.auto.create", "true").set("es.nodes", "127.0.0.1")
      .set("es.port", "9200")
      .set("es.http.timeout", "5m")
      .set("es.scroll.size", "100")

    val sc = new SparkContext(conf)

    //Return my product bean as a in a linkedList.
    val list: util.LinkedList[product] = getData() 

    for (item <- list) {
      sc.makeRDD(Seq(item)).saveToEs("my_core/json")
    }

这种方法的问题是花费太多时间来创建索引。 有没有办法以更好的方式创建索引?

1 个答案:

答案 0 :(得分:3)

  1. 除非有必要,否则不要通过驱动程序传递数据。根据从getData返回的数据来源,您应该使用相关的输入法或创建自己的输入法。如果数据来自MongoDB,请使用例如mongo-hadoopSpark-MongoDB或Drill with JDBC connection。然后使用map或类似方法构建所需对象,并在转换后的RDD上使用saveToEs

  2. 使用单个元素创建RDD并不合理。它根本不受Spark架构的影响。您只需启动潜在的大量任务,而这些任务只有一个活动的执行程序。