elasticsearch,apache-spark,Hadoop,elasticsearch,Apache Spark" /> elasticsearch,apache-spark,Hadoop,elasticsearch,Apache Spark" />

Hadoop 从Spark将大文档索引到Elasticsearch

Hadoop 从Spark将大文档索引到Elasticsearch,hadoop,elasticsearch,apache-spark,Hadoop,elasticsearch,Apache Spark,我正在使用es hadoop连接器将RDD直接写入Elasticsearch。对于小文档,我从来没有遇到过任何问题。但现在我开始索引pdf文件。我提取元数据和原始文本,并用这些字段构建一个映射。简而言之,它看起来是这样的: val fileData = sc.binaryFiles(inputPath) .map(f => myFunc(f, extraData)) .filter(f => !f.isEmpty).

我正在使用es hadoop连接器将RDD直接写入Elasticsearch。对于小文档,我从来没有遇到过任何问题。但现在我开始索引pdf文件。我提取元数据和原始文本,并用这些字段构建一个映射。简而言之,它看起来是这样的:

val fileData = sc.binaryFiles(inputPath)
                 .map(f => myFunc(f, extraData))
                 .filter(f => !f.isEmpty).cache
                 .saveToEs("/" + index + "/" + docName)
我用5个相当小的pdf文件试过了,大小在100kb到1mb之间。对于未来,我计划索引任意大小的文件(尽管只提取原始文本)。因此,即使是10mb或100mb的文件也应该无错误地进行索引。但即使是小的子集,我也会得到这个错误:

ERROR NetworkClient: Node [Connection refused] failed (:9200); selected next node
我试图增加es.batch.size.bytes,但到目前为止没有成功

我是否缺少其他设置,或者如何设置集群,使其在索引较大文档时不会抛出错误


编辑:我在一个节点上运行ES2.1,5个碎片,1个副本。连接器是elasticsearch-hadoop-2.2.0-m1,Spark是1.5.1版。

不确定它是否有用,但我会从该链中删除
.cache
,然后重试
cache
方法返回
DataFrame。此.type
,而不是
DataFrame
它在原始代码中不应该是问题,因为原始代码稍微复杂一些。实际上,我从缓存的过滤器上创建了多个新RDD,并将这些新RDD发送到Elasticsearch。我刚试过,错误依然存在。但据我所见,尽管如此,该文档还是成功地编制了索引。我仍然想完全理解错误并修复它。