内容简介:我接触的第一个 非关系型数据库 就是 HBase ,有关它的更多概念我这里就不说了。本文关注的是它的搭建、配置、使用。软件版本如下:关于版本的问题,我这里使用的环境并不是官方推荐的组合。在官方文档上面有关 Hadoop 不同版本与 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
curl -O http://archive.apache.org/dist/hbase/1.2.0/hbase-1.2.0-bin.tar.gz tar xf hbase-1.2.0-bin.tar.gz -C /usr/local/src/
系统环境变量
配置 HBase 环境变量,只对当前用户生效
vi ~/.bash_profile
添加以下内容
export HBASE_HOME=/usr/local/src/hbase-1.2.0 PATH=$PATH:$HBASE_HOME/bin
使其生效
source ~/.bash_profile
测试是否配置成功
hbase version
输出以下信息说明配置成功
HBase 1.2.0 Source code repository git://asf-dev/home/busbey/projects/hbase revision=25b281972df2f5b15c426c8963cbf77dd853a5ad Compiled by busbey on Thu Feb 18 23:01:49 CST 2016 From source with checksum bcb25b7506ecf5d62c79d8f7193c829b
hbase-env
把 JAVA_HOME 写进 HBase 环境变量
vi /usr/local/src/hbase-1.2.0/conf/hbase-env.sh
添加以下内容
export /usr/local/src/jdk1.8.0_211/
单机模式
hbase-site.xml单机模式
打开主配置文件
vi /usr/local/src/hbase-1.2.0/conf/hbase-site.xml
将光标放在第一行,输入以下命令清空配置文件
:.,$d
写入以下内容,配置来自 HBase Doc v1.2
<configuration> <property> <name>hbase.rootdir</name> <value>file:///root/standalone/hbase</value> <!-- 设置储存目录 --> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/root/standalone/zookeeper</value> <!-- ZooKeeper目录 --> </property> </configuration>
运行单机模式
start-hbase.sh
查看进程是否在运行
[root@master ~]# jps 10082 HMaster 10346 Jps
到这里单机模式就配置完成了
分布式模式
hbase-site.xml分布式模式
vi /usr/local/src/hbase-1.2.0/conf/hbase-site.xml
将光标放在第一行,输入以下命令清空配置文件
:.,$d
写入以下内容,配置来自 HBase Doc v1.2
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hbase.zookeeper.quorum</name> <value>master,slave1,slave2</value> <!-- 集群主机的 hostname --> <description>The directory shared by RegionServers. </description> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/export/zookeeper</value> <description>Property from ZooKeeper config zoo.cfg. The directory where the snapshot is stored. </description> </property> <property> <name>hbase.rootdir</name> <value>hdfs://nscluster:8020/hbase</value> <!-- 注意这里要和你 Hadoop hdfs-site.xml 配置中的 fs.defaultFS 设置相同 --> <description>The directory shared by RegionServers. </description> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> <description>The mode the cluster will be in. Possible values are false: standalone and pseudo-distributed setups with managed Zookeeper true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh) </description> </property> </configuration>
regionservers
修改集群节点信息配置文件
vi /usr/local/src/hbase-1.2.0/conf/regionservers
清空所有内容,写入以下内容
master slave1 slave2
拷贝Hadoop配置
因为我 Hadoop 使用了 ZooKeeper 高可用模式, HBase 在没有 Hadoop 配置的情况下会找不到 HDFS 的地址。所以需要将配置拷贝到它的目录。
cp $HADOOP_HOME/etc/hadoop/core-site.xml $HBASE_HOME/conf/ cp $HADOOP_HOME/etc/hadoop/hdfs-site.xml $HBASE_HOME/conf/
集群同步配置
将配置文件同步到集群中的其他机器中去
scp -r /usr/local/src/hbase-1.2.0 slave1:/usr/local/src/ scp -r /usr/local/src/hbase-1.2.0 slave2:/usr/local/src/
参考 HBase配置-系统环境变量 在其他机器中也设置好系统环境变量
运行分布式模式
在运行之前要先启动 Hadoop ,启动 Hadoop 的命令根据你自己的环境而定
start-hbase.sh
使用 jps
查看正在运行的进程是否存在 HMaster
和 HRegionServer
[root@master ~]# jps 11538 HMaster 10692 DataNode 10884 NodeManager 10517 JournalNode 11221 DFSZKFailoverController 12008 Jps 11657 HRegionServer 10795 ResourceManager 10446 QuorumPeerMain 10574 NameNode
WEB端
HBase Shell
启动 HBase Shell
hbase shell
如果出现以下报错
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/src/hbase-1.2.0/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.6.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.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]
是因为 HBase
自带的 Jar
包和 Hadoop
的包有冲突,删除冲突包即可
接下来开始创建 数据库/表 插入数据。注意,创建表的时候如果不指定数据库,表就会被放进 default
表中
表结构如下:
Row Key | inside | outside | ||
---|---|---|---|---|
name | age | slang | zh | |
1 | tom | 3 | cat | mao |
2 | jerry | 2 | rat | laoshu |
create_namespace 'test' --创建数据库 create 'test:emp', 'inside', 'outside' --在test库中创建emp表 list_namespace_tables 'test' --查看test中的表
TABLE emp 1 row(s) in 0.0130 seconds
查看表结构
desc 'test:emp'
Table test:emp is ENABLED test:emp COLUMN FAMILIES DESCRIPTION {NAME => 'inside', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} {NAME => 'outside', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 2 row(s) in 0.0410 seconds
插入数据
put 'test:emp', '1', 'inside:name', 'tom' put 'test:emp', '1', 'inside:age', '3' put 'test:emp', '1', 'outside:slang', 'cat' put 'test:emp', '1', 'outside:zh', 'mao' put 'test:emp', '2', 'inside:name', 'jerry' put 'test:emp', '2', 'inside:age', '2' put 'test:emp', '2', 'outside:slang', 'rat' put 'test:emp', '2', 'outside:zh', 'laoshu'
扫描表
scan 'test:emp'
ROW COLUMN+CELL 1 column=inside:age, timestamp=1559458876365, value=3 1 column=inside:name, timestamp=1559458822328, value=tom 1 column=outside:slang, timestamp=1559459016767, value=cat 1 column=outside:zh, timestamp=1559459100544, value=mao 2 column=inside:age, timestamp=1559459253516, value=2 2 column=inside:name, timestamp=1559459242949, value=jerry 2 column=outside:slang, timestamp=1559459336624, value=rat 2 column=outside:zh, timestamp=1559459347676, value=laoshu 2 row(s) in 0.0190 seconds
删除表数据之前要先禁用
disable 'test:emp' --禁用表 drop 'test:emp' --删除表(先别删,后面导出了再删)
退出 HBase Shell
quit
导入导出数据
使用 HBase
自带的类 导出 二进制格式文件
如果不加 file://
就会导出到 HDFS
上面去,如果带了数据库名一定要加 ''
不然导出的数据是空白。
hbase org.apache.hadoop.hbase.mapreduce.Export `test:emp` file:///root/emp_out ls /root/emp_out/
part-m-00000 _SUCCESS
之前导出文件后一直找不到,结果是因为我启用的 Hadoop HA
把这个任务分配给了别的机器,所以不在 master
上面。上 http://master:8088 看看也能知道是谁在运行。
删除表,为导入数据做准备
hbase shell
disable 'test:emp' --禁用表 drop 'test:emp' --删除表 create 'test:emp', 'inside', 'outside' --新建表(没有同名表无法导入数据) quit
导入之前导出的数据
注意你的 MapReduce
任务会被分配到那台机器上运行,文件要放对位置。
hbase org.apache.hadoop.hbase.mapreduce.Import `test:emp` file:///root/emp_out
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 6、如何获取配置中心的配置
- React降级配置及Ant Design配置
- vscode 配置eslint 开发vue的相关配置
- git commit 规范校验配置和版本发布配置
- hadoop地址配置、内存配置、守护进程设置、环境设置
- 在hibernate中配置事务级别与命名查询配置【原创】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。