2016-09-15 5 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에 연결이 만들어집니다. 연결 풀링을 사용해야합니다. 이 작업은 문서에서 광범위하게 자세히 설명되어 있습니다 :

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에 따라 충돌하는 구아바 버전과 관련된 예외를 실행하고있다. (아마도 런타임에 나는 모든 것을 컴파일 할 수 있기 때문이다.) 그러나 아직 어느 쪽도 그것을 해결할 수 없었다. –

관련 문제