HBase 配置
我接触的第一个 非关系型数据库 就是 HBase ,有关它的更多概念我这里就不说了。本文关注的是它的搭建、配置、使用。
环境介绍
软件版本如下:
Program | Version | URL |
---|---|---|
System | CentOS-7-x86_64-Minimal-1810 | TUNA Mirrors |
JAVA | jdk-8u211-linux-x64.tar.gz | Oracle |
Hadoop | hadoop-2.6.0.tar.gz | Apache Archive |
ZooKeeper | zookeeper-3.4.5.tar.gz | Apache Archive |
HBase | hbase-1.2.0-bin.tar.gz | Apache Archive |
关于版本的问题,我这里使用的环境并不是官方推荐的组合。在官方文档上面有关 Hadoop 不同版本与 HBase 的兼容性有介绍,可以看这里
在 Hadoop 2.6.x 中的 Hadoop 2.6.0 版本下运行 HBase 可能会导致集群故障和数据丢失,请使用 Hadoop 2.6.1+ 版本
目标
- 完成 HBase 单机模式配置
- 完成 HBase 分布模式配置
- HBase 数据的导出/导入
基础环境配置
参考 Hadoop HA 搭建 目前已完成 Hadoop HA 环境搭建
HostName | Function | IP | |
---|---|---|---|
master | DataNode/NameNode/ResourceManager | 192.168.66.128 | |
slave1 | DataNode/NameNode/JobHistoryServer | 192.168.66.129 | |
slave2 | DataNode/ResourceManager | 192.168.66.130 |
下载解压
首先下载,解压 HBase
1 | curl -O http://archive.apache.org/dist/hbase/1.2.0/hbase-1.2.0-bin.tar.gz |
系统环境变量
配置 HBase 环境变量,只对当前用户生效
1 | vi ~/.bash_profile |
添加以下内容
1 | export HBASE_HOME=/usr/local/src/hbase-1.2.0 |
使其生效
1 | source ~/.bash_profile |
测试是否配置成功
1 | hbase version |
输出以下信息说明配置成功
1 | HBase 1.2.0 |
hbase-env
把 JAVA_HOME 写进 HBase 环境变量
1 | vi /usr/local/src/hbase-1.2.0/conf/hbase-env.sh |
添加以下内容
1 | export /usr/local/src/jdk1.8.0_211/ |
单机模式
hbase-site.xml单机模式
打开主配置文件
1 | vi /usr/local/src/hbase-1.2.0/conf/hbase-site.xml |
将光标放在第一行,输入以下命令清空配置文件
1 | :.,$d |
写入以下内容,配置来自 HBase Doc v1.2
1 | <configuration> |
运行单机模式
1 | start-hbase.sh |
查看进程是否在运行
1 | [root@master ~]# jps |
到这里单机模式就配置完成了
分布式模式
hbase-site.xml分布式模式
1 | vi /usr/local/src/hbase-1.2.0/conf/hbase-site.xml |
将光标放在第一行,输入以下命令清空配置文件
1 | :.,$d |
写入以下内容,配置来自 HBase Doc v1.2
1 |
|
regionservers
修改集群节点信息配置文件
1 | vi /usr/local/src/hbase-1.2.0/conf/regionservers |
清空所有内容,写入以下内容
1 | master |
拷贝Hadoop配置
因为我 Hadoop 使用了 ZooKeeper 高可用模式, HBase 在没有 Hadoop 配置的情况下会找不到 HDFS 的地址。所以需要将配置拷贝到它的目录。
1 | cp $HADOOP_HOME/etc/hadoop/core-site.xml $HBASE_HOME/conf/ |
集群同步配置
将配置文件同步到集群中的其他机器中去
1 | scp -r /usr/local/src/hbase-1.2.0 slave1:/usr/local/src/ |
参考 HBase配置-系统环境变量 在其他机器中也设置好系统环境变量
运行分布式模式
在运行之前要先启动 Hadoop ,启动 Hadoop 的命令根据你自己的环境而定
1 | start-hbase.sh |
使用 jps
查看正在运行的进程是否存在 HMaster
和 HRegionServer
1 | [root@master ~]# jps |
WEB端
http://master:16010
HBase Shell
启动 HBase Shell
1 | hbase shell |
如果出现以下报错
1 | SLF4J: Class path contains multiple SLF4J bindings. |
是因为 HBase
自带的 Jar
包和 Hadoop
的包有冲突,删除冲突包即可
接下来开始创建 数据库/表 插入数据。注意,创建表的时候如果不指定数据库,表就会被放进 default
表中
表结构如下:
Row Key | inside | outside | ||
---|---|---|---|---|
name | age | slang | zh | |
1 | tom | 3 | cat | mao |
2 | jerry | 2 | rat | laoshu |
1 | create_namespace 'test' --创建数据库 |
1 | TABLE |
查看表结构
1 | desc 'test:emp' |
1 | Table test:emp is ENABLED |
插入数据
1 | put 'test:emp', '1', 'inside:name', 'tom' |
扫描表
1 | scan 'test:emp' |
1 | ROW COLUMN+CELL |
删除表数据之前要先禁用
1 | disable 'test:emp' --禁用表 |
退出 HBase Shell
1 | quit |
导入导出数据
使用 HBase
自带的类 导出 二进制格式文件
如果不加
file://
就会导出到HDFS
上面去,如果带了数据库名一定要加''
不然导出的数据是空白。
1 | hbase org.apache.hadoop.hbase.mapreduce.Export `test:emp` file:///root/emp_out |
1 | part-m-00000 _SUCCESS |
之前导出文件后一直找不到,结果是因为我启用的
Hadoop HA
把这个任务分配给了别的机器,所以不在master
上面。上 http://master:8088 看看也能知道是谁在运行。
删除表,为导入数据做准备
1 | hbase shell |
1 | disable 'test:emp' --禁用表 |
导入之前导出的数据
注意你的
MapReduce
任务会被分配到那台机器上运行,文件要放对位置。
1 | hbase org.apache.hadoop.hbase.mapreduce.Import `test:emp` file:///root/emp_out |
参考
Apache HBase ™ Reference Guide Version 1.2.12
博客园@huanlegu0426 - hadoop2.5.1+hbase1.1.2安装与配置
CSDN@jjshouji - hbase 1.2.6 安装
CSDN@疯子. - 大数据系列之数据库Hbase知识整理(三)Hbase的表结构,基本操作,元数据表meta
Stack Overflow@Nanda - How to import/export hbase data via hdfs (hadoop commands)
CSDN@Data_IT_Farmer - Hbase表两种数据备份方法-导入和导出示例
CSDN@weixin_4065234 - Hbase数据库的常用操作命令