Hadoop 从Spark将大文档索引到Elasticsearch
我正在使用es hadoop连接器将RDD直接写入Elasticsearch。对于小文档,我从来没有遇到过任何问题。但现在我开始索引pdf文件。我提取元数据和原始文本,并用这些字段构建一个映射。简而言之,它看起来是这样的: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).
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。我刚试过,错误依然存在。但据我所见,尽管如此,该文档还是成功地编制了索引。我仍然想完全理解错误并修复它。