请问当结果集比较大或者bucket数量太多时,使用dateHistogram,terms进行聚合分析如何优化?
Elasticsearch | 作者 xlp | 发布于2018年02月11日 | 阅读数:5652
使用dateHistogram,terms对日志数据进行聚合分析,有两个问题想请教一下:
1、dateHistogram按天间隔,如果是计算分析几个月或者一年的数据,会导致请求超时,或者gc,这个可以用别的方式优化么。分别测试过一个月一亿条数据,以及一整年两千万条数据,前者没有问题,后者会超时或者GC?
2、terms 分组数如果很多(几千)也会出现同样的问题,我试图用partition进行优化,将请求拆分,我以为结果集会分批全部返回,只是会多花点时间,但是却都只返回第一批,且加大请求时间也没有用,用kibana dev tool和java都试过。请问是哪里用错了么?
说明一下:因为是预计算,不是请求查数据,所以没有考虑分页
贴上kibana dev tool 的请求:
GET pagelog_5/_search
{
"size" : 0,
"query" : {
"bool" : {
"must" : [
{
"range" : {
"access_date" : {
"from" : "2017-01-01",
"to" : "2017-01-02",
"include_lower" : true,
"include_upper" : true,
"boost" : 1.0
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"aggregations" : {
"dateAgg" : {
"date_histogram" : {
"field" : "access_date",
"format" : "yyyy-MM-dd",
"interval" : "1d",
"offset" : 0,
"order" : {
"_key" : "asc"
},
"keyed" : false,
"min_doc_count" : 1
},
"aggregations" : {
"url_term" : {
"terms" : {
"field" : "url",
"size" : 1000,
"min_doc_count" : 1,
"shard_min_doc_count" : 0,
"show_term_doc_count_error" : false,
"order" : [
{
"_count" : "desc"
},
{
"_term" : "asc"
}
],
"include" : {
"partition" : 0,
"num_partitions" : 10
}
}
}
}
}
}
}
1、dateHistogram按天间隔,如果是计算分析几个月或者一年的数据,会导致请求超时,或者gc,这个可以用别的方式优化么。分别测试过一个月一亿条数据,以及一整年两千万条数据,前者没有问题,后者会超时或者GC?
2、terms 分组数如果很多(几千)也会出现同样的问题,我试图用partition进行优化,将请求拆分,我以为结果集会分批全部返回,只是会多花点时间,但是却都只返回第一批,且加大请求时间也没有用,用kibana dev tool和java都试过。请问是哪里用错了么?
说明一下:因为是预计算,不是请求查数据,所以没有考虑分页
贴上kibana dev tool 的请求:
GET pagelog_5/_search
{
"size" : 0,
"query" : {
"bool" : {
"must" : [
{
"range" : {
"access_date" : {
"from" : "2017-01-01",
"to" : "2017-01-02",
"include_lower" : true,
"include_upper" : true,
"boost" : 1.0
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"aggregations" : {
"dateAgg" : {
"date_histogram" : {
"field" : "access_date",
"format" : "yyyy-MM-dd",
"interval" : "1d",
"offset" : 0,
"order" : {
"_key" : "asc"
},
"keyed" : false,
"min_doc_count" : 1
},
"aggregations" : {
"url_term" : {
"terms" : {
"field" : "url",
"size" : 1000,
"min_doc_count" : 1,
"shard_min_doc_count" : 0,
"show_term_doc_count_error" : false,
"order" : [
{
"_count" : "desc"
},
{
"_term" : "asc"
}
],
"include" : {
"partition" : 0,
"num_partitions" : 10
}
}
}
}
}
}
}
2 个回复
王庆焕 - https://discuss.elastic.co/u/wangqinghuan/
赞同来自:
2、如果真的因为bucket数量太多导致了elasticsearch请求超时,那么考虑使用Mapreduce任务进行批量数据统计分析。
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自:
聚合优化参考