一尘不染

ElasticSearch + Kibana-使用预先计算的哈希值进行唯一计数

elasticsearch

更新 :已添加

我想对我的ElasticSearch集群执行唯一计数。该集群包含约5000万条记录。

我尝试了以下方法:

第一种方法

本节中提到:

预计算哈希通常仅在非常大和/或高基数的字段上有用,因为它可以节省CPU和内存。

第二种方法

本节中提到:

除非您将Elasticsearch配置为使用doc_values作为字段数据格式,否则使用聚合和构面对堆空间的要求 非常 高。

我的属性映射

"my_prop": {
  "index": "not_analyzed",
  "fielddata": {
    "format": "doc_values"
  },
  "doc_values": true,
  "type": "string",
  "fields": {
    "hash": {
      "type": "murmur3"
    }
  }
}

问题

当我在Kibana的my_prop.hash上使用唯一计数时,收到以下错误:

Data too large, data for [my_prop.hash] would be larger than limit

ElasticSearch的堆大小为2g。对于具有400万条记录的单个索引,上述操作也将失败。

我的问题

  1. 我的配置中缺少什么吗?
  2. 我应该增加我的机器吗?这似乎不是可扩展的解决方案。

ElasticSearch查询

由Kibana产生:http://pastebin.com/hf1yNLhE

ElasticSearch堆栈跟踪

http://pastebin.com/BFTYUsVg


阅读 478

收藏
2020-06-22

共1个答案

一尘不染

该错误表明您没有足够的内存(更具体地,用于的内存fielddata)来存储来自中的所有值hash,因此您需要从堆中取出它们并将它们放在磁盘上,这意味着使用doc_values

既然你已经在使用doc_valuesmy_prop,我建议做同样的my_prop.hash(而且,不,从主字段中的设置不是由子域继承)"hash": { "type": "murmur3", "index" : "no", "doc_values" : true }

2020-06-22