一、基础环境
软件版本
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.youkuaiyun.com/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机器上。

通过jps -l 在3台机器上分别查看进程是否存在
Web访问
浏览器访问:http://192.168.3.204:16010


hdfs上发现创建了一些基础数据文件

执行hbase shell 操作
创建student 表
create 'student','name','age','sex'

验证测试
master 主备切换测试
手动杀死n01上的master进程

观察n02的状态变化,可以发现n02 接管了n01的角色

刷新页面

执行hbase shell 测试
访问正常

三、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}

查看表
list 或者 list 'people'

查看表基本信息

插入数据
put 'people','rk001','info:name','zhangsan'
put 'people','rk001','info:gender','female'
put 'people','rk001','info:age','18'
put 'people','rk001','data:hobby','manyplay'

查看所有数据
scan 'people'

单行查出
get 'people','rk001'

条件查询
scan 'people',{COLUMNS=>'info'} //查询列簇为info

scan 'people',{COLUMNS=>['info','data'], filter=>"(QualifierFilter(=,'substring:a'))"} //查询列簇为info, data 并且列表示包含"a" 的信息

scan 'people',{COLUMNS=>'info',STARTROW=>'rk001',ENDROW=>'rk003'} //查询列簇为info, 范文为rk001-rk003的数据

修改数据
put 'people','rk001','info:age','30' // 将rk001的age 修改为30

查看历史版本信息

删除
删除rk001的name信息
delete 'people','rk001','info:name'

删除一行信息
deleteall 'people','rk001'

清空表
truncate 'people'

删除表
删除表前需要将表置为无效
否则会报错,如下

disable 'people'
drop 'people'
list 'people'

四、参考
Hbase官网 https://hbase.apache.org/book.html#_preface
看云-<Hadoop大数据开发>:https://static.kancloud.cn/liuyw/hadoop_liuyw/1685685