一、基础环境
软件版本
centos7 x86_64
hadoop 3.3.2
java 1.8
hbase 2.5.3
zookeeper-3.6.4-bin
机器分布
主机名 | IP | 角色 | 程序 |
n01 | 192.168.3.204 | zk、hmaster、hregionserver | hbase-2.5.3 |
n02 | 192.168.3.205 | zk、hmaster、hregionserver | hbase-2.5.3 |
n03 | 192.168.3.206 | zk、hregionserver | hbase-2.5.3 |
基础目录
mkdir /opt/module 工程目录
hdfs dfs -mkdir /user/hbase 创建hbase数据目录
依赖安装
如前面介绍,hbase是建立在hdfs基础上的分布式数据库,所以在搭建hbase前需要完成hdfs集群相关的搭建,可参考前面文章https://blog.csdn.net/weixin_42633805/article/details/129651326。
4.1. java 安装
略
4.2. zookeeper安装
略
4.3. hadoop安装
略
4.4. 无密码认证配置
略
二、安装部署
配置文件
1.1 hbase-env.sh
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre
export HBASE_HOME=/opt/module/hbase-2.5.3
export HBASE_CLASSPATH=${HBASE_HOME}/conf
export HBASE_REGIONSERVERS=${HBASE_HOME}/conf/regionservers
export HBASE_BACKUP_MASTERS=${HBASE_HOME}/conf/backup-masters
export HBASE_LOG_DIR=${HBASE_HOME}/logs
export HBASE_PID_DIR=/home/hadoop/data/tmp
export HBASE_MANAGES_ZK=false
1.2 hbase-site.xml
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://myhdfs/user/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>n01:2181,n02:2181,n03:2181</value>
</property>
<property>
<name>hbase.wal.provider</name>
<value>filesystem</value>
</property>
1.3 hdfs-site.xml
拷贝hdfs 配置
1.4 core-site.xml
拷贝hdfs配置
1.5 regionservers
n01
n02
n03
1.6 backup-masters
该文件目录中没有,需要自己创建
n02
将工程拷贝到所有节点的/opt/module 目录下
环境变量
创建hbase.sh 文件,并分发到所有机器上,执行source /etc/profile.d/hbase.sh
#cat /etc/profile.d/hbase.sh
export HBASE_HOME=/opt/module/hbase-2.5.3
export HBASE_CONF_DIR=$HBASE_HOME/conf
export HBASE_CLASS_PATH=$HBASE_CONF_DIR
export PATH=$PATH:$HBASE_HOME/bin
服务启动
n01 执行
./bin/start-hbase.sh
客户看到regionserver 分布在3台机器上,master 分布在n01,n02机器上。
![](https://i-blog.csdnimg.cn/blog_migrate/ee629c0f074a07921fcb6388c5bed26f.png)
通过jps -l 在3台机器上分别查看进程是否存在
Web访问
浏览器访问:http://192.168.3.204:16010
![](https://i-blog.csdnimg.cn/blog_migrate/5164e03ce90347051f750949012aab9a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/330c34bf1acb291cb079add23db05896.png)
hdfs上发现创建了一些基础数据文件
![](https://i-blog.csdnimg.cn/blog_migrate/730a56bdfff7aae91d0629a0d2ee220e.png)
执行hbase shell 操作
创建student 表
create 'student','name','age','sex'
![](https://i-blog.csdnimg.cn/blog_migrate/e84feefeec67249a49b2a2e35c1e1f01.png)
验证测试
master 主备切换测试
手动杀死n01上的master进程
![](https://i-blog.csdnimg.cn/blog_migrate/c64030079216ab34bcaa4f80af966484.png)
观察n02的状态变化,可以发现n02 接管了n01的角色
![](https://i-blog.csdnimg.cn/blog_migrate/68f051b50025453a032cf2f31e6609ff.png)
刷新页面
![](https://i-blog.csdnimg.cn/blog_migrate/9209a51624d2796c4df45e0343fa138b.png)
执行hbase shell 测试
访问正常
![](https://i-blog.csdnimg.cn/blog_migrate/367bad99adeb39db1121e92703462ec3.png)
三、Hbase SHELL
常见的shell 命令
命令 | 作用 |
create | 创建表 |
put | 插入或更新数据 |
scan | 扫描表并返回所有数据 |
list | 查看包含的表 |
describe | 查看表结构 |
get | 获取指定行或列数据 |
count | 统计表中数据的行数 |
delete | 删除指定行或列的数据 |
deleteall | 删除整个行或列的数据 |
truncate | 清空表中的所有数据 |
disable | 将表职位无效 |
drop | 删除表,包括数据和表结构 |
shell 命令测试
参考:https://static.kancloud.cn/liuyw/hadoop_liuyw/1685685
创建表
前面测试创建表时使用默认版本,这里使用自定义版本
create 'people',{NAME=>'info',VERSIONS=>3},{NAME=>'data',VERSIONS=>1}
![](https://i-blog.csdnimg.cn/blog_migrate/c9e052ef79d1e0fb8ae11b5d09325e9d.png)
查看表
list 或者 list 'people'
![](https://i-blog.csdnimg.cn/blog_migrate/d1d8ef51f33fb21e703548676adb7b6f.png)
查看表基本信息
![](https://i-blog.csdnimg.cn/blog_migrate/5241615d903f5a9073e84ede24f6d81f.png)
插入数据
put 'people','rk001','info:name','zhangsan'
put 'people','rk001','info:gender','female'
put 'people','rk001','info:age','18'
put 'people','rk001','data:hobby','manyplay'
![](https://i-blog.csdnimg.cn/blog_migrate/0b885fa0967c7af02ecec9c3273b39bb.png)
查看所有数据
scan 'people'
![](https://i-blog.csdnimg.cn/blog_migrate/78213f85bcba881b170c33c5ad68b063.png)
单行查出
get 'people','rk001'
![](https://i-blog.csdnimg.cn/blog_migrate/492d3882627917a40312773a475c6e11.png)
条件查询
scan 'people',{COLUMNS=>'info'} //查询列簇为info
![](https://i-blog.csdnimg.cn/blog_migrate/bde24b8e760decf5c1b00aca7e063888.png)
scan 'people',{COLUMNS=>['info','data'], filter=>"(QualifierFilter(=,'substring:a'))"} //查询列簇为info, data 并且列表示包含"a" 的信息
![](https://i-blog.csdnimg.cn/blog_migrate/c5fa8629713607bcb90e33fa27b6ad7d.png)
scan 'people',{COLUMNS=>'info',STARTROW=>'rk001',ENDROW=>'rk003'} //查询列簇为info, 范文为rk001-rk003的数据
![](https://i-blog.csdnimg.cn/blog_migrate/1ad3aa2443b24c86b52b3c26fd638025.png)
修改数据
put 'people','rk001','info:age','30' // 将rk001的age 修改为30
![](https://i-blog.csdnimg.cn/blog_migrate/fc9ea2ac298e92d6c5b22a8e62150adb.png)
查看历史版本信息
![](https://i-blog.csdnimg.cn/blog_migrate/a106a97dbb9466fd69429934b102b1f5.png)
删除
删除rk001的name信息
delete 'people','rk001','info:name'
![](https://i-blog.csdnimg.cn/blog_migrate/6333828cab9324bb99be3135214e3ae1.png)
删除一行信息
deleteall 'people','rk001'
![](https://i-blog.csdnimg.cn/blog_migrate/509ea7110343dd72cf6f8a7bb764c3ab.png)
清空表
truncate 'people'
![](https://i-blog.csdnimg.cn/blog_migrate/c80cf635b0ba2c947aa73907b264aa1e.png)
删除表
删除表前需要将表置为无效
否则会报错,如下
![](https://i-blog.csdnimg.cn/blog_migrate/2d515fbfb962abb9c74de3b486c32fc4.png)
disable 'people'
drop 'people'
list 'people'
![](https://i-blog.csdnimg.cn/blog_migrate/514f0b35f31b2bcd1546cc3e659827fa.png)
四、参考
Hbase官网 https://hbase.apache.org/book.html#_preface
看云-<Hadoop大数据开发>:https://static.kancloud.cn/liuyw/hadoop_liuyw/1685685