【问题标题】:Elasticsearch Aggregation Broken after upgrade to 1.7.3升级到 1.7.3 后 Elasticsearch 聚合损坏
【发布时间】:2016-01-20 20:47:29
【问题描述】:

在升级到 1.7.3 之前它可以工作,但现在它告诉我“数据对于 [Gender] 来说太大了。我运行了

curl -XGET localhost:9200/_nodes/stats/indices/fielddata?fields=*

它产生了

{
    {"fielddata":{"memory_size_in_bytes":642066528,"evictions":0,
    "fields":{"Markers":{"memory_size_in_bytes":196538816},
     "RegistrationDate":{"memory_size_in_bytes":101759288},
     "Abbreviation":{"memory_size_in_bytes":185815224},
     "Gender":{"memory_size_in_bytes":52988320},
     "Birthdate":{"memory_size_in_bytes":104956384},
     "buildNum":{"memory_size_in_bytes":8496}
     }
}

性别只是一个角色,怎么会长到这么大?

阅读https://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html 似乎表明它不应该那么大。它只有 M、F、U 的值。有什么想法吗?

标记

nested:  UncheckedExecutionException[org.elasticsearch.common.breaker.CircuitBreakingException: [FIELDDATA] Data too large, data for [Gender] would be larger than limit of [633785548/604.4mb]];

【问题讨论】:

  • 你能确认它是CircuitBreakingException吗?能否也添加消息的最后一部分,即...would be larger than limit of...

标签: elasticsearch aggregation


【解决方案1】:

您可能会遇到CircuitBreakingException。主要原因是您的堆几乎已满,并且没有足够的内存来服务请求。这并不一定意味着 Gender 值占用了整个内存,只是 ES 无法使用剩余的可用内存加载 Gender 字段所需的所有字段数据。

默认情况下,如果没有为 fielddata 缓存设置特定限制并且默认情况下没有设置限制,则不会发生 fielddata 驱逐(在您的输出中提示 "evictions":0)。因此,您应该尝试将indices.fielddata.cache.size 设置为相对值(例如 10%)或绝对值(例如 3GB)。

您可以在elasticsearch.yml 文件(在每个节点上)中设置它并重新启动您的节点或使用动态执行此操作

curl -XPUT localhost:9200/_cluster/settings -d '{
    "persistent" : {
        "indices.fielddata.cache.size" : "20%"
    }
}'

请注意,设置过低的值会对您的集群产生负面影响,因为会有很多驱逐,并且必须经常重建字段数据缓存。因此,您可能需要进行一些试验,直到找到正确的值。

【讨论】:

  • 我有一台 8GB 的​​专用 ES 机器。我正在为 indices.fielddata.cache.size 尝试 4GB 并一直工作直到它崩溃。
  • 我能够降到原始错误消息中的 600mb 值状态。性能很难说。我注意到性能从 1.7.2 下降到 1.7.3。感谢@Val 的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 2016-09-14
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多