HBase学习笔记
是BigTable的开源实现
1、 HBase特性
高可靠,高性能,面向列,可伸缩。
HBase–>分布式数据库–>可以用来存储非结构化和半结构化的松散数据
十亿行,百万列的级别
虽然已经有了HDFS和MapReduce,但是Hadoop主要解决大规模数据离线批处理,没有办法实现大数据实时处理需求的。
2、 HBase访问接口
提供了一个原生Java API,Shell命令,Thrift Gateway, REST Gateway
提供SQL类型接口:Pig, 数据仓库Hive
3、 HBase数据模型
HBase是一个稀疏的多维度的排序映射表,标的索引通过(行键, 列族, 列限定符, 时间戳)定位一个数据的。每一个数据都是未经解释的字符串。
物理上,所有的列族成员都一起存放在文件系统中,所以,虽然HBase描述为一个面向列的存储器,但实际更加准确的说法是它是一个面向列族的存储器。由于调优和存储都是在列族这个层次上进行的,所以最好使所有列族成员都有相同的访问模式和大小特征。
4、 区域
HBase自动把表水平划分成区域,每个区域由表中行的子集构成。每个区域由他所属的表,它所包含的第一行及其最后一行(不包括最后一行)来表示。
区域是HBase在集群上分布数据的最小单位,
5、 实现
正如HDFS和YARN是由客户端,slave,master(即HDFS的namenode,datanode,以及YARN的资源管理器和节点管理器)组成。HBase也采用相同的模型,
HBase采用master节点协调管理一个或多个regionserver。
6、 运行中的HBase
HBase内部保留名为hbase:meta的特殊目录表,他们维护着当前集群上所有区域的列表,状态和位置。Hbase:meta表表中使用区域名作为键。区域名(由所属的表名,区域的起始行,区域的创建时间,对其整体进行的MD5哈希值)组成。
7、 HBase shell
%hbase shell
hbase(main):001:0>
hbase(main):001:0>create ‘test’, ‘data’
hbase(main):001:0>list
hbase(main):001:0>put ‘test’, ‘row1’, ‘data:1’,‘value1’
hbase(main):001:0>put ‘test’, ‘row2’, ‘data:2’,‘value2’
hbase(main):001:0>get ‘test’ ‘row1’
hbase(main):001:0>scan ‘test’
>//删除表
hbase(main):001:0>disable ‘test’
hbase(main):001:0>drop ‘test’
8、 HBase和RDBMS的比较
HBase的特性:
- 没有真正的索引
行是顺序存储的,每行中的列也是,所以不存在索引膨胀的问题,而且插入性能和表的大小无关 - 自动分区
在表增长的时候,表会自动分裂成区域,并分布到可用的节点上 - 线性扩展和对于新节点的自动处理
增加一个节点,把它指向现有集群并运行regionserver。区域自动重新进行平衡,负载均匀分布 - 普通商用硬件支持
底层硬件廉价,RDBMS需要支持大量IO,因此要求昂贵的硬件 - 容错
大量节点意味着每个节点的重要性并不突出,不用担心单个节点的失效 - 批处理
MapReduce集成功能使我们可以用全并行的分布式作业根据“数据的位置”来处理他们。