我正在尝试使用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
答案 0 :(得分:1)
我相信Spark会尝试提出您的ES群集无法处理的许多请求。 请查看此链接https://www.elastic.co/guide/en/elasticsearch/hadoop/current/configuration.html以更多地了解您向ES发送数据的方式,请查看以下内容:
请使用es.nodes.client.only等检查您要如何路由请求...
答案 1 :(得分:1)
我遇到了类似的问题,并且我通过更改索引的大小来解决了这个问题。 换句话说,索引的默认大小为1000。
通过更改设置来更改索引大小:“ index.mapping.total_fields.limit”:10000(例如)
答案 2 :(得分:0)
我认为您正面临这个问题,因为索引的未分配主分片因此无法连接到ES。如果有任何未分配的分片问题,您可以查看日志吗?
为了灵活性,我使用elasticsearch-head chrome插件来监控ES是否存在任何此类错误。