发文章
一、HBase介绍
1.1 HBase 的起源
HBase 的原型是 Google 的 BigTable 论文,受到了该论文思想的启发,目前作为 Hadoop 的子项目来开发维护,用于支持结构化的数据存储。
官方网站:http://hbase.apache.org
– 2006 年 Google 发表 BigTable 白皮书
– 2006 年开始开发 HBase
– 2008 年北京成功开奥运会,程序员默默地将 HBase 弄成了Hadoop 的子项目
– 2010 年 HBase 成为 Apache 顶级项目
– 现在很多公司二次开发出了很多发行版本,你也开始使用了。
1.2 HBase 的角色
1.2.1 HMaster
功能:
1)监控RegionServer
2)处理RegionServer故障转移
3)处理元数据的变更
4)处理region的分配和转移
5)在空闲时间进行数据的负载均衡
6)通过zookeeper发布自己的位置给客户端
1.2.2 RegionServer
功能:
1)负责存储HBase的实际数据
2)处理分配给它的Region
3)刷新缓存到HDFS
4)维护HLog
5)执行压缩
6)负责处理Region分片
组件:
1) Write-Ahead logs
HBase 的修改记录,当对 HBase 读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
2) HFile
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。
3) Store
HFile 存储在 Store 中,一个 Store 对应 HBase 表中的一个列族。
4)MemStore
顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在 WAL中之后,RegsionServer 会在内存中存储键值对。
5)Region
Hbase 表的分片,HBase 表会根据 RowKey 值被切分成不同的region 存储在 RegionServer 中,在一个 RegionServer 中可以有多个不同的 region。
1.3 HBase 的架构
HBase 一种是作为存储的分布式文件系统,另一种是作为数据处理模型的 MR 框架。因为日常开发人员比较熟练的是结构化的数据进行处理,但是在 HDFS 直接存储的文件往往不具有结构化,所以催生出了 HBase 在 HDFS 上的操作。如果需要查询数据,只需要通过键值便可以成功访问。
一张图秒动HBase
架构图如下图所示:
HBase 内置有 Zookeeper,但一般我们会有其他的 Zookeeper 集群来监管 master 和regionserver,Zookeeper 通过选举,保证任何时候,集群中只有一个活跃的 HMaster,HMaster与 HRegionServer 启动时会向 ZooKeeper 注册,存储所有 HRegion的寻址入口,实时监控HRegionserver 的上线和下线信息。并实时通知给 HMaster,存储HBase 的 schema 和 table元数据,默认情况下,HBase 管理 ZooKeeper 实例,Zookeeper 的引入使得 HMaster 不再是单点故障。一般情况下会启动两个 HMaster,非 Active 的 HMaster 会定期的和 Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个 HMaster 反而增加了 Active HMaster 的负担。一个 RegionServer 可以包含多个 HRegion,每个 RegionServer 维护一个 HLog,和多个 HFiles以及其对应的 MemStore。RegionServer 运行于 DataNode 上,数量可以与 DatNode 数量一致,
请参考如下架构图:
二、HBase的部署和使用
2.1 部署
2.1.1 Zookeeper 正常部署
首先保证 Zookeeper 集群的正常部署,并启动之:
$ ~/modules/zookeeper-3.4.5/bin/zkServer.sh start
2.1.2 Hadoop 正常部署
Hadoop 集群的正常部署并启动:
$ ~/modules/hadoop-2.7.2/sbin/start-dfs.sh
$ ~/modules/hadoop-2.7.2/sbin/start-yarn.sh
2.1.3 HBase 的解压
解压 HBase 到指定目录:
$ tar -zxf ~/softwares/installations/hbase-1.3.1-bin.tar.gz -C ~/modules/
2.1.4 HBase 的配置文件
需要修改 HBase 对应的配置文件。
hbase-env.sh 修改内容:
export JAVA_HOME=/home/admin/modules/jdk1.8.0_121
export HBASE_MANAGES_ZK=false
2.1.5 hbase-site.xml 修改内容:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://linux01:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98 后的新变动,之前版本没有.port,默认端口为 60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>linux01:2181,linux02:2181,
linux03:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/admin/modules/zookeeper-3.4.5/zkData</value>
</property>
</configuration>
regionservers:
linux01
linux02
linux03
2.1.6
2.1.7
2.1.8
2.1.9
2.2
2.2.1
1)
2)
3)
2.2.2
1)
2)
3)
4)
5)
6)
7)
8)
9)
10)
11)
2.3
2.3.1
2.3.2
2.4
2.4.1
2.4.2
2.4.3
2.5
2.5.1
2.5.2
2.5.3
2.6
2.6.1
2.6.2
2.7
2.8
2.9
2.9.1
2.9.2
2.10
2.11
三、HBase的优化
3.1
3.2
3.3
3.4
3.5