2016-09-15 81 views
0

我們通過JavaPairRDD(Spark 1.6.0)的saveAsNewAPIHadoopFile方法使用Spark Streaming和Java將數據寫入ElasticSearch。這一切在本地和羣集上都可以很好地工作。但是,我們確實注意到ElasticSearch的連接數量增長非常快(從運行本地系統的http://localhost:9200/_nodes/stats/http/_all?pretty中可以看出),最終導致ElasticSearch變得非常緩慢。看起來,對於每個RDD,都會建立一個新的連接,並且它看起來又被關閉了。是否可以打開連接並儘可能長時間地打開連接,或者至少在相當長的時間內打開連接?我們正在使用Spark 1.6.0和ElasticSearch 2.0.0。從Java Spark連接到ElasticSearch的數量

回答

0

是的,如果您在foreachRDD中創建連接,則會在每個RDD上創建一個連接。你應該使用連接池。這是在doc廣泛詳述:

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

spark-streaming and connection pool implementation

+0

謝謝,好點的,我真的沒有考慮太多,可能是因爲saveAsNewAPIHadoopFile似乎採取建立連接的護理(和關閉)。所以,如果我想使用nodeBuilder創建一個客戶端(我猜想某種單例),那麼如何使用此saveAsNewAPIHadoopFile方法的客戶端? –

+0

哦,等一下,我錯過了你的第二個鏈接。將嘗試這樣的方法。如果有效,明天會通知你。 –

+0

我似乎沒有得到它的工作(仍然沒有看到saveAsNewAPIHadoopFile如何使用創建的節點,因爲它看起來像是在'引擎蓋下'一樣)。因此改爲使用TransportClient。現在我遇到了一個異常,根據http://stackoverflow.com/questions/33544863/java-elasticsearch-client-always-null是與相互矛盾的番石榴版本(可能在運行時,因爲我能夠編譯一切),但還沒有能夠解決這個問題。 –