hbase入门(一)

一、Hbase是一个开源的、分布式、面向列的存储模型

二、Hbase体系结构:

遵从简单的主从服务器架构,由HRegion Server群、Hbase Master服务器组成,Hbase Master负责管理所有的HRegion Server,通过zookeeper协调,Hbase逻辑上的表会被划分成多个Region,然后存储到Region Server群中,Hbase Master中存储的是数据到HRegion Server的映射。

1、Hbase Client使用Hbase的RPC机制与Hregion Server、Hbase Master通信,对于管理类的操作,Client与Master使用RPC通信,对于一些数据的读写操作,Client与Server通过RPC通信。

2、HMaster:

主要任务就是告诉每台HRegion Server它要维护哪些Region。

当一台新的HRegion Server登录到Master中时,Master会告诉它等待分配数据,如果一个Region死机时,Master会把它的数据标记为未分配,然后再将数据分配到其它的Server中去。

Hbase中可以启动多个HMaster来解决单点故障的问题。

3、HRegion:

当表数据超过设置值时,Hbase会自动将表划分成不同的区域,在物理上,一张表被划分成了多个块,每个块就是一个Region,我们用表名+开始/结束键来区分每个Region,一个Region会保存表里某段连续的数据,一张完整的表格是保存在多个HRegion里。

4、HRegionServer:

主要负责相应用户IO请求,向HDFS中读写数据,管理了一系列HRegion对象,每个HRegion对应table中一个region.

HRegion由多个HStore组成,每个HStore对应table中的一个Column Family的存储,HStore由两部分组成:

(1)MemStore:用户写入数据首先会放入MemStore,当一个MemStore满了以后会flush成一个StoreFile,当StoreFile数量达到一定阀值以后,会出发Compact合并操作,并将多个StoreFile合并成一个StoreFile,合并过程中会进行版本合并和数据删除,可以看出HBase其实只有增加数据,

所有的更新和删除操作都是后续的Compact操作完成的,当StoreFile大小查过设定阀值时会出发Split操作,会把当前的Region Split成两个Region,父Region下线,新分配出的两个子Region会被HMaster分配到相应的HRegion Server中去。

(2)StoreFiles

5、HLog:

每个HRegion Server中都有一个HLog对象,每次用户写数据到MemStore中的时候也会写一份数据到HLog,当HRegion Server意外终止后,HMaster会通过Zookeeper感知到,然后将HLog中不同Region的数据进行拆分,分别放到不同Region的目录下

6、HBase存储格式:

HFile:HBase中key value格式的数据的存储格式,hadoop的二进制格式文件,StoreFile的底层就是HFile。

HLogFile:wal的存储格式,物理上是hadoop中的sequence file。

7、ROOT、META表:

用户region表元数据存储在META表中,为了定位META表中各个Regions的位置,把META表中所有regions的元数据存储在ROOT表中,最后由zookeeper记录ROOT表的位置信息,客户端访问数据时首先zookeeper获得ROOT位置,然后访问ROOT获得META表位置,最后由META表中数据确定用户

数据的存放位置,而且ROOT表永远不会被切割,永远都是一个Region,而且META表的所有Region都存放在内存中。

三、HBase数据模型:

分布式数据库,类似于是一个长期存储在硬盘上、多维度的、排序的映射表,表的索引是:行关键字+列关键字+时间戳,而且数据都是字符串,没有其它类型。

四、HBase安装:

1、下载HBase,注意HBase的版本要与Hadoop版本一致,比如Hadoop2.2我安装的HBase版本是0.98.17-hadoop2,版本不一致启动的时候会报错。

2、解压,修改如下配置文件:

(1)hbase-env.sh:增加如下配置内容:

export JAVA_HOME=/export/servers/jdk1.6.0_25
export HBASE_MANAGES_ZK=true
export HBASE_HOME=/export/servers/hbase-0.98.17-hadoop2
export HADOOP_HOME=/usr/local/hadoop-2.2.0

(2)hbase-site.xml:

<configuration>
<property>
<name>hbase.master.maxclockskew</name>
<value>180000</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop-kf100.jd.com:8020/hbase</value>//注意:与hadoop namenode端口一样
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>hadoop-kf100.jd.com:6000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.157.100,192.168.157.101,192.168.157.103</value>--zookeeper数量必须是奇数
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/${user.name}/tmp/zookeeper</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>

(3)regionservers:

将子节点host添加进去,操作方法同hadoop的slaves文件

3、配置完后先启动zookeeper,然后启动hbase:

sh hbase-daemon.sh start master--启动master

sh start-hbase.sh-启动子节点的regionserver

4、配置完后在浏览器输入hadoop-kf100.jd.com:60010/master.jsp可以看见hbase的集群资源情况

原文地址:https://www.cnblogs.com/zhli/p/5288976.html