2 Hbase入门
2.1 Hbase安装部署
步骤1:启动HDFS和Zookeeper
myhadoop.sh start
myzk.sh start
步骤2:解压HBase安装包
tar -zxvf hbase-2.0.5-bin.tar.gz -C /opt/module
# 修改名称
cd /opt/module
mv hbase-2.0.5 hbase
步骤3:修改配置环境变量
sudo vim /etc/profile.d/myenv.sh
# HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=$PATH:$HBASE_HOME/bin
步骤4:修改配置文件
-
hbase-env.sh
HBase默认集成了Zookeeper,但是我们一般使用外置的Zookeeper,所以需要显示的将内置的ZK置为false。
export HBASE_MANAGES_ZK=false
- hbase-site.xml
<configuration>
<!--hbase存储到hdfs上的文件路径-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop102:8020/hbase</value>
</property>
<!--开启分布式集群-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--zookeeper集群地址-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop102,hadoop103,hadoop104</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<name>hbase.wal.provider</name>
<value>filesystem</value>
</property>
<property>
<name>hbase.master.maxclockskew</name>
<value>180000</value>
<description>Time difference of regionserver from master</description>
</property>
</configuration>
-
regionservers
HBaseregion集群地址
hadoop102
hadoop103
hadoop104
步骤5:同步集群
xsync /opt/module/hbase
步骤6:启动集群
- 单点启动:
bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserver
- 集群启动
start-hbase.sh
# 关闭
stop-hbase.sh
步骤7:通过web监控页面访问Hbase
http://hadoop102:16010
配置集群高可用
步骤1:关闭HBase集群
bin/stop-hbase.sh
步骤2:在conf目录下创建backup-masters文件
touch conf/backup-masters
步骤3:在backup-masters文件中配置高可用HMaster节点名称
hadoop103
步骤4:分发配置文件
xsync /opt/module/hbase/conf
步骤5:通过web监控页面可以看到
2.2 Hbase shell
①基本操作
-
进入Hbase shell
[atguigu@hadoop102 hbase]$ hbase shell hbase(main):001:0>
-
查看帮助命令
help
-
退出hbase shell
quit
②命名空间的操作
命名空间:namespace,类似于MySql中的database库。
Hbase系统默认定义了两个namespace
hbase:系统内建表,包括namespace 和 meta 表
default:用户建表时未指定namespace的表都创建在此
- 可以在MySql中的/hbase/data可以看到库和表:
也可以在Hbase的web页面hadoop102:16010查看
-
查看命名空间
--查看hbase中所有的命名空间 hbase(main):003:0> list_namespace
-
创建命名空间
hbase(main):004:0> create_namespace 'test'
-
查看某个命名空间
hbase(main):005:0> describe_namespace 'test'
-
删除命名空间
hbase(main):007:0> drop_namespace 'test'
③表的操作
-
创建表
-- create '表名', '列族名' hbase(main):015:0> create 'tacher' , 'info' --创建表时,默认会存储到default命名空间中 --如果想要改变默认的命名空间,需要在创建表时指定命名空间 -- create '命名空间:表名', '列族名' hbase(main):016:0> create 'test:teacher', 'info'
-
查看表
-- list默认查看的也是default命名空间中的表 hbase(main):017:0> list -- 如果查看某个命名空间中的表,需要指定命名空间 hbase(main):018:0> list_namespace_tables 'test'
-
向表中插入数据
-- put '命名空间:表名', '行键rowkey', '列族:列名', '列值' hbase(main):019:0> put 'test:teacher','1001', 'info:name', 'Tom' hbase(main):020:0> put 'test:teacher', '1001', 'info:age', '20' hbase(main):021:0> put 'test:teacher', '1001', 'info:sex', 'male' hbase(main):022:0> put 'test:teacher', '1002', 'info:name', 'Jerry'
-
扫描全表数据
-- scan '命名空间:表名' hbase(main):023:0> scan 'test:teacher' ROW COLUMN+CELL 1001 column=info:age, timestamp=1607510369918, value=20 1001 column=info:name, timestamp=1607510350588, value=Tom 1001 column=info:sex, timestamp=1607511391959, value=male 1002 column=info:name, timestamp=1607511411264, value=Jerry 1003 column=info:name, timestamp=1607511671291, value=Mike
-
扫描范围数据
-- scan '命名空间:表名', {STARTROW => '行键1001', STOPROW => '行键1002'} -- 注意:不包含STOPROW的行键 hbase(main):026:0> scan 'test:teacher', {STARTROW => '1001', STOPROW => '1002'} ROW COLUMN+CELL 1001 column=info:age, timestamp=1607510369918, value=20 1001 column=info:name, timestamp=1607510350588, value=Tom 1001 column=info:sex, timestamp=1607511391959, value=male -- 仅仅包含START的ROW hbase(main):027:0> scan 'test:teacher', {STARTROW => '1001', STOPROW => '1001'} ROW COLUMN+CELL 1001 column=info:age, timestamp=1607510369918, value=20 1001 column=info:name, timestamp=1607510350588, value=Tom 1001 column=info:sex, timestamp=1607511391959, value=male -- 只写STARTROW,表示从当前行键开始,扫描到表末 hbase(main):029:0> scan 'test:teacher', {STARTROW => '1002'} ROW COLUMN+CELL 1002 column=info:name, timestamp=1607511411264, value=Jerry 1003 column=info:name, timestamp=1607511671291, value=Mike
-
查看表的结构
hbase(main):030:0> describe 'test:teacher' --结果 Table test:teacher is ENABLED test:teacher COLUMN FAMILIES DESCRIPTION {NAME => 'info', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
-
更新指定字段的数据
hbase(main):031:0> put 'test:teacher', '1001', 'info:name', 'TTT' --更新数据,其实是覆盖原来的数据,逻辑删除 hbase(main):032:0> scan 'test:teacher' ROW COLUMN+CELL 1001 column=info:age, timestamp=1607510369918, value=20 1001 column=info:name, timestamp=1607512200127, value=TTT 1001 column=info:sex, timestamp=1607511391959, value=male 1002 column=info:name, timestamp=1607511411264, value=Jerry 1003 column=info:name, timestamp=1607511671291, value=Mike
-
查看”指定行“或”指定列族:列“的数据
-- get '命名空间:表名', '行键',查看某一行的所有数据 hbase(main):033:0> get 'test:teacher', '1001' COLUMN CELL info:age timestamp=1607510369918, value=20 info:name timestamp=1607512200127, value=TTT info:sex timestamp=1607511391959, value=male -- get '命名空间:表名', '行键', '列族:列',查看某以行的某一个列族:列的数据 hbase(main):034:0> get 'test:teacher', '1001', 'info:name' COLUMN CELL info:name timestamp=1607512200127, value=TTT
-
统计表数据行数
hbase(main):035:0> count 'test:teacher' => 3
-
删除数据
-- 删除某rowkey的全部数据 -- deleteall '命名空间:表名', '行键' hbase(main):036:0> deleteall 'test:teacher', '1001' -- 删除某rowkey的某一列数据 -- delete '命名空间:表名', '行键', '列族:列' hbase(main):037:0> delete 'test:teacher', '1001', 'info:name'
-
清空表数据
-- 清空表的操作顺序是先disable,然后再truncate hbase(main):039:0> truncate 'test:teacher' Truncating 'test:teacher' table (it may take a while): Disabling table... Truncating table... Took 3.5374 seconds
-
删除表
-- 首先,改表表为disable状态 hbase(main):041:0> disable 'test:teacher' -- 然后再删除表 hbase(main):042:0> drop 'test:teacher' -- 如果直接删除表,会报错: ERROR: Table test:student is enabled. Disable it first.
-
变更表信息:
-- 将info列族中的数据存放3个版本 hbase(main):046:0> alter 'test:teacher', {NAME => 'info', VERSIONS => 3} hbase(main):003:0> get 'test:teacher', '1001' --info:name timestamp=1607513492653, value=Tom hbase(main):004:0> put 'test:teacher', '1001', 'info:name', 'TT' hbase(main):005:0> get 'test:teacher', '1001' --info:name timestamp=1607513865957, value=TT --查询的时候可以指定版本的数量,就可以查看多个时间戳的数据 hbase(main):006:0> get 'test:teacher', '1001', { COLUMN => 'info:name', VERSIONS => 3} info:name timestamp=1607513865957, value=TT info:name timestamp=1607513492653, value=Tom
-
查看包括标记删除和未收集的cell
--扫描全表,包括标记删除的和未收集的cell hbase(main):004:0> scan 'test:student' , {RAW => true, VERSIONS => 10}
④多版本
--创建一个表的时候,创建一个列族,有3个版本
hbase(main):011:0> create 'test:emp', {NAME=>'info', VERSIONS=>3}
--①查看表中数据的多版本
hbase(main):015:0> scan 'test:emp', {VERSIONS=>2}
--②查看表中某个rowKey的多版本
hbase(main):021:0> get 'test:emp','1001',{
COLUMN=>'info:name', VERSIONS=>2}
--修改表,已有的列族更改版本的数量,默认VERSIONS=1
hbase(main):022:0> alter 'test:emp', {NAME=>'info', VERSIONS=>4}