【问题标题】:Number of connections to ElasticSearch from Java Spark从 Java Spark 到 ElasticSearch 的连接数
【发布时间】:2016-09-15 11:12:50
【问题描述】:

我们正在使用 Spark Streaming 和 Java 通过 JavaPairRDD (Spark 1.6.0) 中的 saveAsNewAPIHadoopFile 方法将数据写入 ElasticSearch。这一切都在本地和集群上运行良好。但是,我们确实注意到与 ElasticSearch 的连接数量增长得非常快(从运行本地系统的http://localhost:9200/_nodes/stats/http/_all?pretty 可以看出),最终导致 ElasticSearch 变得非常缓慢。似乎为每个 RDD 建立了一个新的连接,并且看起来又被关闭了。是否可以打开连接并尽可能长时间地保持打开状态,或者至少保持相当长的时间?如前所述,我们使用的是 Spark 1.6.0 和 ElasticSearch 2.0.0。

【问题讨论】:

    标签: java hadoop elasticsearch apache-spark


    【解决方案1】:

    是的,如果您在 foreachRDD 中创建连接,则会在每个 RDD 上创建一个连接。您应该使用连接池。这在文档中有详细的说明:

    https://spark.apache.org/docs/latest/streaming-programming-guide.html#design-patterns-for-using-foreachrdd

    spark-streaming and connection pool implementation

    【讨论】:

    • 谢谢,我并没有想太多的好点,可能是因为 saveAsNewAPIHadoopFile 似乎负责建立连接(以及关闭)。那么,如果我想使用 nodeBuilder 创建一个客户端(我猜是某种单例),我该如何使用这个客户端和这个 saveAsNewAPIHadoopFile 方法?
    • 哦,等等,我有点错过了您的第二个链接。会尝试这样的方法。如果可行,明天会通知您。
    • 不知何故,我似乎无法让它工作(仍然看不到 saveAsNewAPIHadoopFile 如何使用创建的节点,因为它似乎在“幕后”做所有事情)。所以尝试使用 TransportClient。现在我遇到了一个异常,根据stackoverflow.com/questions/33544863/…,它与 Guava 版本冲突(可能在运行时,因为我能够编译所有内容)有关,但也无法解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 2016-07-17
    相关资源
    最近更新 更多