Hbase详解(下),
接上片http://blog.csdn.net/a_eternal/article/details/77450189
列族
在关系型数据库中没有列族的概念,在HBase中,列族是一行中一个或多个列的集合,就是一行数据的一部分。列族需要在表创建时就定义好,并且不能修改的太频繁,数量也不能太多,在以前的HBase实现中有少量已知的缺陷,导致列族的数量最多只能使用几十个。列族中的列的数量是没有限制的。
如图所示,列族中可以包含多个列,一个表中的某个列的定位方式就成为了meta:size 这种方式。我们就称之为列限定符,说白了,列限定符即指一个列族中的某个列。
单元格
一个单元格是行、列族和列限定符的结合,也就是说,通过这三个值(也称之为坐标)来唯一确定一个单元格。其中包含值和创建这个值的时间(即时间戳)。单元格中的值与关系型数据库不同的是,其如果没有值的话,就为空,什么也不写,也不占用底层物理存储。关系型数据中则需要存储null。
时间戳就是写入某个单元格中的数据时候的具体时间(从1970年1月1日开始到当前系统时间的一个毫秒值),用来表示一个单元格中的数据的新旧。
数据模型
逻辑模型:有序映射的映射集合
存储模型:列式存储
物理模型:面向列族
HBase增删改查内部流程
HBase写流程和更新流程
HBase读流程
.HBase删流程
HBase shell
详见HBaseShell常用命令.docx文档
HBase java api
使用eclipse开发Hbase 程序
先将Hbase 安装目录下的lib目录中的所有jar包导入到项目中
只需创建普通的java应用程序即可,需要在项目中创建conf目录,并将hbase-site.Xml文件放进其中(此时hbase-site.xml文件中的hbase.rootdir配置项的值应为hdfs://master:8020/hbase的形式,这种方式不影响使用HDFS的HA,但是不能直接配置成HDFS中的HA的方式)。再通过Configure Build Path将conf目录添加为ClassFloder即可。
同时还需要在Windows中配置hosts文件,以方便访问Hbase服务器。
具体语法
详见代码和HBase JAVA API.docx文档
HBase的HA之backupMaster
HBase的HA与HDFS的HA类似,也是通过多Master程序来实现的,其中有一个Master为主提供服务的Master,剩下的master对活跃的Master进行备份,习惯称之为backupMaster,也称之为slave类型的Master。主master与slave类型的master之间不需要通过其他额外的方式进行数据共享。当主Mater挂掉时,会自动切换到slave类型的Master上(需要几秒钟时间)。(HBase的HA机制可以在HBase的master已有数据时进行操作)
实现方式
在habse的conf目录里添加backup-masters文件,其中填入需要作为Master的机器即可,在本例中,其内容如下(其中每个主机名占一行):
master
slave1
注意:实际操作发现在master机器上的conf目录下创建此文件即可,无需在所有机器上都添加此文件,同样的,启动时需要在master机器上启动Hbase程序。
如果不配置此文件,Hbase本身也是支持多Master的,只需要在多台机器上启动master即可。启动命令如下:
# sh hbase-daemon.sh start master
检测方式
在master机器上正常启动Hbase即可,启动后在slave1机器上通过jps命令可以看到slave1机器上也开启了master进程。
启动命令:
# sh start-hbase.sh
正常启动的web信息
Ø Master机器上的web界面如下图所示:
Ø Slave1机器上的web界面如下图所示:
杀死slave1上的master进程后的web信息
使用如下两种方式皆可杀死slave1机器上的Hbase 的master进程
1. 直接杀死进程:
Kill -9 master进程的端口号
1. 使用hbase自带的命令关闭master进程
sh hbase-deamon.sh stop master
[0-2) 包前不包后
64K