Hbase简介
Hbase是Hadoop Database的简称 ,Hbase项目由Powerset公司的Chad Walters和Jim Kelleman在2006年末发起,根据Google的Chang等人发表的论文“Bigtable:A Distributed Storage System for Strctured Data“来设计的。2007年10月发布了第一个版本。2010年5月,Hbase从Hadoop子项目升级成Apache顶级项目。
Hbase是分布式、面向列的开源数据库(其实准确的说是面向列族),HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,并且基于列的而不是基于行的存储模式。
HDFS为Hbase提供可靠的底层数据存储服务,MapReduce为Hbase提供高性能的计算能力,Zookeeper为Hbase提供稳定服务和Failover机制,因此我们说Hbase是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。
hbase分为三种运行模式:
- 单机模式:Hbase仅使用本地文件系统,不使用HDFS,一个独立的实例包含所有 HBase 守护进程Master、RegionServers 和 ZooKeeper,在一个持久化到本地文件系统的 JVM 中运行。
- 伪分布式模式:所有进程运行在同一个节点上,不同进程运行在不同的JVM当中,但是每个守护进程 (HMaster,HRegionServer 和 ZooKeeper) 则分别作为一个单独的进程运行,比较适合实验测试。
- 完全分布式模式:进程运行在多个服务器集群中,分布式依赖于HDFS系统,因此布署Hbase之前一定要有一个正常工作的HDFS集群
hbase集群安装
在分布式配置中,集群包含多个节点,每个节点运行一个或多个 HBase 守护进程。其中包括主备Master实例、多个ZooKeeper节点和多个RegionServer节点。
集群节点规划如下:
Node Name | Master | ZooKeeper | RegionServer |
---|---|---|---|
hadoop01 | yes | yes | yes |
hadoop02 | backup | yes | yes |
hadoop03 | backup | yes | yes |
本次部署依赖提前部署好hadoop集群,参考:https://blog.csdn.net/networken/article/details/116407042
hbase版本兼容性列表:https://hbase.apache.org/book.html#basic.prerequisites
根据官方描述,HBase 2.3.x兼容JDK8及Hadoop-3.2.x,本次使用jdk8、hbase-2.3.5及hadoop3.2.2进行部署。
hbase安装
hbase下载地址:https://archive.apache.org/dist/hbase
以下操作在3个节点上执行。
下载hbase安装包
wget https://archive.apache.org/dist/hbase/2.3.5/hbase-2.3.5-bin.tar.gz
解压安装
tar -zxvf hbase-2.3.5-bin.tar.gz -C /opt
mv /opt/hbase-2.3.5/ /opt/hbase
配置环境变量
cat > /etc/profile.d/hbase.sh <<'EOF'
export HBASE_HOME=/opt/hbase
export PATH=$HBASE_HOME/bin:$HBASE_HOME/sbin:$PATH
EOF
source /etc/profile
确认安装成功
hbase version
修改hbase配置文件
修改 hbase-env.sh,添加JAVA_HOME环境变量:
cat >> $HBASE_HOME/conf/hbase-env.sh <<EOF
export JAVA_HOME=/opt/openjdk
export HBASE_MANAGES_ZK=false
EOF
修改hbase-site.xml配置文件
cat > $HBASE_HOME/conf/hbase-site.xml<<EOF
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://mycluster:8020/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/hbase/zk</value>
</property>
</configuration>
EOF
修改regionservers配置文件
cat > $HBASE_HOME/conf/regionservers <<EOF
hadoop01
hadoop02
hadoop03
EOF
创建backup-masters文件
cat > $HBASE_HOME/conf/backup-masters <<EOF
hadoop02
hadoop03
EOF
启动集群。在 hadoop01
上节点,发出start-hbase.sh
命令。您的输出将类似于下面的输出。
[root@hadoop01 ~]# start-hbase.sh
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
running master, logging to /opt/hbase/logs/hbase-root-master-hadoop01.out
hadoop01: running regionserver, logging to /opt/hbase/logs/hbase-root-regionserver-hadoop01.out
hadoop03: running regionserver, logging to /opt/hbase/logs/hbase-root-regionserver-hadoop03.out
hadoop02: running regionserver, logging to /opt/hbase/logs/hbase-root-regionserver-hadoop02.out
hadoop02: running master, logging to /opt/hbase/logs/hbase-root-master-hadoop02.out
hadoop03: running master, logging to /opt/hbase/logs/hbase-root-master-hadoop03.out
验证进程是否正在运行。在集群的每个节点上,运行jps
命令并验证每个服务器上运行的进程是否正确。
hadoop01节点
[root@hadoop01 ~]# jps
8371 Jps
2580 ZooKeeperMain
3013 DFSZKFailoverController
2806 NameNode
2262 QuorumPeerMain
2953 DataNode
6539 HRegionServer
3580 NodeManager
3453 ResourceManager
6333 HMaster
2463 JournalNode
hadoop02节点
[root@hadoop02 ~]# jps
2160 QuorumPeerMain
2355 JournalNode
5619 HRegionServer
2676 DFSZKFailoverController
2964 ResourceManager
7124 Jps
2504 NameNode
3049 NodeManager
5771 HMaster
2620 DataNode
hadoop03节点
[root@hadoop03 ~]# jps
2323 JournalNode
5733 HMaster
5574 HRegionServer
2647 DFSZKFailoverController
2472 NameNode
7032 Jps
3036 ResourceManager
2124 QuorumPeerMain
3101 NodeManager
2590 DataNode
ZooKeeper 进程名称该HQuorumPeer进程是一个由 HBase 控制和启动的 ZooKeeper 实例。如果您以这种方式使用 ZooKeeper,则它仅限于每个集群节点一个实例,并且仅适用于测试。如果 ZooKeeper 在 HBase 之外运行,则该过程称为QuorumPeer。有关 ZooKeeper 配置的更多信息,包括将外部 ZooKeeper 实例与 HBase 一起使用,请参阅zookeeper部分。
访问HBase Web UI
HBase Web UI使用的HTTP端口Master的16010和RegionServer的16030。
如果一切设置正确,您应该能够使用 Web 浏览器连接到 Master,或辅助Master 的 UI
http://node-a.example.com:16010/
http://node-b.example.com:16010/
测试当节点或服务消失时会发生什么。
使用您配置的三节点集群,事情不会非常有弹性。您仍然可以通过杀死相关进程并查看日志来测试主 Master 或 RegionServer 的行为。