大数据之HBase基础
文章目录
- 前言
- 一、HBase基础简介
- (一)基础介绍
- (二)应用场景
- (三)特点
- 二、数据模型
- (一)行键(row key)
- (二)列
- (三)列族(Column Family)
- (四)列名(Column Qualifier)
- (五)版本号
- (六)时间戳
- 三、HBase相关shell操作
- 四、Java API介绍
- 总结
前言
#博学谷IT学习技术支持#
本篇文章主要介绍HBase的基础,数据模型、相关shell命令以及Java API,详情如下。
一、HBase基础简介
(一)基础介绍
- HBase是BigTable的开源系统,其建立在HDFS的基础之上,提供高可靠性、高性能、列存储、可伸缩以及实时读写NoSQL的数据库系统;
- 主要存储结构化和半结构化的松散数据,只支持单行事务,不支持复杂的事务,HBase的数据查询很简单,不支持join等复杂操作,查询数据时只能通过主键rowkey和主键的range来检索数据。
- 与Hadoop相同,HBase主要依靠横向扩展,通过增加廉价的服务器来增加存储和数据处理能力,节点越多,存储和处理能力越好。
(二)应用场景
HBase的应用场景有很多,主要由以下几种:
- 对象存储,不少的头条类的新闻、网页、图片等数据都存储在HBase之中
- 时序数据,主要依靠HBase的openTSDB模块
- 推荐画像
- 时空轨迹,主要是轨迹,气象网格之类的数据,在一些具有大数据量的车联网企业中,数据也是存储在HBase之中
- Cube OLAP,kylin的一个cube分析工具,底层的数据就是存储在HBase中
- 消息/订单,在电信、银行领域,不少的订单查询底层的数据存储
- Feeds流,典型的应用就是朋友圈类型的应用,用户可以随时进行内容发布,点赞和评论
(三)特点
HBase的特点主要有以下几点:
- 强一致性读写,HBase不是最终一致性,而是强一致性,所以HBase非常适合执行高速计数器聚合等任务。
- Region自动分块,HBase表通过Region分布在集群的每个节点上,随着数据的增加,Region会进行拆分和重新分布。
- RegionServer故障自动转移。
- Hadoop/HDFS集成,HBase底层将HDFS作为其分布式文件系统,同时也支持MapReduce计算引擎。
- HBase具有简单易用的Java API和Thrift/REST API。
- 支持Cache块缓存和Bloom过滤器进行大容量查询优化。
二、数据模型
在HBase中,数据存储在有行有列的表中,HBase的表中主要由以下几部分组成:
(一)行键(row key)
- HBase的每一行由一个row key和一个或多个列组成,列的值与值对应的列、row key相关联;
- 行存储时按照row key的字典序排序,设计row key时尽量让相关的行存储在一起
(二)列
HBase的列由列族(Column Family)和列名(Column Qualifier)组成,列的表示方式为“列族:列名”,例如“C1:UserID”
(三)列族(Column Family)
- 列族将一列及其列值组织在一起
- 每个列族都有数据如何被压缩等存储属性
- 表中的每一行都有相同的列族
- 建议将同一类型的列放置在一个列族中
- 不建议设置太多列族,列族过多的话存在一定的性能问题
(四)列名(Column Qualifier)
- 列族中包含很多列名,可以为存储的数据提供索引
- 不同列族中可以存在相同列名的列,但是同一列族中的列名不能重复
- 列族在创建表后已经固定,列名不做限制,存储数据时再指定对应的列名
(五)版本号
- 每条数据都可以由多个版本,默认是3,添加相同row key的数据时,HBase不会进行覆盖,而是进行追加,通过版本号进行区分,过早版本的数据会在执行Major Compaction时删除。
(六)时间戳
- 每条数据都有对应的时间戳,往HBase中添加数据时,时间戳默认为当前操作的时间,也可以人为指定该条数据的时间戳
- 不同版本的数据按照时间倒序排序,即最新的数据排在前面