【资源】hbase中文文档
http://abloz.com/hbase/book.html
【简介】
(1):HBase是一个分布式的、面向列的开源数据库,一个结构化数据的[分布式存储系统]”。
(2):HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
(3):HBase利用Hadoop HDFS作为其文件存储系统;HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;HBase利用Zookeeper作为协同服务
(4):HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。
(5):此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。
架构.png【优缺点】
Hbase的优点:
1 列的可以动态增加,并且列为空就不存储数据,节省存储空间.
2 Hbase自动切分数据,使得数据存储自动具有水平scalability.
3 Hbase可以提供高并发读写操作的支持
Hbase的缺点:
1 不能支持条件查询,只支持按照Row key来查询.
2 暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉.
【访问接口】
- Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据
- HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用
- Thrift Gateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据
- REST Gateway,支持REST 风格的Http API访问HBase, 解除了语言限制
- Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计
- Hive,当前Hive的Release版本尚没有加入对HBase的支持,但在下一个版本Hive 0.7.0中将会支持HBase,可以使用类似SQL语言来访问HBase
【数据模型】
HBase不是一个关系型数据库,它需要不同的方法定义你的数据模型,HBase实际上定义了一个四维数据模型,下面就是每一维度的定义:
Table & Column Family
1:Row Key: 行键,Table的主键,Table中的记录默认按照Row Key升序排序
2:Timestamp:时间戳,每次数据操作对应的时间戳,可以看作是数据的version number
3:Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。
组成.png
Table & Region
当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions.
一个region由[startkey,endkey)表示,不同的region会被Master分配给相应的RegionServer进行管理:
-ROOT- && .META. Table
HBase中有两张特殊的Table,-ROOT-和.META.
.META.:记录了用户表的Region信息,.META.可以有多个regoin
-ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region
2016-12-22_112517.png
【其他】
1>MapReduce on HBase
在HBase系统上运行批处理运算,最方便和实用的模型依然是MapReduce
HBase Table和Region的关系,比较类似HDFS File和Block的关系,HBase提供了配套的TableInputFormat和TableOutputFormat API
2>HBase系统架构
ClientHBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信
对于管理类操作,Client与HMaster进行RPC;
对于数据读写类操作,Client与HRegionServer进行RPC
3>Zookeeper
Zookeeper中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会把自己以Ephemeral方式注册到Zookeeper中,
使得HMaster可以随时感知到各个HRegionServer的健康状态。此外,Zookeeper也避免了HMaster的单点问题
4>HMaster
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行
HMaster在功能上主要负责Table和Region的管理工作:
1. 管理用户对Table的增、删、改、查操作
2. 管理HRegionServer的负载均衡,调整Region分布
3. 在Region Split后,负责新Region的分配
4. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移
5>HRegionServer
HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。
【存储格式】
HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括上述提出的两种文件类型:
1. HFile, HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装
2. HLog File,HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File
HFile:
首先HFile文件是不定长的,长度固定的只有其中的两块:Trailer和FileInfo。
Data Block是HBase I/O的基本单元,为了提高效率,HRegionServer中有基于LRU的Block Cache机制
HLogFile:
HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息
【伪分布式搭建】
1:上传并解压tar文件
tar -xzvf hbase-0.96.tar.gz
cp -r /usr/local
2:修改配置文件(/conf/hbase-env.sh、/conf/hbase-site.xml)
hbase-env.sh中配置JAVA_HOME
export=/usr/local/java
hbase-site.xml中配置hbase的数据存储地址
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:/usr/local/hbase-0.96/hbData</value>
</property>
</configuration>
3:启动
./ start-hbase.sh
hbase-env配置.png
hbase-site配置.png
2016-12-22_124420.png
【hbase-shell简单操作】
启动之后:
./hbase
./hbase shell 进入shell操作界面
help 查看帮助
帮助内容主要看
dml(数据操纵语言 [ SELECT、UPDATE、INSERT、DELETE]) 、
ddl(数据定义语言)[ CREATE、ALTER、DROP]
例如要查看ddl中的建表语句create的帮助
help 'create'
help 'put'
... ...
【实例操作】
1:在hbase中新建一张people表,表有两个列族(info,data)
create 'people' , {NAME => 'info',VERSIONS => 3},{NAME => 'data' , VERSIONS => 1}
2:查看所有表
list
3:查看表结构
describe 'people'
4:添加数据(给info列族)
put 'people','rk0001','info:name','xiaoqiang'
5:查看数据
sacn 'people'
create.png
list.png
put.png
scan.png
同上表对应的数据库结构简图
24710352727457924.jpg
网友评论