HBase学习笔记——配置及Shell操作

1.HBase的配置

还是以前配置的集群,见:http://www.cnblogs.com/DarrenChan/p/6493373.html

我们约定:weekend03和weekend04放HMaster,weekend05、weekend06和weekend07放HRegionServer

1.上传hbase安装包

2.解压

3.配置hbase集群,要修改3个文件(首先zk集群已经安装好了)
注意:要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下
在weekend03上面:
3.1修改hbase-env.sh
export JAVA_HOME=/home/hadoop/app/jdk1.7.0_65
//告诉hbase使用外部的zk
export HBASE_MANAGES_ZK=false

vim hbase-site.xml
<configuration>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://ns1/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>weekend05:2181,weekend06:2181,weekend07:2181</value>
</property>
</configuration>

vim regionservers
weekend05
weekend06
weekend07

3.2拷贝hbase到其他节点
scp -r hbase-0.96.2-hadoop2/ weekend04:/home/hadoop/app/
scp -r hbase-0.96.2-hadoop2/ weekend05:/home/hadoop/app/
scp -r hbase-0.96.2-hadoop2/ weekend06:/home/hadoop/app/
scp -r hbase-0.96.2-hadoop2/ weekend07:/home/hadoop/app/
4.将配置好的HBase拷贝到每一个节点并同步时间

5.启动所有的hbase
分别启动zk
./zkServer.sh start
启动hadoop集群
start-dfs.sh
启动hbase,在主节点上运行:(bin/)
./start-hbase.sh

HBase学习笔记——配置及Shell操作

HBase学习笔记——配置及Shell操作 

HBase学习笔记——配置及Shell操作

HBase学习笔记——配置及Shell操作

HBase学习笔记——配置及Shell操作

6.通过浏览器访问hbase管理页面
192.168.230.137:60010(新版本是16030)
7.为保证集群的可靠性,要启动多个HMaster(bin/)
./hbase-daemon.sh start master(在weekend04上面)

 

通过192.168.230.137:60010/master-status进行访问,如下:

 HBase学习笔记——配置及Shell操作

我们已经知道HBase是基于Zookeeper实现的,现在我们测试一下HMaster的HA机制:

先用kill -9 2889关闭weekend03的HMaster

然后在查看,发现HMaster切换了。

HBase学习笔记——配置及Shell操作

重新启动weekend03的HMaster,./hbase-daemon.sh start master

发现备份的地方又多了weekend03。

HBase学习笔记——配置及Shell操作

2.HBase的Shell操作

bin/下面:

进入hbase命令行
./hbase shell

HBase学习笔记——配置及Shell操作

 

名称

命令表达式

创建表

create '表名', '列族名1','列族名2','列族名N'

查看所有表

list

描述表

describe  '表名'

判断表存在

exists  '表名'

判断是否禁用启用表

is_enabled '表名'

is_disabled '表名'

添加记录     

put  '表名', 'rowKey', '列族 : 列',  '值'

查看记录rowkey下的所有数据

get  '表名' , 'rowKey'

查看表中的记录总数

count  '表名'

获取某个列族

get '表名','rowkey','列族'

获取某个列族的某个列

get '表名', 'rowkey',  '列族:列’

删除记录

delete  '表名' ,  '行名' , '列族:列'

删除整行

deleteall '表名','rowkey'

删除一张表

先要屏蔽该表,才能对该表进行删除

第一步 disable '表名' ,第二步  drop '表名'

清空表

truncate '表名'

查看所有记录

scan '表名'  

查看某个表某个列中所有数据

scan '表名' , {COLUMNS=>'列族名:列名'}

更新记录

就是重写一遍,进行覆盖,hbase没有修改,都是追加

 

显示hbase中的表
list

创建user表,包含info、data两个列族
create 'user', 'info', 'data'

创建user表,包含info列族,版本号有3个
create 'user', {NAME => 'info', VERSIONS => '3'}

向user表中插入信息,row key为rk0001,列族info中添加name列标示符,值为zhangsan
put 'user', 'rk0001', 'info:name', 'zhangsan'

向user表中插入信息,row key为rk0001,列族info中添加gender列标示符,值为female
put 'user', 'rk0001', 'info:gender', 'female'

向user表中插入信息,row key为rk0001,列族info中添加age列标示符,值为20
put 'user', 'rk0001', 'info:age', 20

向user表中插入信息,row key为rk0001,列族data中添加pic列标示符,值为picture
put 'user', 'rk0001', 'data:pic', 'picture'

获取user表中row key为rk0001的所有信息
get 'user', 'rk0001'

获取user表中row key为rk0001,info列族的所有信息
get 'user', 'rk0001', 'info'

获取user表中row key为rk0001,info列族的name、age列标示符的信息
get 'user', 'rk0001', 'info:name', 'info:age'

获取user表中row key为rk0001,info、data列族的信息
get 'user', 'rk0001', 'info', 'data'
get 'user', 'rk0001', {COLUMN => ['info', 'data']}

get 'user', 'rk0001', {COLUMN => ['info:name', 'data:pic']}

获取user表中row key为rk0001,列族为info,版本号最新5个的信息
get 'user', 'rk0001', {COLUMN => 'info', VERSIONS => 2}
get 'user', 'rk0001', {COLUMN => 'info:name', VERSIONS => 5}
get 'user', 'rk0001', {COLUMN => 'info:name', VERSIONS => 5, TIMERANGE => [1392368783980, 1392380169184]}

获取user表中row key为rk0001,cell的值为zhangsan的信息
get 'people', 'rk0001', {FILTER => "ValueFilter(=, 'binary:图片')"}

获取user表中row key为rk0001,列标示符中含有a的信息
get 'people', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}

put 'user', 'rk0002', 'info:name', 'fanbingbing'
put 'user', 'rk0002', 'info:gender', 'female'
put 'user', 'rk0002', 'info:nationality', '中国'
get 'user', 'rk0002', {FILTER => "ValueFilter(=, 'binary:中国')"}


查询user表中的所有信息
scan 'user'

查询user表中列族为info的信息
scan 'user', {COLUMNS => 'info'}
scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 5}
scan 'persion', {COLUMNS => 'info', RAW => true, VERSIONS => 3}
查询user表中列族为info和data的信息
scan 'user', {COLUMNS => ['info', 'data']}
scan 'user', {COLUMNS => ['info:name', 'data:pic']}


查询user表中列族为info、列标示符为name的信息
scan 'user', {COLUMNS => 'info:name'}

查询user表中列族为info、列标示符为name的信息,并且版本最新的5个
scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}

查询user表中列族为info和data且列标示符中含有a字符的信息
scan 'user', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}

查询user表中列族为info,rk范围是[rk0001, rk0003)的数据
scan 'people', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}

查询user表中row key以rk字符开头的
scan 'user',{FILTER=>"PrefixFilter('rk')"}

查询user表中指定范围的数据
scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}

删除数据
删除user表row key为rk0001,列标示符为info:name的数据
delete 'people', 'rk0001', 'info:name'
删除user表row key为rk0001,列标示符为info:name,timestamp为1392383705316的数据
delete 'user', 'rk0001', 'info:name', 1392383705316


清空user表中的数据
truncate 'people'


修改表结构
首先停用user表(新版本不用)
disable 'user'

添加两个列族f1和f2
alter 'people', NAME => 'f1'
alter 'user', NAME => 'f2'
启用表
enable 'user'


删除一个列族:
alter 'user', NAME => 'f1', METHOD => 'delete' 或 alter 'user', 'delete' => 'f1'

添加列族f1同时删除列族f2
alter 'user', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}

将user表的f1列族版本号改为5
alter 'people', NAME => 'info', VERSIONS => 5
启用表
enable 'user'


删除表
disable 'user'
drop 'user'


get 'person', 'rk0001', {FILTER => "ValueFilter(=, 'binary:中国')"}
get 'person', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}
scan 'person', {COLUMNS => 'info:name'}
scan 'person', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}
scan 'person', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}

scan 'person', {COLUMNS => 'info', STARTROW => '20140201', ENDROW => '20140301'}
scan 'person', {COLUMNS => 'info:name', TIMERANGE => [1395978233636, 1395987769587]}
delete 'person', 'rk0001', 'info:name'

alter 'person', NAME => 'ffff'
alter 'person', NAME => 'info', VERSIONS => 10


get 'user', 'rk0002', {COLUMN => ['info:name', 'data:pic']}