腾讯实时分析平台Hermes介绍

腾讯大数据最近做了几件事,上线了一个官方网站http://data.qq.com/,将TDW(腾讯大数据库仓库)开源了,封闭的企鹅难得开放了一回。大数据网站上有一些资料,我看到一个叫Hermes爱马仕的系统挺有意思的,今天介绍下。

关于实时分析系统我前面写个几篇文章分析,包括《实时分析系统(HIVE/HBASE/IMPALA)浅析》《MPP DB 是 大数据实时分析系统 未来的选择吗?》《一套数据,多种引擎(impala/Hive/kylin)》《一套数据,多种引擎续---两种数据格式(Parquet/ORCfile)浅析》有兴趣的可以看看,为了解决实时分析的问题,主要分析的是MPP架构的软件,核心思路是通过MPP扫描技术来加快查询。腾讯的Hermes系统,是开源的lucene演变而来,主要用的是搜索和索引技术,所以hermes也叫实时检索分析平台。这个是另外一个思路,可以值得看看。

详细的Hermes的介绍,可以看下本文最后参考资料。主要讲讲Hermes有特点的几个东西:

1、核心是存储的设计, 通过对数据结构的重新组织,结合分析系统的特点,实现嵌套列存储,充分避开随机读,采用块读取+位图计算大幅度降低耗时弊病,使大数据的统计分析计算耗时缩短至秒级;在词条文件中采用字典排序,并在此基础上实现前缀压缩;在序列文件中采用递增排序,并对序列号采用可变长类型,有效压缩存储空间,便于计算位图的构建;

2、列式存储.

3、基于单个实例数据的分析处理,datasource主要包含两类数据:用户导入的数据(位图文件)以及源数据(索引文件),内核主要根据用户请求逻辑处理索引文件以及位图文件。内核示意如下:

4、整个数据对应多份,按照不同规则均匀分布在各个分析实例中,数据的merge服务在其中的一个分片中进行,每次请求将根据机器负载情况选择负载轻的作为merge服务器。

Hermes和开源的solr,elasticsearch又有什么不同?

solr、es的使用特点如下:

1. 源自搜索引擎,侧重搜索与全文检索。

2. 数据规模从几百万到几千万不等,数据量过亿的集群特别少。 Ps:有可能存在个别系统数据量过亿,但这并不是普遍现象(就像oracle的表里的数据规模有可能超过hive里一样,但需要小型机)。

hermes:的使用特点如下:

1. 一个基于搜索引擎技术的海量数据实时检索分析平台。侧重数据分析。

2. 数据规模从几亿到几万亿不等。最小的表也是千万级别。

在腾讯12台机器,就可以处理每天350亿的数据(每条数据1kb左右),每台30T左右,数据可以保存一个月之久。

solr\es 更偏重于为小规模的数据提供全文检索服务;hermes则为大规模的数据仓库提供索引支持,为大规模数据仓库提供即席分析的解决方案,并降低数据仓库的成本,hermes数据量更“大”。

定位和数据规模的不同导致了hermes与solr、es的对索引使用方式有着本质的区别。下面从大数据的视角来阐述,为什么hermes更适合做大索引。

solr、es的索引严重依赖物理内存:

1. 一级跳跃表是完全load在内存中的,除了需要消耗很多内存,首次打开索引的加载速度会特别慢,在solr\es中的索引是一直处于打开状态的,不会频繁的打开与关闭;这种模式会制约一台机器的索引数量与索引规模,通常一台机器固定负责某个业务的索引。

2. 排序和统计(sum,max,min),是通过遍历倒排表,将某一列的全部值都load到内存里,然后基于内存数据进行统计即使一次查询只会用到其中的一条记录,也会将整列的全部值都load到内存里,台浪费资源,首次查询的性能太差。数据规模受物理内存限制很大,索引规模上千万后OOM是常事。

3. 索引存储在本地硬盘,出现异常后,因为数据要恢复,copy的时间要太久。

4. 支持master/slave模式,但是跟传统mysql数据库一样,集群规模并没有特别大的。

这种模式处理集群规模受限外,每次扩容的数据迁移将是一件非常痛苦的事情,数据迁移时间太久。

5. 倒排检索即使某个词语存在数据倾斜,因数据量比较小,也可以将全部的doclist都读取过来(比如说男、女),这个doclist会占用较大的内存进行cache,当然在数据规模较小的情况下占用内存不是特别多,查询命中率很高,会提升检索速度,但是数据规模上来后,这里的内存问题越来越严重。

6. Merger server只能是一个,制约了查询的节点数量;数据不能进行动态分区,数据规模上来后单个索引太大。

Hermes的索引特点如下:

1. 大部分的索引处于关闭状态,只有真正用到索引才会去打开;一级跳跃表采用按需load,并不会load整个跳跃表,用来节省内存和提高打开索引的速度。Hermes经常会根据业务的不同去动态的打开不同的索引,关闭那些不经常使用的索引,这样同样一台机器,可以被多种不同的业务所使用,机器利用率高。

2. 排序和统计并不会使用数据的真实值,而是通过标签技术将大数据转换成占用内存很小的数据标签,占用内存是原先的几十分之一。另外不会将这个列的全部值都load到内存里,而是用到哪些数据load哪些数据,依然是按需load。不用了的数据会从内存里移除。

3. 索引存储在hdfs中,理论上只要hdfs有空间,就可以不断的添加索引,索引规模不在严重受机器的物理内存和物理磁盘的限制。

4. 采用yarn进行进程管理,数据在hdfs中,集群规模和扩容都是一件很easy的事情。

5. 如果某个词语存在数据倾斜,则会与其他条件组合进行跳跃合并(参考doclist的skiplist资料)。

6. 采用多级的merger server;数据可以根据业务的不同,采用不同的分区方式。

参考资料:

1、关于hermes与solr,es的定位与区别 http://user.qzone.qq.com/165162897/2

2、Hermes实时检索分析平台 http://data.qq.com/article?id=817

原文发布于微信公众号 - 大数据和云计算技术(jiezhu2007)

原文发表时间:2014-12-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

详解Linux运维工程师必备技能

本人是 Linux 运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧。 说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工...

42410
来自专栏大数据挖掘DT机器学习

关于海量数据处理分析的经验总结

笔者在实际工作中,有幸接触到海量的数据处理问题,对其进行处理是一项艰巨而复杂的任务。原因有以下几个方面: 一、数据量过大,数据中什么情况都可能存在。如果说有10...

3457
来自专栏一枝花算不算浪漫

[Java面试一]面试复习大纲.

3459
来自专栏Java职业技术分享

阿里如何实现秒级百万TPS?搜索离线大数据平台架构解读

导读:搜索离线数据处理是一个典型的海量数据批次/实时计算结合的场景,阿里搜索中台团队立足内部技术结合开源大数据存储和计算系统,针对自身业务和技术特点构建了搜索离...

1380
来自专栏Java帮帮-微信公众号-技术文章全总结

面试重点复习大纲

给Java新手的一些建议-面试指南 面试重要知识点复习大纲 一、Java基础部分 (笔试与面试都会有的) 1.数组中的排序问题(笔试或者机试,前者可能性...

3363
来自专栏Timhbw博客

《Pro Git》学习笔记连载(一.起因)

2016-11-1619:39:45 发表评论 299℃热度 《Pro Git》这本书可谓是学习进阶Git的最好材料了,之所以阅读这本书,是因为虽然用Git,...

30611
来自专栏Java架构

Java程序员从阿里、京东面试回来,这些面试题你会吗?

最近有很多朋友去目前主流的大型互联网公司面试(阿里巴巴、京东-美团),面试回来之后会发给我一些面试题。有些朋友轻松过关拿到offer,但是有一些是来询问我答案的...

1082
来自专栏开源项目

码云周刊 | 面试之前,或许该高效率地学点干货!

一周热门资讯回顾 1、程序员多大年纪算高龄,届时该何去何从? ? 随着年龄的增长,程序员会相对难以保持技能更新。许多人宁愿留在自己的舒适区,不冒任何风险。即使...

2796
来自专栏北京马哥教育

Linux运维工程师的十个基本技能点

本人是Linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧! 说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具。...

37513
来自专栏杨建荣的学习笔记

一个跨平台数据迁移的方案优化

如果有一套环境,业务优先级很高,服务器的服役时间比我工作时间都长,现在需要迁移到X86平台,而且经过评估,如果能够升级数据库的软件版本,可以使用到更多的特...

2984

扫码关注云+社区