完全分布式高可用集群(HBase)
HBase
Apache HBase是一个分布式、可扩展、大数据存储的Hadoop数据库。当我们需要对大数据进行随机、实时的读/写访问时,可以使用HBase。这个项目的目标是在通用硬件集群上托管非常大的表——数十亿行X数百万列。Apache HBase是一个开源、分布式、版本化的非关系数据库,模仿了Chang等人的谷歌Bigtable:A distributed Storage System for Structured Data。正如Bigtable利用谷歌文件系统提供的分布式数据存储一样,Apache HBase在Hadoop和HDFS之上提供了类似Bigtable的功能。
本文部署HBase集群的时候,需要依赖于Hadoop集群和Zookeeper集群。
一、准备工作
HBase版本
- hbase-2.5.8-bin.tar.gz
安装准备
Hadoop安装
参考: 搭建Hadoop3.x完全分布式集群(CentOS 9)
Zookeeper安装
参考:搭建Zookeeper完全分布式集群(CentOS 9)
时钟同步
在HBase集群中,各个节点之间的时间同步非常重要,如果各个节点的时间不一致,那么会出现写入数据的时间戳不一致或某些操作的顺序发生错误等问题,从而影响HBase集群的稳定性和正确性。因此,在部署HBase之前,需要为集群的各节点配置时间同步。
1)安装Chrony
在虚拟机hadoop1上运行如下命令安装时间同步工具Chrony。
1 | yum install chrony –y |
2)启动Chrony服务
在虚拟机hadoop1上运行如下命令启动时间同步工具Chrony的服务。
1 | systemctl start chronyd |
3)查看Chrony服务运行状态
在虚拟机hadoop1、 hadoop2和hadoop3查看Chrony服务的运行状态。
1 | systemctl status chronyd |
4)配置Chrony服务端
在虚拟机hadoop1执行vi /etc/chrony.conf
命令编辑Chrony的配置文件chrony.conf
,将Chrony默认使用的时钟源指定为中国国家授时中心,并且允许处于任意网段的Chrony客户端可以通过虚拟机hadoop1的Chrony服务端进行时间同步。
1 | server ntp.ntsc.ac.cn iburst |
5)配置Chrony客户端
分别在虚拟机hadoop2和虚拟机hadoop3执行vi /etc/chrony.conf
命令编辑Chrony的配置文件chrony.conf
,指定Chrony客户端进行时间同步的Chrony服务端。
1 | server hadoop1 iburst |
6)重新启动Chrony服务
在虚拟机hadoop1上运行如下命令重新启动时间同步工具Chrony的服务。
1 | systemctl restart chronyd |
7)查看时钟源
在虚拟机hadoop1上运行如下命令查看Chrony服务端和客户端的时钟源。
1 | chronyc sources -v |
二、安装HBase
- 上传安装包
将hbase-2.5.8-bin.tar.gz上传到hadoop1的/software
目录。
- 安装HBase
以解压方式安装HBase,将HBase安装到/opt目录。
1 | tar -zxvf /software/hbase-2.5.8-bin.tar.gz -C /opt |
- 配置HBase系统环境变量
在虚拟机hadoop1执行vi /etc/profile
命令编辑系统环境变量文件profile,在该文件的底部添加如下内容。
1 | export HBASE_HOME=/opt/hbase |
执行source /etc/profile
命令初始化系统环境变量使添加的HBase系统环境变量生效。
三、配置HBase
虚拟机 | HMaster | HRegionServer |
---|---|---|
hadoop1 | √ | |
hadoop2 | √ | |
hadoop3 | √ |
- 配置文件介绍
所有配置文件都位于 conf 目录中,需要保持集群中每个节点同步。
backup-masters
默认情况下不存在。文件中添加运行备用HMaster进程的虚拟机主机名或IP。
hadoop-metrics2-hbase.properties
用于连接HBase Hadoop的Metrics2框架
hbase-env.cmd和hbase-env.sh
用于Windows和Linux/UNIX环境的脚本来设置HBase的工作环境,包括Java、Java选项和其他环境变量的位置。
hbase-policy.xml
它是一个RPC服务器使用的默认策略配置文件,根据文件配置内容对客户端请求进行授权决策。仅在启用HBase安全性时使用。
hbase-site.xml
该文件指定覆盖HBase默认的配置选项。
配置项 | 说明 |
---|---|
hbase.tmp.dir | 本地文件系统的临时目录,默认目录在/tmp目录下,该目录会在系统重启后清空,所以需要注意该参数的值 默认值为:j a v a . i o . t m p d i r / h b a s e − {java.io.tmpdir}/hbase-java.io.tmpdir/hbase−{user.name} |
hbase.rootdir | RegionServers使用的目录,指定了HBase的数据存放目录,该路径需要完全限定(full-qualified),比如需要指定一个9000端口的HDFS文件系统下的/hbase目录,应写成:hdfs://namenode.example.org:9000/hbase 默认值:${hbase.tmp.dir}/hbase |
hbase.cluster.distributed | 是否分布式 默认值:false |
hbase.zookeeper.quorum | 用逗号分隔的ZooKeeper集群中的服务器列表 |
hbase.zookeeper.property.dataDir | 存放HBase自己管理的zookeeper的属性数据信息的目录 |
zookeeper.znode.parent | 指定了HBase在ZooKeeper上使用的节点路径 |
hbase.wal.provider | 配置WAL的实现方式: asyncfs:默认值。自hbase-2.0.0(hbase-1536、hbase-14790)以来新增。它构建在一个新的非阻塞dfsclient实现上。 filesystem:这是hbase-1.x版本中的默认设置。它构建在阻塞的DFSClient上,并以经典的DFSClient管道模式写入副本。 multiwal:由多个asyncfs或filesystem实例组成 |
log4j.properties
通过log4j进行HBase日志记录的配置文件。修改这个文件中的参数可以改变HBase的日志级别。
regionservers
包含HBase集群中运行的所有Region Server主机列表(默认情况下,这个文件包含单个条目localhost)。该文件是一个纯文本文件,每行是一个主机名或IP地址
- 配置HBase
1)修改HBase配置文件hbase-env.sh
HBase的配置文件hbase-env.sh
主要用于配置HBase的运行环境。进入虚拟机hadoop1的/opt/hbase/conf
目录,执行vi hbase-env.sh
命令编辑配置文件hbase-env.sh
,在文件的尾部添加如下内容。
1 | export HBASE_MANAGES_ZK=false |
HBASE_MANAGES_ZK 该配置项为true时,由HBase自己管理Zookeeper;否则,启动独立的Zookeeper
2)修改HBase配置文件hbase-site.xml
HBase的配置文件hbase-site.xml主要用于配置HBase的参数。进入虚拟机hadoop1的/opt/hbase/conf
目录,执行vi hbase-site.xml
命令编辑配置文件hbase-site.xml
,将该文件的<configuration>
标签中的默认配置替换为如下内容。
1 | <property> |
3)修改HBase配置文件regionservers
HBase的配置文件regionservers用于通过主机名指定运行Regionserver的计算机。由于这里在虚拟机hadoop2和hadoop3运行HRegionserver进程,执行 vi regionservers
命令编辑配置如下内容。
1 | hadoop2 |
4)分发HBase安装目录
为了便捷地在虚拟机hadoop2和hadoop3安装和配置HBase,这里通过scp命令将虚拟机hadoop1的相关配置同步到两台主机。
1 | scp -r /opt/hbase root@hadoop2:/opt/ |
四、启动与测试
- 启动
在hadoop1主机运行如下命令启动集群。
1)启动hadoop
1 | start-all.sh |
2)启动zookeeper
1 | cd /opt/xshell |
3)启动hbase
1 | start-hbase.sh |
查看进程
1
2cd /opt/xshell
sh xjps.sh
- shell测试
进入hbase shell交互界面,查看集群状态、命名空间列表、表列表,最后退出交互界面
1 | status |
- 关闭集群
在hadoop1主机运行如下命令关闭集群。
1 | stop-hbase.sh #关闭HBase集群 |