2016-09-15 88 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是与相互矛盾的番石榴版本(可能在运行时,因为我能够编译一切),但还没有能够解决这个问题。 –

相关问题