1.集群搭建
1. 前置要求:
- HBASE是用Java语言编写的,所以在安装HBASE时,必须安装jdk
- 安装HBASE是必须有hadoop平台
- HBASE和jdk的版本存在兼容性,一定注意
jdk:
hadoop:
2. 集群规划:
3. 具体搭建:
① 上传安装包(hbase-1.2.6-bin.tar.gz)
②解压:tar zxvf hbase-1.2.6-bin.tar.gz -C /application/
③配置环境变量:
export HBASE_HOME=/application/hbase-1.2.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$SQOOP_HOME/bin:$HBASE_HOME/bin
source /etc/profie #刷新配置文件
hbase version #查看是否配置成功
④修改hbase的配置文件
cd /application/hbase-1.2.6/conf
hbase-env.sh:
export JAVA_HOME=/application/jdk1.8 #配置jdk
export HBASE_MANAGES_ZK=false #配置使用自己的zookeeper
#psHBASE中必须依赖zookeeper,zookeeper作用是存储HBASE的寻址入口HBASE自带的是单机版的,所有需要开启使用自己的
hbase-site.xml:
<configuration>
<property>
<!-- 指定 hbase 在 HDFS 上存储的路径 -->
<name>hbase.rootdir</name>
<value>hdfs://zzy/hbase</value>
</property>
<property>
<!-- 指定 hbase 是分布式的 -->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!-- 指定 zk 的地址,多个用“,”分割 -->
<name>hbase.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
</configuration>
regionservers:
hadoop01
hadoop02
hadoop03
backup-masters(自行创建):
#配置备份主节点的节点
hadoop02
⑤要把 hadoop 的 hdfs-site.xml 和 core-site.xml 放到 hbase-1.2.6/conf 下
因为hadoop集群是HA模式,所以需要配置:
cp /application/hadoop-2.7.6/etc/hadoop/core-site.xml .
cp /application/hadoop-2.7.6/etc/hadoop/hdfs-site.xml .
⑥分发安装到各节点
cd /application/
scp -r hbase-1.2.6 hadoop02:$PWD
scp -r hbase-1.2.6 hadoop03:$PWD
⑦时间同步:
HBase 集群对于时间的同步要求的比 HDFS 严格,所以,集群启动之前千万记住要进行时间同步,要求相差不要超过 30s。在定时任务中配置定时更新时间。
4. 启动集群:
① 先在每一个节点zookeeper 集群:zkServer.sh start
②启动hdfs集群:start-dfs.sh
③启动hbase:start-hbase.sh(启动) / stop-hbase.sh(关闭) 最好在主节点启动,在哪个节点启动哪个节点就是hmaster。
④ 检测是否正常启动:jps
Web界面访问:http://HBASE主节点:16010
注意:如果有节点相应的进程没有启动,那么可以手动启动:
hbase-daemon.sh start master
hbase-daemon.sh start regionserver
2.集群架构
在HBASE集群中:有多个主(hmaster)、多个从(RegionServer),每一个从节点中存储的是多个Region,每一个Region,是HBASE一张表中分出来的(默认的Region大小为10G)。
集群角色介绍:
1. region:
是HBASE将一个表中的所有数据按照RowKey的不同范围进行切割的逻辑单元,每一个region负责一定范围数据的读写访问。Region由RegionServer负责管理。HBASE中的region的概念就和hdfs中的数据块的概念差不多。Region 是 HBase 表切分出来的一个分片。Region的大小在1.x版本的时候是1G,在2.X版本的时候是10G。
Region的工作机制:
当客户端发送命令(delete/put)的时候,region接收到请求的时候,首先会将数据更新到内存中,同时将操作记录到日志(追加),不论做的是什么操作,就会记录到操作日志中,为了进行数据恢复,因为region接收请求的时候,只是将数据同步到内存,如果节点一宕机则数据丢失,所以通过日志的方式进行数据恢复(或者说是持久化)。当然这个日志记录到一定大小的时候会进行切分,切分出来的叫Hfile,最后到有很多Hfile的时候,会进行日志合并,会将这些Hfile合并一个storeFile,在进行合并的时候,会将日志中的delete和put进行抵消删除(即一个put操作,如果有一个对应有一个delete操作,则这两条记录抵消,在合并的时候不会记录),最终合并出来的storefile中就会只有put操作而没有delete操作。
2. hmaster:
HBASE的主节点,负责整个集群的状态感知、负载分配、负责用户表的元数据 (schema)管理(可以配置多个用来实现 HA),只有hmaster才有权利去修改元数据。
HBase 的 HMaster 其实就算是宕机一段时间也可以正常对外提供服务的,因为在HMaster在宕机的时候,集群仍然可以进行查询但是不能进行读写。
HMaster的负载:当第一次建立表的时候,只有一个Region,然后当region的值超过1G的时候,此时HBASE的HMaster会将region进行拆分(如果是2G,一份为二,每一个是1G),拆分后的region可能不存在一个节点上。由于HBASE是搭建在hadoop之上的,所以region的副本会在hdfs操作。
hmaster的节点的上下线感知:当如果有一台Reginaservers宕机了,hmaster会自动将这个宕机节点中存储的region通过其他的副本在另外的节点上复制出来(基于hdfs的副本),当宕机的节点重新恢复的时候,hmaster又会进行负载,保证每一个Reginaservers中的region的个数大致相同,(只能保证集群的region的个数进行负载,如果region的大小不同,不能根据数据的大小进行负载)。
3.RegionServer:
HBase 中真正负责管理 Region 的服务器,也就是负责为客户端进行表数据读 写的服务器。每一台 RegionServer 会管理很多的 Region,一个 RegionServer 上面管理的所有 的region不属于同一张表。负责Region的拆分,负责和底层的HDFS的存储交互,负责StoreFile 的合并。
4. ZooKeeper
整个 HBase 中的主从节点协调,元数据的入口,主节点之间的选举,集群节点 之间的上下线感知……都是通过 ZooKeeper 来实现
5. Client
Client 包含了访问 HBase 的接口,另外 Client 还维护了对应的 Cache 来加速 HBase 的 访问,比如 Cache 的.META.元数据的信息。(缓存上一个查询的rowkey的具体位置,方便快速一次查询)。
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/193934.html