mdrill是阿里妈妈-adhoc-海量数据多维自助即席查询平台下的一个子项目。旨在帮助用户在几秒到几十秒的时间内,分析百亿级别的任意维度组合的数据。mdrill是一个分布式的在线分析查询系统,基于hadoop,lucene,solr,jstorm等开源系统作为实现,基于SQL的查询语法。mdrill是一个能够对大量数据进行分布式处理的软件框架。mdrill是快速的高性能的,他的底层因使用了索引、列式存储、以及内存cache等技术,使得数据扫描的速度大为增加。mdrill是分布式的,它以并行的方式工作,通过并行处理加快处理速度。
mdrill针对TB级数据量,能够仅用10台机器,达到秒级响应,数据能实时导入,可以对任意的维度进行组合与过滤。mdrill作为数据在线分析处理软件,可以在几秒到几十秒的时间,分析百亿级别的任意组合维度的数据。在阿里10台机器完成每日30亿的数据存储,其中10亿为实时的数据导入,20亿为离线导入。目前集群的总存储1000多亿80~400维度的数据。目前有阿里、腾讯、京东、联想、一号店、美团、大街网、亚信、恒隆兴等多家公司在使用。
mdrill的背景
数据越来越多,几十亿、几百亿、甚至几千亿的数据量,如何才能高效的分析? 越来越多的数据提取需求压给了数据部门,但很多都是一些重复性的劳动,数据部门疲惫不堪,提需求的数据的数据分析师也在苦苦的等待数据部门的排期,也许需要1个小时,也许需要1天,效率低下,需要一个快速的提取数据的平台,提高大家的工作效率。
mdrill 的定位
- 大数据:要数据量大,几十亿上百亿,还要省钱,普通PC就能搞定。
- 多维分析:要任意维度组合与过滤,还要对任意指标进行统计和排序
- 即席查询:要查询快,秒级响应,还要数据快,数据分钟级延迟。
- 自助提取:要随时能进行数据的查询与提取。 还要能上传自己的数据进行关联与过滤。
mdrill 的特性
- 满足大数据查询需求:adhoc每天的数据量为30亿条,随着日积月累,数据会越来越大,mdrill采用列存储,索引,分布式技术,适当的分区等满足用户对数据的实时在线分析的需求。
- 支持增量更新:离线形式的mdrill数据支持按照分区方式的增量更新。
- 支持实时数据导入:在仅有10台机器的情况下,支持每天10亿级别(高峰每小时2亿)的实时导入。
- 响应时间快:列存储、倒排索引、高效的数据压缩、内存计算,各种缓存、分区、分布式处理等等这些技术,使得mdrill可以仅在几秒到几十秒的时间分析百亿级别的数据。
- 低成本:目前在阿里adhoc仅仅使用10台48G内存的PC机,但确存储了超过千亿规模的数据。
- 全文检索模式:在mdrill的全文检索模式数据可以直接存储在hdfs中,并且以每天160亿*70维度的数据增量提供全文检索服务(注:该模式下不能进行统计,只能进行关键词匹配查询数据明细)
mdrill适合的应用(统计分析模式):
- 总数据规模在十亿到百亿,上百个维度
- 每次查询扫描的总数据量超过亿
- 想要快速的(几秒)得到统计结果
- 数据按天分布,每天单表的数据增量小于十亿(10台48G内存的机器来算)
mdrill适合的应用(全文检索模式):
- 每天百亿的增量,上百个维度
- 只进行全文检索,无统计,无排序
- 使用云梯hdfs存储和检索
- 响应时间3~10秒
生产环境中的mdrill:
- 数据量400亿+
- 单次扫描1个月30亿的记录,扫描的列数为1~12列
- 机器配置为10台48G内存,2T*10的硬盘的机器
- 根据查询条件的不同,单次查询时间在5秒~60秒之间
mdrill常见的统计功能
- 查询明细以及对明细TopN排序
- 对数据进行sum,max,min,count,avg,dist等统计
- 多列group by求sum,max,min,count以及topN排序
- 支持like,in,not in,等于,不等于,大于等于,小于等于等过滤方式
备注:由于mdrill的相关开发人员已经从阿里转战到腾讯,关于此项目的后续发展请关注腾讯Hermes(暂未开源)
参考链接:
- https://github.com/alibaba/mdrill
- http://blog.sina.com.cn/mynyannian
- http://wenku.baidu.com/view/136ff1ba856a561252d36f9e.html?re=view