基础知识

关于Hbase的架构及基础知识可阅读此两篇文章:
(1)HBase架构一张图看懂 https://blog.csdn.net/sinat_26811377/article/details/102649301
(2)深入HBase架构解析(一)http://www.blogjava.net/DLevin/archive/2015/08/22/426877.html
服务器准备
本次尝试搭建伪分布式的HBase,即在单台机器上安装,使用自带的单节点zookeeper,而非像先前搭建的分布式zookeeper。因之前在node02/node03/node04上安装了分布式zookeeper,所以本次实验在node01上进行。
解压安装
tar xf hbase-0.98.12.1-hadoop2-bin.tar.gz -C /opt/sxt/
mv hbase-0.98.12.1-hadoop2/ hbase
配置环境变量
vi /etc/profile
export HBASE_HOME=/opt/sxt/hbase
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin
. /etc/profile
修改配置 hbase-env.sh
cd /opt/sxt/hbase/conf/
vi hbase-env.sh
#修改
export JAVA_HOME=/usr/java/jdk1.7.0_67
修改配置 hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>file:///home/testuser/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/testuser/zookeeper</value>
</property>
启动
start-hbase.sh
浏览器查看:http://node01:60010
基础命语法及文件结构测试(按顺序操作体会)
[root@node01 tbl] hbase shell
hbase(main):015:0> create 'tbl','cf'
hbase(main):015:0> list
#此时到default目录下可看到tbl文件夹
[root@node01 tbl] cd /home/testuser/hbase/data/default
[root@node01 tbl] cd tbl/
[root@node01 tbl] ls
fae99313cd7fa906fd08ece49a11ed0b
#上面这个就是region的名称
[root@node01 tbl] cd fae99313cd7fa906fd08ece49a11ed0b/
[root@node01 fae99313cd7fa906fd08ece49a11ed0b] ls
cf
#进入后可发现列簇名称
[root@node01 fae99313cd7fa906fd08ece49a11ed0b] cd cf/
[root@node01 cf] ls
#暂时cf里是空
#此时往表里新增数据
hbase(main):015:0> put 'tbl','2','cf:name','zhangsanfeng'
#查一条数据
hbase(main):015:0> get 'tbl','2'
#遍历全表
hbase(main):015:0> scan 'tbl'
#注意此时上面的cf文件夹里还没有东西,是因为刚才的写入是写在memstore里,
#并没有溢写,所以还没到磁盘,执行 flush 'tbl'手动溢写,此时cf下就有文件了
#看一下文件里内容,是一些元数据信息
[root@node01 cf] hbase hfile - p -m -f 5253005d62bf4c4ba698f5e933eae149
#新插入一条
hbase(main):015:0> put 'tbl','1','cf:age','12'
#此时scan发现rowkey是1的在前面 (字典序排序)
hbase(main):016:0> scan 'tbl'
ROW COLUMN+CELL
1 column=cf:age, timestamp=1576013612603, value=12
2 column=cf:name, timestamp=1576012794535, value=zhangsanfeng
2 row(s) in 0.0340 seconds
#此时再去溢写,发现cf里会有两个文件
hbase(main):017:0> flush 'tbl'
#再去插入一条数据,此时rowkey=1会更新
hbase(main):017:0> put 'tbl','2','cf:name','lisi'
hbase(main):019:0> scan 'tbl'
ROW COLUMN+CELL
1 column=cf:age, timestamp=1576013612603, value=12
2 column=cf:name, timestamp=1576013809407, value=lisi
2 row(s) in 0.0270 seconds
#此时cf文件夹下还是原来的两个region,其中一个还是记录的zhangsanfeng(被打上失效标记)
#此时再溢写,发现cf里region合并为一个了,这时候zhangsanfeng就被物理删除了。
[root@node01 hbase] cd /home/testuser/hbase
[root@node01 hbase] ls
#可看到archive文件夹,逐步进入可看到上述过程中生产的三个region
#只不过最后合并为cf里的一个了
#如果再有新的region,又会和3->1那个合并,一直合并到文件比较大
#删除数据
hbase(main):021:0> delete 'tbl','2','cf:name'
#不经过事务清空
hbase(main):024:0> truncate 'tbl
#删除表(需要先禁用)
disable 'tbl'
drop 'tbl'
#查看库下面有哪些表
hbase(main):001:0> list_namespace_tables 'hbase'
hbase(main):002:0> scan 'hbase:meta'
网友评论