Hadoop从入门到进阶 hbase核心概念&&集群搭建(六)

1 什么是HBASE

HBASE与mysql、oralce、db2、sqlserver等关系型数据库不同,它是一个NoSQL数据库(非关系型数据库)

Hbase的表模型与关系型数据库的表模型不同:
Hbase的表没有固定的字段定义;
Hbase的表中每行存储的都是一些key-value对
Hbase的表中有列族的划分,用户可以指定将哪些kv插入哪个列族
Hbase的表在物理存储上,是按照列族来分割的,不同列族的数据一定存储在不同的文件中
Hbase的表中的每一行都固定有一个行键,而且每一行的行键在表中不能重复
Hbase中的数据,包含行键,包含key,包含value,都是byte[ ]类型,hbase不负责为用户维护数据类型
HBASE对事务的支持很差

HBASE相比于其他nosql数据库(mongodb、redis、cassendra、hazelcast)的特点,Hbase的表数据存储在HDFS文件系统中从而,hbase具备如下特性:
1)存储容量可以线性扩展;
2)数据存储的安全性可靠性极高。

2 Hbase角色

2.1 HMaster

1)监控RegionServer;
2)处理RegionServer故障转移;
3)处理元数据的变更;
4)处理region的分配和移除;
5)在空闲时间进行数据的负载均衡;
6)通过Zookeeper发布自己的位置给客户端

2.2 RegionServer

1)负责存储Hbase的实际数据;
2)处理分配给它的Region
3)刷新缓存到HDFS;
4)维护HLog;
5)执行压缩;
6)负责处理Region分片;

2.3 组件

1)Write-Ahead logs
Hbase的修改记录,当对Habse读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有跟高的概率引起数据丢失,为了解决这个问题,数据会先写入一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以系统出现故障的时候,数据可以通过这个日志文件重建。

2)HFile
这是再磁盘上保存原始数据的实际的物理文件,是实际的存储文件

3)Store
HFile存储再Store中,一个Store对应Hbase表中的一个列族;

4)MemStore
内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存再WAL中之后,RegionServer会在内存中存储键值对;

5)Region
Hbase表的分片,Hbase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个Region。

2.4 Hbase架构

一个RegionServer可以包含多个HRegion,每个RegionServer维护一个HLog,和多个HFiles以及其对应的MemStore。RegionServer运行于DataNode上,数量可以与DataNode数量一致:
在这里插入图片描述

2.5 Hbase读流程

1)Client访问Zookeeper,从Zookeeper中获取-ROOT-表所在位置,进而找到.META.表所在的位置信息(即找到这个.META.表在那个HRegionServer上保存着)。
2)Client通过第一步中获取的ip访问.META.表所在的HRegionServer,从而读取到.META.,获取.META.表中存放的元数据。
3)Client通过元数据中存储的信息,访问对应的HRegionServer,然后扫描HRegionServer的Memstore和StoreFile来查询数据;
4)最后HRgionServer把查询到的数据响应给Client;

2.6 Hbase写数据流程

1)Client首先访问zookeeper,找到-ROOT-表,进而找到.META.表,并获取.META.表信息。
2)确定当前将要写入的数据所对应的RegionServer服务器和Region;
3)Client向该RegionServer服务器发起写入数据请求,然后RegionServer收到请求并响应;
4)Client先把数据写入到HLog,以防止数据丢失;
5)然后将数据写入到Memstore;
6)如果HLog和Memstore均写入成功,则这条数据写入成功。在此过程中,如果Memstore达到阈值,会把Memstore中的数据Flush到StoreFile中;
7)当StoreFile越来越多,会触发Compact合并操作,把过多的StoreFile合并成也给大的StoreFile。当StoreFile越来越多,Region也会越来越大,达到阈值后,会触发Split操作,将Region一份为二;
在这里插入图片描述

3 hbase 集群搭建

3.1 环境准备

node1   namenode    zookeeper        hmaster  
node2   datanode    regionserver     hmaster 
node3   datanode    regionserver
node4   datanode    regionserver

3.2 解压压缩包


#node1
tar -zxvf hbase-1.2.1-bin.tar.gz
#删除文件
rm -rf docs/

在这里插入图片描述

3.3 修改配置文件

#node1
cd /usr/local/hbase-1.2.1/conf
vim hbase-env.sh
#jdk环境
export JAVA_HOME=/usr/local/jdk1.8/
#不允许zk管理hbase实例
export HBASE_MANAGES_ZK=false
vim hbase-site.xml
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
      <name>hbase.rootdir</name>
      <value>hdfs://node1:9000/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
      <name>hbase.zookeeper.quorum</name>
      <value>node1:2181</value>
</property>
#修改启动文件
vim  regionservers
node2
node3
node4

3.4 拷贝文件

cd /usr/local
scp -r  hbase-1.2.1/  node1:/usr/local/
scp -r  hbase-1.2.1/  node2:/usr/local/
scp -r  hbase-1.2.1/  node3:/usr/local/

3.5 启动

cd /usr/local/hbase-1.2.1/bin
#哪台机器启动 哪台机器就是HMaster
./start-hbase.sh
#node2 启动 hmaster
./hbase-daemon.sh start master

3.6 访问url

http://192.168.0.38:16010/master-status

在这里插入图片描述

发布了140 篇原创文章 · 获赞 47 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_34125999/article/details/102986630
今日推荐