由于连接错误,Spark save to elasticsearch失败

时间:2018-06-08 14:11:45

标签: python apache-spark elasticsearch pyspark apache-spark-sql

我正在尝试使用150个字段索引有关77M文档的elasticsearch中的数据。 我们没有太多的计算/内存资源,所以我们的集群是3个节点(48GB RAM / 24 CPU和6TB存储)

我正在从另一个虚拟网络中的另一个火花群发送数据,但这两个网络是配对的,我可以从火花群集节点中查看所有els节点。

我面临的问题是:在一定数量的文件索引(大约8M)火花无法连接到els并且它会抛出以下错误:

Job aborted due to stage failure: Task 173 in stage 9.0 failed 4 times, most recent failure: Lost task 173.3 in stage 9.0 (TID 17160, wn21-swspar.of12wietsveu3a3voc5bflf1pa.ax.internal.cloudapp.net, executor 3): org.elasticsearch.hadoop.rest.EsHadoopNoNodesLeftException: Connection error (check network and/or proxy settings)- all nodes failed; tried [[10.0.0.12:9200]] 
at org.elasticsearch.hadoop.rest.NetworkClient.execute(NetworkClient.java:149)
at org.elasticsearch.hadoop.rest.RestClient.execute(RestClient.java:466)
at org.elasticsearch.hadoop.rest.RestClient.execute(RestClient.java:450)
at org.elasticsearch.hadoop.rest.RestClient.bulk(RestClient.java:186)
at org.elasticsearch.hadoop.rest.RestRepository.tryFlush(RestRepository.java:248)
at org.elasticsearch.hadoop.rest.RestRepository.flush(RestRepository.java:270)
at org.elasticsearch.hadoop.rest.RestRepository.doWriteToIndex(RestRepository.java:210)
at org.elasticsearch.hadoop.rest.RestRepository.writeToIndex(RestRepository.java:187)
at org.elasticsearch.spark.rdd.EsRDDWriter.write(EsRDDWriter.scala:67)
at org.elasticsearch.spark.sql.EsSparkSQL$$anonfun$saveToEs$1.apply(EsSparkSQL.scala:101)
at org.elasticsearch.spark.sql.EsSparkSQL$$anonfun$saveToEs$1.apply(EsSparkSQL.scala:101)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
at org.apache.spark.scheduler.Task.run(Task.scala:108)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:338)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

我不知道是什么原因引起的。群集大小(RAM / CPU)是否未实现或是否存在具有大量数据的索引的特殊配置? 我确定的是,这不是一个网络问题。 ELS版本:6.2.4

3 个答案:

答案 0 :(得分:1)

我相信Spark会尝试提出您的ES群集无法处理的许多请求。 请查看此链接https://www.elastic.co/guide/en/elasticsearch/hadoop/current/configuration.html以更多地了解您向ES发送数据的方式,请查看以下内容:

  • es.batch.size.bytes
  • es.batch.size.entries
  • es.batch.write.retry.count
  • es.http.retries
  • es.http.timeout

请使用es.nodes.client.only等检查您要如何路由请求...

答案 1 :(得分:1)

我遇到了类似的问题,并且我通过更改索引的大小来解决了这个问题。 换句话说,索引的默认大小为1000。

通过更改设置来更改索引大小:“ index.mapping.total_fields.limit”:10000(例如)

答案 2 :(得分:0)

我认为您正面临这个问题,因为索引的未分配主分片因此无法连接到ES。如果有任何未分配的分片问题,您可以查看日志吗?

为了灵活性,我使用elasticsearch-head chrome插件来监控ES是否存在任何此类错误。