spark-elasticsearch索引创建性能太慢

zzzyeukh  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(388)

我正在尝试使用apache spark在ElasticSearch中创建索引(向es写入大量数据)。我已经使用apache spark编写了一个scala程序来创建索引。我必须索引大量数据,这些数据在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")
    }

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

9lowa7mx

9lowa7mx1#

除非必要,否则不要通过驱动程序传递数据。取决于从 getData 您应该使用相关的输入法或创建自己的输入法。例如,如果数据来自mongodb mongo-hadoop , Spark-MongoDB 或者使用jdbc连接进行演练。然后使用 map 或类似的方法来构建所需的对象并使用 saveToEs 在rdd上。
用as-single元素创建rdd是没有意义的。它完全没有从spark体系结构中获益。你只需要启动一个潜在的大量任务,这些任务只有一个活动的执行者。

相关问题