在安装和测试HBase之前,我们有必要先了解一下HBase是什么
我们可以通过下面的资料对其有一定的了解:
HBase 官方文档中文版
HBase 深入浅出
我想把我知道的分享给大家,方便大家交流。
以下是本文的大纲:
若有不正之处,还请多多谅解,并希望批评指正。
请尊重作者劳动成果,转发请标明blog地址
https://www.cnblogs.com/hongten/p/hongten_hadoop_hbase.html
正所谓磨刀不费砍材功,下面的工具大家可以先下载备用。
环境及工具:
Windows 7 (64位)下面的虚拟机(64位):VMware-workstation-full-14.0.0-6661328.exe
Linux操作系统:CentOS-6.5-x86_64-bin-DVD1.iso
Xshell:Xshell-6.0.0101p.exe
WinSCP:从windows上面上传文件到Linux
JDK:jdk-7u67-linux-x64.rpm
zookeeper:zookeeper-3.4.6.tar.gz
hadoop:hadoop-2.5.1_x64.tar.gz
链接:https://pan.baidu.com/s/1hvdbGUh488Gl1EF2v44BIw
提取码:ncdd
Hbase: hbase-0.98.9-hadoop2-bin.tar.gz
1.Hadoop集群环境搭建
在做Hbase安装和测试之前,我们有必要把 Hadoop2集群环境搭建 好。
2.Hbase的介绍
Hadoop Database, 是一个高可靠性,高性能,面向列,可伸缩,实时读写的分布式数据库。 利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务 主要用来存储非结构化和半结构化的松散数据(列存NoSQL数据库) Column Family 列族 HBase表中的每个列都归属某个列族,列族必须作为表模式(schema)定义的一部分预先给出,如: create 'test', 'course'; 列名以列族作为前缀,每个'列族'都可以有多个列成员(column);如course:math, course:english,新的列族成语(列)可以随时按需,动态加入 权限控制,存储以及调优都在列族层面进行的; HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。 HBase体系架构 Client: 包含访问HBase的接口并维护cache来加快对HBase的访问 Zookeeper: 1. 保证任何时候,集群中只有一个master 2. 存储所有Region的寻址入口 3. 实时监控Region Server的上线和下线信息,并实时通知master 4. 存储Hbase的schema和table元数据 Master: 1. 为Region Server分配region 2. 负责Region Server的负载均衡 3. 发现失效的Region Server并重新分配其上的region 4. 管理用户对table的增删改操作 Region Server: 1. 维护region,处理对这些region的IO请求 2. 负责切分在运行过程中变的过大的region Rgion: 1. HBase自动把表水平分成多个区域(region),每个region会报错一个表里面某段连续的数据;每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阈值的时候,region就会等分两个新的region(裂变) 2. 当table中的行不断增多,就会有越来越多的region,这样一张完整的表被保存在多个Region Server上。 Memstore于storefile: 1. 一个region由多个store组成,一个sote对应一个CF(列族) 2. sotre包含位于内存中的memstore和位于磁盘的storefile写操作先写入memstore,当memstore中的数据达到某个阈值,region server会启动flashcache进程写入storefile,每次写入形成单独的一个storefile。(这样在一个region里面就会产生很多个storefile) 3. 当storefile文件的数量增长到一定阈值后,系统会进行合并(Minor, Major Compaction),在合并过程中贵进行版本合并和删除工作(Major),形成更大的storefile。 4. 当一个region所有storefile的大小和超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的region server服务器,实现负载均衡。 5. 客户端检索数据,现在memstore找,找不到再找storefile。