我正在处理事件分析,我使用hadoop处理日志并将一些结果存储在mysql中。由于日志每天都会出现,所以现在无法工作,因为存在可伸缩性问题。
我们需要显示统计每年,每月,每周,每天,每小时随着过滤能力我们的样本可以为10万用户增长,每小时使用20个网站
100000(用户)*20(唯一网站)*2(地点)*24(小时)=96000000(每天最多记录9600万条)
我们的table看起来像
事件,时间,用户,网站,地点,一些统计信息
一些查询示例如下
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)
我尝试了hadoopElasticSearch,它的插入部分似乎可以用这个来修复,我更担心的是阅读部分。聚合框架似乎给了我一些希望,但我不能按照查询1工作。如何既分组又求和又区分?如何在给定可伸缩性和性能的情况下将elasticsearch与hadoop结合使用,以满足基于olap的需求。任何帮助都将不胜感激。
2条答案
按热度按时间zwghvu4y1#
如何既分组又求和又区分
聚合可以有子聚合。
首先,组功能对应于术语聚合和(有时)顶级聚合。其次,有一个sum聚合,一个简单的stats度量聚合。最后,在本例中使用distinct是执行count(distinct),它对应于基数聚合,根据需要可以是近似的或精确的。
7) 从表中删除event\u src\u id=x(可能会删除所有96m记录)
有一个delete by query api,您可以使用它,但是要注意删除文档的百分比很高;lucene和elasticsearch并没有为此进行优化,而且由于删除数据中的标记,您将产生开销。
示例
按网站从表组中选择网站、总和(stats)、计数(distinct(user\ id))
从表中选择网站,sum(stats),count(distinct(user\ id)),其中year(time)=2009 group by website,month(time)
55ooxyrt2#
首先,我不认为使用elasticsearch进行类似olap的查询是一个好主意。我建议您使用一些类似dremel的技术(impala、tez、storm等),它们支持您指定的sql。它有一些优点,如:
您不必将数据从hadoop传输到elasticsearch。
您可以使用sql
您不必关心从elasticsearch查询答案解析json。
别误会我的意思,我喜欢elasticsearch/logstash/kibana,但我喜欢日志收集和可视化。当然可以进行一些高级查询,但它有一些局限性,这是我在个人项目中发现的。
还可以考虑使用kibana,它是elasticsearch中数据统计的一个很好的工具,您可以用它做很多事情。
以下是您要求的一些查询示例(我没有对其进行测试):
1)
2-6是相似的,使用1)中的内容和不同的过滤器,如:
7) 删除很容易