1、HBase 简介:
(1)、HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统(开源数据库),
利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
(2)、HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
另一个不同的是HBase基于列的而不是基于行的模式。
(3)、HBase的特点:
海量存储:Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下, 能在几十到百毫秒内返回数据;
列式存储(列族存储):列式存储其实说的是列族存储,Hbase 是根据列族来存储数据的。列族下面可以有非常多的列,
列族在创建表的时候就必须指定;
极易扩展:Hbase 的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS);
高并发:主要是在并发的情况下,Hbase 的单个IO 延迟下降并不多。能获得高并发、低延迟的服务;
稀疏:稀疏主要是针对Hbase 列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的;
HBase架构图.png
从图中可以看出Hbase是由Client、Zookeeper、Master、HRegionServer、HDFS等几个组件组成:
1)Client:
Client包含了访问Hbase的接口,另外Client 还维护了对应的cache 来加速Hbase的访问,比如 cache 的.META.元数据的信息。
2)Zookeeper:
HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。具体如下:
通过 Zoopkeeper来保证集群中只有1个 master在运行,如果 master异常,会通过竞争机制产生新的 master提供服务;
通过 Zoopkeeper来监控RegionServer的状态,当RegionSevrer 有异常的时候,通过回调的形式通知 Master RegionServer上下线的信息;
通过 Zoopkeeper存储元数据的统一入口地址;
3)Hmaster:
master节点的主要职责如下:
为 RegionServer分配 Region;维护整个集群的负载均衡; 维护集群的元数据信息;
发现失效的Region ,并将失效的Region分配到正常的RegionServer上;当 RegionSever失效的时候,协调对应 Hlog的拆分;
功能总结:
1.监控RegionServer
2.处理RegionServer故障转移
3.处理元数据的变更
4.处理 region的分配或转移
5.在空闲时间进行数据的负载均衡
6.通过Zookeeper发布自己的位置给客户端
4)HregionServer:
HregionServer 直接对接用户的读写请求,是真正“干活 ”的节点。它功能概括如下:
管理master为其分配的Region;处理来自客户端的读写请求;负责和底层HDFS的交互,存储数据到 HDFS;
负责 Region变大以后的拆分; 负责 Storefile的合并工作 的合并工作;
功能
1.负责存储HBase的实际数据
2.处理分配给它的Region
3.刷新缓存到HDFS
4.维护Hlog
5.执行压缩
6.负责处理Region分片
5)HDFS:
HDFS为Hbase提供最终的底层数据存储服务,同时为HBase提供高可用(Hlog 存储在HDFS)的支持,具体功能概括如下:
提供元数据和表的底层分布式存储服务;
数据多副本,保证的高可靠和高可用性;
(6)、其他组件 Write-Ahead logs:
HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可设定)。
但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫Write-Ahead logFile的文件中,
然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
(7)、其它组件Region:
Hbase表的分片,HBase表会根据Rowkey值被切分成不同的region存储在RegionServer中, 在一个RegionServer中可以有多个不同的region。
(8)、其它组件Store:
HFile存储在Store中,一个Store对应HBase表中的一个列族,但是一个列族被切分后可能对应多个Store。
(9)、MemStore(内存存储):
MemStore位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegionServer会在内存中存储键值对
(10)、HFile:
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以HFile的形式存储在HDFS的。
2、HBase version的选择(尽量不要选择最新发布的version,不稳定):
官网版本:http://archive.apache.org/dist/hbase/
CDH版本:http://archive.cloudera.com/cdh5/
3、HBase表结构模型:
HBase表结构模型.png
4、HBase表数据模型:
HBase表数据模型.png
5、HBase中列簇的特点:
(1)、一张表列簇不会超过5个;
(2)、每个列簇中的个数没有限制;
(3)、列只有插入数据后才会存在;
(4)、列在列簇中是有序的;
6、HBase表和关系型数据库表结构的对比:
(1)、HBase 的列可以动态增加;数据能够自动切分;可高并发读写;而关系型数据库都不可以;
(2)、但是不支持条件查询,只支持rowkey查询;但关系型数据库支持复杂查询;
7、HBase的安装说明:
(1)、JDK1.7 以上;
(2)、Hadoop-2.5.0以上;
(3)、Zookeeper-3.4.5以上;
8、HBase分布式配置(可以去官网查找):
(1)、配置hbase-env.sh文件
export JAVA_HOME=
export HBASE_MANAGES=false //禁用hbase自带的zk
(2)、创建data/tmp目录; 配置regionservers文件;
(3)、配置hbase-site.xml文件
配置hbase-site-xml.png
9、HBase启动命令:
hbase-daemon.sh start-hbase.sh
hbase-daemons.sh stop-hbase.sh
Hbase shell
10、HBase操作命令:
(1)、通用命令:
status: 提供HBase的状态,例如,服务器的数量。
version: 提供正在使用HBase版本。
table_help: 表引用命令提供帮助。
whoami: 提供有关用户的信息。
(2)、数据定义语言 : 这些是关于HBase在表中操作的命令。
create: 创建一个表。
list: 列出HBase的所有表。
disable: 禁用表。
is_disabled: 验证表是否被禁用。
enable: 启用一个表。
is_enabled: 验证表是否已启用。
describe: 提供了一个表的描述。
alter: 改变一个表。
exists: 验证表是否存在。
drop: 从HBase中删除表。
drop_all: 丢弃在命令中给出匹配“regex”的表。
Java Admin API: 在此之前所有的上述命令,Java提供了一个通过API编程来管理实现DDL功能。在这个org.apache.hadoop.hbase.client包
中有HBaseAdmin和HTableDescriptor 这两个重要的类提供DDL功能。
(3)、数据操纵语言:
put: 把指定列在指定的行中单元格的值在一个特定的表。
get: 取行或单元格的内容。
delete: 删除表中的单元格值。
deleteall: 删除给定行的所有单元格。
scan: 扫描并返回表数据。
count: 计数并返回表中的行的数目。
truncate: 禁用,删除和重新创建一个指定的表。
Java client API: 在此之前所有上述命令,Java提供了一个客户端API来实现DML功能,CRUD(创建检索更新删除)操作更多的是通过编程,
在org.apache.hadoop.hbase.client包下。 在此包HTable 的 Put和Get是重要的类。