es.scroll.limit和es.scroll.size有什么区别



我对这两个参数完全感到困惑,

es.scroll.size
es.scroll.limit 

我做了一些测试,还是没搞清楚。

es.scroll.limit = es.scroll.size * num_of_scrolls ???

es.scroll.sizees.scroll.limit都是在从分布式集群发出请求时传递给elasticsearch.hadoop的配置参数,例如Apache Spark for exmaple。

在阅读这两个参数之前,从文档中了解elasticsearch.hadoop是很重要的:

碎片在正在阅读Elasticsearch的信息。由于其充当源,elasticsearch hadoop将为Elasticsearch shard,或者在Apache Spark的情况下是一个Partition,即给定一个针对索引I的查询。elasticsearch hadoop将动态发现支持I的碎片数量,然后为每个在Hadoop的情况下,shard将创建一个输入拆分(确定要执行的Hadoop任务的最大数量)或Spark的情况将决定RDD最大值的分区相似

因此,我们了解到碎片的数量会影响运行的查询数量。ES团队成员james.baiera在这里也说过:

ES Hadoop使用滚动端点来收集Spark中的处理。ES Hadoop执行多重滚动请求自行处理。。。

所以集群为每个分区创建了一个滚动请求,而这个请求又是为每个碎片创建的!这些滚动中的每一个都受到上述limitsize参数的影响。

同样,根据文件:

es.scroll.size(默认50)

每个返回的结果/项目数每个请求的个人。

es.scroll.limit(默认值-1)

返回的结果/项目总数每个单独的卷轴。负值表示所有文档那根火柴应该归还。请注意,这适用于每个滚动其通常绑定到作业任务之一。因此返回的文档数为LIMIT*number_of_SCROLLS(OR TASKS)

Size表示滚动条的每个调用请求的文档数,而不是整个滚动条。

Limit指定滚动API调用的所有调用中要检索的最大文档数(还记得滚动API调用的数量与索引中的碎片数量一样多吗?)

所以现在这个计算是有意义的:

整个集群检索的文档总数=每个滚动API调用的限制(es.scroll.limit)*滚动调用的数量(索引中每个碎片一个)

当我自己尝试时,我得到了合理的结果,我查询了一个有14个碎片的索引,limit1,实际上集群提取了14个文档。

正如nefo_x在回答中所说,实际上limit也会限制size,这是唯一合理的——整个滚动API调用中的每个调用都不应该大于该滚动API调用的所有调用的整个限制,对吧?

最新更新