Table of Contents
概述
HBase是建立在Hadoop文件系统之上的分布式面向列的数据库,Hbase表是稀疏、多维度、排序的映射表。它是一个开源项目,是横向扩展的。该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式的文件系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。Hbase单表可容纳数十亿行、上百万列。
说明:三台机器的主机名分别为:bigdata.centos01、bigdata.centos02、bigdata.centos03,其中centos01上面部署活动的master和regionserver,centos02上面部署后备的master以及regionserver,centos03上部署regionserver。Hbase安装配置是基于单namenode节点服务配置。
Hbase需要依赖HDFS已经zookeeper,在安装前要确保Hadoop和zookeeper已经安装。如果没有安装Hadoop和zookeeper,请参阅:Hadoop集群搭建 和 zookeeper的配置和分布式部署 。
实现原理、运行机制
1. Hbase和传统数据库的区别和联系:
- 数据类型方面:传统关系型数据库用的是非常经典的数据模型,Hbase每个值都是未经解释的字符串
- 数据操作方面:关系型数据库定义了非常多的数据操作
- 存储模型方面:关系型数据库是基于行的,Hbase是基于列的
- 数据索引方面:关系型数据库可以针对各个不同的列,构建复杂的索引
- 数据维护方面:关系型数据库做更新操作,旧的值会被新的值覆盖掉;Hbase会保留,过了时间后台自动清除
- 可伸缩性方面:Hbase基于HDFS可以实现很好的水平扩展
2. region寻址定位(三级寻址)
第一层 | zookeeper文件 | 记录-Root-表位置信息 |
第二层 | -Root表- | 记录了.META表的Region位置信息。-Root-表只有一个Region,通过-Root-表就可以访问.META表数据 |
第三层 | .META表 | 记录了数据表的Region信息,.META表可以有多个Region,保存了Hbase中所有用户数据表Region位置信息 |
3. 运行机制
3.1 master服务器
- 管理用户对Table表的增、删、改、查操作
- 负责不同region服务器的负载均衡
- 负载调整分裂、合并后region的分布
- 重新分配故障或失效的region服务器
3.2 region服务器
用户存取数据都是和region服务器交互,每个region服务器都有一个Hlog文件(即多个region共用一个Hlog文件),Hbase的存储是以列簇为单位的,每个列簇会单独构成一个store,store写数据先写到MemStore里面,当memstore满了之后再写入StoreFile,StoreFile底层是借助HDFS以HFile文件来存储的。
- 用户写数据过程
首先会把数据写入到MemStore,同时为了保证数据的安全和可恢复性,会写HLog日志,只有HLog日志完整的写入磁盘以后,才允许返回客户端
- 用户读数据过程
由于最新的数据在MemStore中,首先会访问MemStore,如果MemStore找不到数据,再去StoreFile找
- 缓存刷新与region分裂
系统会周期性的把MemStore的数据写到磁盘的StoreFile文件中,然后清空缓存,并在Hlog写入标记。每次刷新都会生成一个新的StoreFile文件,故而一个store会有多个StoreFile文件,StoreFile文件达到一定数量之后会进行合并生成更大的StoreFile文件。当StoreFile文件合并越来越大之后,达到一个阈值后,会引发分裂操作,一个Region会分裂成两个Region,这就是Region分裂发生的地方
一、下载和配置
1. 下载
# 由于下载的Hadoop是cdh5.3.9,故而hbase也下载的是cdh5.3.9
wget http://archive.cloudera.com/cdh5/cdh/5/hbase-0.98.6-cdh5.3.9.tar.gz
2. 配置
- 修改conf/hbase-env.sh
# 配置java
export JAVA_HOME=/opt/modules/jdk8
# 不使用自带的zookeeper,默认是true
export HBASE_MANAGES_ZK=false
- 修改conf/hbase-site.xml
<!--配置hdfs的namenode节点-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://bigdata.centos01:9000/hbase</value>
</property>
<!--配置是否是分布式-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--配置zookeeper节点-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>bigdata.centos01,bigdata.centos02,bigdata.centos03</value>
</property>
- 修改conf/regionservers
# regionserver子节点
bigdata.centos01
bigdata.centos02
bigdata.centos03
- 新建修改conf/backup-masters文件,配置备用的master
# 选取centos02的master作为备用
bigdata.centos02
- 配置完之后将hbase同步到其他的两台机器
scp -r hbase-0.98.6-cdh5.3.9 <hostname>:<path>
- 集群服务启动
# 单个进程启动
# bin/hbase-daemon.sh start master
# bin/hbase-daemon.sh start regionserver
# 集群master和regionserver进程启动(需配置ssh无秘钥登录)
bin/start-hbase.sh
- 访问hbase的web监控界面
http://bigdata.centos01:60010
访问界面如下:
二、hbase命令行基本操作
- 进入命令行操作
bin/hbase shell
- 建表:create '表名', '列簇'
- 查看表:list
- 插入数据:put '表名', '行', '列簇:列名', '值'
- 查表:scan '表名'
- 删除表:drop '表名'(删除之前需要禁用disable)