如何使用HBase?大数据存储的两个实战场景
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,适用于结构化的存储,底层依赖于Hadoop的HDFS,利用HBase技术可在廉价PCServer上搭建起大规模结构化存储集群。因此HBase被广泛使用在大数据存储的解决方案中。 为何使用HBase HBase的优点: - 列可以动态增加,并且列为空就不存储数据,节省存储空间。 - Hbase自动切分数据,使得数据存储自动具有水平scalability。 - Hbase可以提供高并发读写操作的支持。 HBase的缺点: - 不能支持条件查询,只支持按照Row key来查询。 - HBase并不适合传统的事物处理程序或关联分析,不支持复杂查询,一定程度上限制了它的使用,但是用它做数据存储的优势也同样非常明显。 因为HBase存储的是松散的数据,所以如果你的应用程序中,数据表每一行的结构是有差别的,那么可以考虑使用HBase。因为HBase的列可以动态增加,并且列为空就不存储数据,所以如果你需要经常追加字段,且大部分字段是NULL值的,那可以考虑HBase。因为HBase可以根据Rowkey提供高效的查询,所以如果你的数据(包括元数据、消息、二进制数据等)都有着同一个主键,或者你需要通过键来访问和修改数据,使用HBase是一个很好地选择。 如何使用HBase 场景一:卖家操作日志 卖家操作日志,顾名思义是用来记录商家操作的系统,从而可以保证商家可以精确查询自己的各种操作。京东有几十万的商家时时刻刻的进行着各种操作,因此卖家操作日志的特点是:数据量大、实时性强、增多查少。 我们在做卖家操作日志初期,将所有的操作日志存放在ES中,操作日志的数据量是非常大的,但尴尬的是我们当时所能申请到的ES资源有限。当把大量的数据存储到有限的ES集群中时便导致了性能的下降。在这种情况下,我们选择了只在ES集群中存储最近三个月的数据,对其提供灵活的查询,而长期的数据存储使用HBase来进行。这样的话我们便可以实现对近期操作灵活展现,对长期数据也有精确备份。 场景二:京麦消息日志的存储 京麦消息日志的存储是属于京麦筋斗云系统(用于打造京麦消息生态系统闭环)不可或缺的一部分。其中包含消息的全链路追踪以及消息的统计分析。京麦消息每天都会有几千万的消息量,如何对消息进行追踪和统计便成为了一个至关重要的问题。消息追踪要求实时性、多维度精确查询,因此我们选择将最近一周的消息日志存储在ES。统计分析要求我们有足够多的数据,因此我们在将数据存储在ES中的同时也存储在HBase中一份。最终再定期将HBase中的数据导入到京东的数据集市中,这样我们便可以很方便的对京麦消息进行统计分析。 HBase的数据结构 要使用HBase我们首先要了解HBase的数据结构: HBase会存储系列的行记录,行记录有三个基本类型的定义:Row Key、Time Stamp、Column Family。 Row Key 与NoSQL数据库一样,Row Key是用来检索记录的主键。访问HBase table中的行,只有三种方式: 通过单个Row Key访问。 通过Row Key的range全表扫描。 Row Key可以是任意字符串(最大长度是64KB,实际应用中长度一般为 10 ~ 100bytes),在HBase内部,Row Key保存为字节数组。 在存储时,数据按照Row Key的字典序(byte order)排序存储。设计Key时,要充分排序存储这个特性,将经常一起读取的行存储到一起(位置相关性)。 Column Family HBase表中每个列都必须属于某个列族,列族必须作为表模式定义的一部分预先给出(有点像关系型数据库中的列名,定义完一般情况下就不会再去修改); 列名以列族作为前缀,每个列族都可以有多个列成员。新的列族成员(也就是列)可以随后按需,动态加入。 Hbase把同一列族里面的数据存储在同一目录下,由几个文件保存。 Time Stamp 在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。 简述HBase的架构原理 (编辑:ASP站长网) |