Elasticsearch中的分析

mta*_*riq 4 hadoop aggregate olap-cube elasticsearch

我正在使用Analytic of events,我使用hadoop处理日志并将一些结果存储在Mysql中.由于日志不断出现,因此可伸缩性问题现在无法正常工作.

我们需要显示每年,每月,每周,每天,每小时的统计数据以及过滤功能我们的样本可以为10万用户增长,每个小时每小时使用20个网站
100,000(用户)*20(独特网站)*2(位置)*24 (小时)= 96,000,000(每天最多9600万条记录)

我们的表看起来像
event_src_id,时间,用户,网站,位置,一些统计数据

一些查询示例是

1) select website, sum(stats), count(distinct(user_id)) from table group by website;
2) select website, sum(stats), count(distinct(user_id)) from table where YEAR(Time) = 2009 group by website, MONTH(Time);
3) select website, sum(stats), count(distinct(user_id)) from table group by website where event_src_id=XXXXXXXXXXX;
4) select website, sum(stats), count(distinct(user_id)) from table group by website where time > 1 jan 2014 and time <=31 jan 2014;
5) select website, location, sum(stats), count(distinct(user_id)) from table group by website, location;
6) select website, sum(stats) as stats_val from table group by website order by stats_val desc limit 10;
   select location, sum(stats) as stats_val from table group by location order by stats_val desc limit 10;
7) delete from table where event_src_id=XXXXXXXXXXX; (may delete all 96M records)
Run Code Online (Sandbox Code Playgroud)

我试过Hadoop弹性搜索,它似乎插入部分可以修复,我更担心阅读部分.聚合框架似乎给了一些希望,但我不能按照查询一个工作.如何分组,总和和同时分明?我如何才能最好地将Elasticsearch与Hadoop一起使用,并为基于OLAP的quires提供可扩展性和性能.任何帮助将不胜感激.

Rad*_*šej 5

首先,我不认为使用ElasticSearch进行类似OLAP的查询是一个好主意.我建议你使用一些类似Dremel的技术(Impala,TEZ,Storm等),它们支持你指定的sql.它有一些优点,如:

  • 您不必将数据从Hadoop传输到ElasticSearch.
  • 你可以使用sql
  • 您不必关心从ElasticSearch查询答案中解析json.

不要误会我的意思,我喜欢ElasticSearch/Logstash/Kibana,但是对于日志收集和可视化.当然可以进行一些高级查询,但它有一些我在个人项目中发现的限制.

另外考虑使用Kibana,它是ElasticSearch中数据统计的一个很好的工具,你可以用它做很多事情.

以下是您请求的一些查询示例(我没有测试过):

1)

{
  "aggs": {
    "website": {
      "terms": {
        "field": "website"
      },
      "aggs": {
        "sum_stats": {
          "sum": {
            "field": "stats"
          },
          "aggs": {
            "distinct_user": {
              "cardinality": {
                "field": "user_id",
                "precision_threshold": 100
              }
            }
          }          
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

2-6是相似的,使用来自1)的东西与不同的过滤器,如下所示:

{
  "aggs": {
    "your_filter": {
      "filter": {
        "term": {"event_src_id" : "XXXXXXXXXXX"}
      }
    },
    "aggs": {
      "website": {
        "terms": {
          "field": "website"
        },
        "aggs": {
          "sum_stats": {
            "sum": {
              "field": "stats"
            },
            "aggs": {
              "distinct_user": {
                "cardinality": {
                  "field": "user_id",
                  "precision_threshold": 100
                }
              }
            }
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

7)删除很容易

    "query" : {
        "term" : { "event_src_id" : "XXXXXXXXXXX" }
    }
}
Run Code Online (Sandbox Code Playgroud)