进入HBase客户端命令行
[root@master hbase]# bin/hbase shell
hbase(main):001:0>help 查看帮助命令
hbase(main):001:0>help 'disable_all'
显示当前Hbase版本号
hbase(main):002:0> version
显示各主节点的状态
hbase(main):003:0> status
显示当前用户名
hbase(main):004:0> whoami
退出Shell操作
hbase(main):005:0>exit
命令名称 | 相关说明 |
create | 创建表 |
put | 插入或更新数据 |
scan | 扫描或并返回表的所有数据 |
describe | 查看表的结构 |
get | 获取指定行中列的数据 |
count | 统计表中数据的行数 |
delete | 删除指定行或列的数据 |
deteleall | 删除整个行或列的数据 |
truncate | 清除表中数据 |
drop | 删除表 |
DDL
2.1创建表
创建表时指明表名和列族两个参数,例:创建表student含有一个列族info,创建表stu含有两个列族info1,info2
hbase(main):001:0> create 'student','info'
hbase(main):002:0> create 'stu','info1', 'info2'
创建表时指定列族的参数。例:创建表stu1含有一个列族info,保留最近的5个历史版本。
hbase(main):003:0>create 'stu1' {NAME=>'info',VERSIONS=>5}
2.2查看表名
查看当前所有表名
hbase(main):004:0>list
2.3描述表结构
通过describe命令查看选定列表的列族及其参数
hbase(main):005:0>describe'stu1'
2.4修改表结构
增加列族,若列族存在则修改其参数
hbase(main):006:alter'student', { NAME => 'info', VERSIONS => 3 }
hbase(main):007:alter'stu', { NAME => 'info1', VERSIONS => 3 }
删除一个列族,以及其中包含的数据
hbase(main):008: alter 'student','delete'=>'info'
清空表中所有数据
hbase(main):009: truncate 'student'
2.5删除表
删除表之前需要将表禁用
hbase(main):010:disable 'student'
hbase(main):011:drop 'student'
2.6快照操作
hbase表快照是在某一个时间点对指定表拷贝,快照可以对重要数据进行恢复,防止用户错误性的操作。
hbase(main):012:snapshot 'stu','stu_bak'
查看快照
hbase(main):013: list_snapshots
通过快照生成新表
hbase(main):014:clone_snapshot 'stu_bak', 'stu2'
通过快照恢复原表格,需要将原表格删除,将抛弃快照之后的所有变化。
hbase(main):015:disable 'stu'
hbase(main):016:drop 'stu'
hbase(main):017:retore_snapshot 'stu_bak'
hbase(main):018:delete_snapshot 'stu_bak'
问题:如何利用快照实现表改名?
2.7命名空间操作
DML
3.1插入数据
Put命令可以实现单条数据的插入和修改。若数据不存在,则插入数据。插入数据命令参数依次是表名、行键值、列族、列、值和时间戳或版本号。若插入时未填写时间戳,系统将自定给与一个长整型的时间戳。
hbase(main):001:put 'stu','001','info1:name','Mike',1
hbase(main):002:put 'stu','002','info1:name','Bob'
hbase(main):003:scan'stu'
3.2修改数据或更新数据
若数据存在时,则是在已经存在的数据上修改数据。更新数据版本,默认旧版本数据不可见。
hbase(main):004:put 'stu','002','info1:name','Jane'
hbase(main):005:put 'stu','001','info1:name','May',2
hbase(main):005:scan'stu'
查看数据
按行键获取数据,get命令的必写参数为表名和行键值。
hbase(main):004:get'stu','001'
hbase(main):005:get'stu','001', 'info1:name'
也可以指定时间戳,数据版本数以及过滤器。
hbase(main):006:get 'stu','002',{COLUMN=>'info1:name',VERSIONS=>3}
hbase(main):007:get 'stu','002',{COLUMN=>'info1:name',VERSIONS=>3,TIMERANGE=[1,2]}
不指定行键,通过全表扫描查询数据
hbase(main):008:scan'stu'
3.3删除数据
删除单条数据,指定表名、行键值、列族和列。
hbase(main):001:list
hbase(main):002:scan'stu2'
hbase(main):003: delete 'stu2','001','info1:name'
删除某列族数据,指定表名、行键值、列族。
命令格式:alter ‘表名’, {NAME => ‘列族名’, METHOD => ‘delete’}
hbase(main):004:alter 'stu2',{NAME => 'info2',METHOD => 'delete'}
删除整个逻辑行信息,指定表名、行键值。
hbase(main):005:deleteall 'stu2','001'
清空表数据。
hbase(main):005:truncate 'stu2'
批量导入导出数据
4.1利用ImportTSV批量导入数据
该方法将存储在HDFS上的文本文件导入到Hbase上的指定表中,利用MapReduce实现并行化的数据插入。TXT文本当中应当有明确的列分隔符,比如利用“\t”(TAB)分隔的TSV文件,或逗号分隔的CSV格式。
上传文本到HDFS上
[root@master ~]#cat student.txt
1,zhangsan,100
2,lisi,90
3,wangwu,80
[root@master ~]#hdfsdfs -mkdir /opt
[root@master ~]#hdfsdfs -put student.txt /opt
在Hbase shell创建好表
hbase(main):001:create 'stu1','info'
在Linux的命令行中通过调用Hbase指令调用ImportTsv类
-Dimporttsv.separator参数指定文件的分隔符
-Dimporttsv.columns参数指定文件中第一列为行键,第二列写入列族info下名为name的列,第三列写入列族info下名为scores的列
stu1为导入的表名
/opt为导入hdfs文件所在的目录,不需要指定文件名,导入时会遍历目录中的所有文件
[root@masterhbase]# bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv-Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:scoresstu1 /opt
如果运行时,出现以下错误,一直在尝试连接。可以在yarn-site.xml文件中加入以下信息。
<property>
<name>yarn.resourcemanager.address</name>
<value>slave2:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>slave2:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>slave2:8031</value>
</property>
Hbase支持将表或快照复制到hdfs,支持将数据复制到其他Hbase集群,以实现数据备份和恢复功能。
4.2利用Export导出文件
将数据从Hbase导出到hdfs,该命令导出的数据目的是备份,文件不能以文本方式查看。两个参数,一个为表名,另一个为hdfs文件存放路径。
注意:由于MapReduce的特性,该目录不能提前存在。
[root@master hbase]#bin/hbaseorg.apache.hadoop.hbase.mapreduce.Export stu1 /hbase
4.3利用Import恢复表格
导出的数据可以恢复到Hbase,其中表stu2需提前创建好。
hbase(main):002:create 'stu2','info'
[root@master hbase]#bin/hbaseorg.apache.hadoop.hbase.mapreduce.Import stu2 /hbase
4.4利用ExportSnapshot备份
将快照备份到hdfs,指定快照名,hdfs路径,导出的快照文件可以利用Import方法恢复到表中。
hbase(main):003:snapshot 'stu1','stu1_bak'
[root@master hbase]#bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot-snapshot sut1_bak -copy-to /hbase1