本文介绍大数据技术中流行的非关系型数据库HBase的安装,操作系统:Ubuntu24.04
安装Zookeeper
安装HBase前需要先安装Zookeeper,HBase使用Zookeeper作为其分布式协同服务,存储了HBase集群的元数据信息,并提供了分布式锁、保障系统高可用等功能。Zookeeper在Hbase中的主要作用如下:
(1)Master节点:
Master选举与主备切换。Master节点启动时选举与主备切换;
提供分布式一致锁。保证数据写入的事务性,表的删除,新建,更新需要维护全局锁;
(2)RegionServer节点
实现RegionServer节点的高可用管理。每个RegionServer启动时都会在ZK上注册,然后Master节点会去监控这个znode,若RegionServer节点宕机,Master节点会监听到;
RegionServer负载均衡管理。RegionServer节点Region的迁移、合并、分裂需要Master节点和RegionServer节点参与。ZooKeeper是Master和RegionServer之间的协调节点,做中间状态管理。
(3)维护管理HBase相关元数据信息
Zookeeper中meta-region-server节点维护hbase的meta表所在的节点信息,这个表存储着Hbase集群所有region的相关信息,包括region所在RegionServer节点,region的rowkey范围,以及region所在表名,列值等信息;
1. 下载Zookeeper
下载地址 https://zookeeper.apache.org/ ,找到下载链接
选择稳定版安装,随后用xftp上传
注意,你需要先搭建hadoop集群,并确认集群的IP地址
我原来的服务器配置是:
Hadoop101 192.168.179.140
Hadoop102 192.168.179.141
Hadoop103 192.168.179.142
2. 解压文件、修改文件夹名称、修改文件权限
在hadoop101中执行以下代码:
cd /home/youka
sudo tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz -C /usr/local #解压
cd /usr/local/
sudo mv apache-zookeeper-3.8.4-bin zookeeper # 将文件夹名改为zookeeper(原来那个太长了,很难写)
sudo chown -R hadoop ./zookeeper # 修改文件权限
备注:①tar是解压命令,具体使用方法参考
linux压缩解压缩文件tar命令_tar zxf-CSDN博客;
②mv命令时指move,可以移动或修改文件夹;③chown 是指change ower,用于修改文件或目录的所有者,参考
https://blog.csdn.net/weixin_41951954/article/details/128630329
3. 配置 zoo.cfg文件
在主节点hadoop101中执行以下代码:
cd /usr/local/zookeeper/conf
ls
sudo mv zoo_sample.cfg zoo.cfg #修改zoo_sample.cfg 名字,我这边是直接改名使用,有的教程是复制一份
sudo vim zoo.cfg
进入zoo.cfg文件后修改和添加以下内容
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
server.1=hadoop101:2888:3888
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
由于zookeeper安装目录默认没有data和logs文件夹,我们需要手工创建。
cd /usr/local/zookeeper
sudo mkdir data
sudo mkdir logs
给这两个文件夹添加权限
chmod 777 data
chmod 777 logs
4. 配置环境变量
执行下列代码
vim ~/.bashrc
在vim中添加内容
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
保存退出,然后让环境变量生效
source ~/.bashrc
5. 将ZooKeeper发布到其他服务器
Hadoop102和hadooop103节点还没有安装zookeeper,我们直接把hadoop101上面装好的zookeeper目录远程拷贝过去,在hadoop101上执行下列命令
执行
scp -r /usr/local/zookeeper root@hadoop102:/usr/local
scp -r /usr/local/zookeeper root@hadoop103:/usr/local
注意:我用的是root用户配置的hadoop集群,所以可以直接传,如果是非root用户上传会导致权限不够,解决办法是给所有集群的/usr/local增加权限,这里大家可以参考Bug | scp命令显示Permission denied! - Unirithe - 博客园
或者我们使用更好的命令:xsync
xsync /usr/local/zookeeper
6. 修改node1和node2节点的配置
zookeeper的启动需要在每个节点输入命令,所以需要在hadoop101、hadoop102、hadoop103上都配置zookeeper的环境变量。配置与hadoop101相同,因此我们又可以使用xsync大法
xsync ~/.bashrc
并在各个节点上让配置生效
source ~/.bashrc
(2)将配置文件中的myid改为不相同的值,在三台虚拟机上执行下列命令:
cd /usr/local/zookeeper/data
vim myid
在hadoop101里写1 hadoop102里写2 hadoop103里写3
保存后退出
7. ZooKeeper集群启动
启动集群需要在每台zookeeper服务器上都运行命令:
zkServer.sh start
集群启动成功,查看各个结点的状态
zkServer.sh status
关闭Zookeeper
zkServer.sh stop
注意:如果集群无法正常启动,可能有以下问题:myid配置不正确、防火墙未开放端口、8080端口占用。如果以上问题都无法解决,可以将每一个zoo.cfg文件进行修改,对应每一台结点上server.i的值修改为0.0.0.0:2888:3888。例如,hadoop101修改如下:
server.1=0.0.0.0:2888:3888
server.2=hadoop101:2888:3888
server.3=hadoop102:2888:3888
三台结点均需要修改。
我们发现每次都要在三台机器上启动Zookeeper很麻烦,我们可以写一个脚本,在一台机器上启动三台服务。
cd /usr/local/zookeeper/bin
vim zkp
添加如下内容:
#!/bin/bash
for host in hadoop101 hadoop102 hadoop103
docase $1 in"start"){echo " "echo "--------------- 启 动 zookeeper ---------------"echo "------------ $host zookeeper -----------"ssh $host "source ~/.bashrc; /usr/local/zookeeper/bin/zkServer.sh start"};;"stop"){echo " "echo "--------------- 关 闭 zookeeper ---------------"echo "------------ $host zookeeper -----------"ssh $host "source ~/.bashrc; /usr/local/zookeeper/bin/zkServer.sh stop"};;"status"){echo " "echo "-------------- 查看zookeeper状态 --------------"echo "------------ $host zookeeper -----------"ssh $host "source ~/.bashrc; /usr/local/zookeeper/bin/zkServer.sh status"};;esac
done
随后给文件赋予权限
sudo chmod +x zkp
进入目录,启动
zkp start
zkp status
安装HBase
安装完Zookeeper后,我们正式进入HBase的安装
参考:
https://blog.csdn.net/linghaowoneng/article/details/130552766
https://blog.csdn.net/qq_51246603/article/details/129101644
https://blog.csdn.net/qq_63519278/article/details/134467429
1. 下载HBase
下载地址 https://hbase.apache.org/downloads.html ,找到下载链接
我这里下的是HBase2.5.8版本,你可以结合自己需求下载,但需要注意的是要和hadoop兼容,具体兼容规则见
https://hbase.apache.org/book.html#basic.prerequisites
将安装包用xftp上传
2. 解压文件、修改文件夹名称、修改文件权限
cd /home/youka
sudo tar -zxvf hbase-2.5.8-bin.tar.gz -C /usr/local #解压
cd /usr/local/
sudo mv hbase-2.5.8 hbase # 将文件夹名改为hbase(原来那个太长了,很难写)
sudo chown -R hadoop ./hbase # 修改文件权限
3. 配置环境变量
执行下列代码
vim ~/.bashrc
在vim中添加内容
export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HBASE_HOME/bin
保存退出,然后让环境变量生效
source ~/.bashrc
4. 配置hbase-env.sh文件
配置hbase-env.sh文件,位于Hbase安装目录/conf/,执行下列命令:
cd /usr/local/hbase/conf
vim hbase-env.sh
在vim中添加内容
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 #目录要换成自己jdk所在目录
export HBASE_MANAGES_ZK=false
export HBASE_PID_DIR=/usr/local/hbase/pids
HBASE_MANAGES_ZK设置为true,则使用HBase自带的Zookeeper进行管理,只能实现单机模式,常用于测试环境,不能用于生产环境;设为false,启动独立的Zookeeper。由于我使用的是独立的Zookeeper,所以设置为false
5. 配置hbase-site.xml文件
配置hbase-site.xml文件,位于Hbase安装目录/conf/:
cd /usr/local/hbase/conf
vim hbase-site.xml
发现hbase-site.xml已经有一些基本的配置标记了:
在vim中将<configuration></configuration>里的内容增加(没有的标记)或者替换(已经有的标记):
<property>
<!--启用分布式集群--><name>hbase.cluster.distributed</name><value>true</value></property><property>
<!-- HBase的根目录在HDFS上的路径--><name>hbase.rootdir</name><value>hdfs://hadoop101:8020/hbase</value></property>
<property><!-- ZooKeeper的主机名或IP地址列表,用逗号分隔--><name>hbase.zookeeper.quorum</name><value>hadoop101:2181,hadoop102:2181,hadoop103:2181</value>
</property>
注意:上述配置hdfs的客户端路径需要根据自己的路径进行修改!!!!!(我的是8020端口,这个配置是在hdfs里自己配置的,不同人不一样,可能是9000端口)
6. 配置regionservers
配置hbase-site.xml文件,在regionservers文件中添加HBase的节点,类似hadoop中的hadoop102 hadoop103,一行一个
vim regionservers
在vim中去掉localhost,添加内容
hadoop101
hadoop102
hadoop103
7. 将HBase发布到其他服务器
可以用scp命令,这里使用简单好用的xsync
xsync /usr/local/hbase
8. 启动和停止HBase服务
在master节点机器进行 启动和停止 HBase命令为:
注意:启动和关闭Hadoop、Zookeeper和HBase的顺序是:
启动Hadoop → 启动Zookeeper → 启动HBase
关闭HBase → 关闭Zookeeper → 关闭Hadoop
启动:
start-all.sh #启动hadoop,在hadoop101上执行
zkServer.sh start #启动ZooKeeper,在hadoop101、hadoop102、hadoop103执行。
start-hbase.sh #启动HBase,在hadoop101上执行
停止:
stop-hbase.sh #停止HBase,在hadoop101上执行
zkServer.sh stop #停止ZooKeeper,在hadoop101、hadoop102、hadoop103执行
stop-all.sh #停止hadoop,在hadoop101上执行
但是注意到我们已经把Zookeeper启动写成了脚本,所以启动可以只在hadoop101输入:
start-all.sh
zkp start
start-hase.sh
HBase Web 管理网页,浏览器输入
http://hadoop101:16010 ,验证hadoop101状态和各个Region Servers状态
http://hadoop102:16030 ,验证hadoop102状态
http://hadoop103:16030 ,验证hadoop103状态
发现16030有问题,16010也只显示一个,其实是我们hbase-site没有配置正确
vim hbase-site.xml
在vim中将<configuration></configuration>里的内容增加:
<property><name>hbase.wal.provider</name><value>filesystem</value>
</property>
现在hbase-site.xml的内容变成这样了:
随后,将配置文件继续分发给集群
xsync hbase-site.xml
随后,重新启动集群。如果大家在停止hbase的时候出现一直stopping的话,参考stop-hbase.sh关闭不了,一直处于等待状态。_stophbasesh一直处于等待状态-CSDN博客进行操作。
hbase-daemon.sh stop master
stop-hbase.sh
start-hbase.sh
集群正常启动
子结点状态正常