1 HBase的访问方式和HBase Shell
1.1 HBase Shell命令行终端
1.进入HBase Shell终端环境
HBase Shell是由Apache HBase官方提供的Shell命令行操作接口,是一个基于Ruby脚本语言的终端环境。利用HBase Shell用户可以方便地执行终端命令来操作HBase,进行HBase数据表的创建、删除和修改,列出表信息,读取表数据,插入表数据,删除表数据等操作。
进入HBase shell终端环境之前,要先在Linux Shell命令行终端执行start-dfs.sh 脚本启动HDFS,再执行start-hbase 脚本启动HBase。如果Linux系统已配置HBase环境变量,可直接在Linux Shell命令行终端执行hbase shell脚本命令,即可进入HBase Shell的命令行终端环境。Hbase脚本文件位于HBase安装目录的bin子目录。执行hbase shell命令的部分输出结果如下:
[root@hbase ~]# hbase shell
... ...
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.0-cdh5.0,rUnknown,Wed Mar 23 11:46:29 PDT 2016
hbase(main):001:0>
成功进入HBase Shell终端环境后,会出现hbase(main):000:0>提示符,可在提示符后输入要执行的命令并回车执行。如果直接回车或输入命令后回车,提示符中的数字序号会依次递增,数字序号初始值是001。终端输出结果如下:
hbase(main):001:0> list
hbase(main):002:0>
hbase(main):003:0*
hbase(main):004:0*
hbase(main):005:0*
2 HBase Shell命令行的基础操作命令
本节主要介绍HBase Shell命令行的各种基础操作命令的用法格式、用法说明和用法示例,应能熟练掌握HBase Shell命令行的基础操作命令。
2.1 DDL分组的操作命令
DDL分组中包含的操作命令很多,主要用于对HBase数据库表的相关管理操作,主要包括创建表、修改表、删除表、列出表、启用表、禁用表等操作
下面对DDL分组中的常用操作命令进行详细介绍。
- list命令
list是列出数据表命令。进入HBase shell后可以先执行list命令列出HBase当前所有数据表的表名。
用法格式:list
用法说明:列出默认名字空间default和自定义名字空间中的所有数据表,命令后面不跟任何参数。
用法示例:默认名字空间default和自定义名字空间中的所有数据表
HBase Shell终端输入list后按回车键,输出结果如下:
TABLE
t1
t2
2 row(s) in 0.0140 seconds
=> ["t1","t2"]
说明:TABLE后面的每行字符串t1和t2都是表名,2 row(s)是所列出的所有表的数量。list命令实际是对元数据表hbase:meta表进行查询。元数据表存放HBase所有数据表的元数据信息。另外,HBase当前没有自定义名字空间。
- exists命令
exists是表存在判断命令,用于判断指定表名的数据表是否存在。
用法格式1:exists 't1'
用法说明:判断默认名字空间default中是否存在表名为t1的数据表
用法格式2:exists 'ns1:t1'
用法说明:判断指定名字空间 ns1中是否存在表名为t1的数据表
用法示例:判断表t1是否存在
HBase Shell终端执行exists 't1'命令,输出结果如下:
Table t1 does exist
0 row(s) in 0.0750 seconds
说明:默认名字空间default中存在表名为't1的数据表。
- describe命令
describe是表属性描述命令,主要描述HBase表和列族的属性,可以缩写为desc。
用法格式1:describe 't1'或desc 't1'
用法说明:描述默认名字空间defaut中的数据表t1的列族属性
用法格式2:describe 'ns1:t1'或desc 'ns1:t1'
用法说明:描述指定名字空间 ns1中的的数据表t1的列族属性;
用法示例:描述表t1的列族属性
HBase shell终端执行describe ’t1’或desc ’t1’命令,输出结果如下:
Table t1 is ENABLED
t1
COLUMN FAMILIES DESCRIPTION
{NAME => 'f1',BLOOMFILTER => 'ROW',VERSIONS => '1',IN_MEMORY => 'false',KEEP_DELETED_CELLS => 'FALSE',DATA_BLOCK_ENCODING => 'NONE',TTL => 'FOREVER',COMPRESSION => 'NONE',MIN_VERSIONS => '0',
{NAME => 'f2',BLOCKCACHE => 'true',BLOCKSIZE => '65536',REPLICATION_SCOPE => '0'}
{NAME => 'f3',REPLICATION_SCOPE => '0'}
3 row(s) in 0.0970 seconds
说明:依次显示每个列族的属性信息;第1行提示表t1已启用;第2行显示表名t1;从第3行开始在依次描述表t1的每个列族的属性信息,表t1划分为三个列族f1、f2和f3;列族的属性列表包含在花括号中,列族属性格式是”属性名=>属性值”,=>相当于等于号;由于表t1属于默认名字空间default,执行descibe 't1'命令和 descibe 'default:t1'命令效果相同。
HBase表的列族是预先定义的,物理上是互相分离的。在各种应用场景中,经常为了提升HBase集群性能而进行性能调优,而HBase表列族中的多个属性都可用于性能调优。
- create命令
create是创建表命令,用于创建一张新的数据表。在HBase Shell终端只输入create后按回车,会提示create命令的各种用法。create命令用法比较复杂,可先掌握其简单常见用法。
用法格式1:create 't1',{NAME => 'f1'},{NAME => 'f2'},{NAME => 'f3'}
用法说明:在默认名字空间default创建表名t1的包含3个列族f1,f2和f3的数据表;这是标准用法,简化用法格式是create ‘t1’,‘f1’,‘f2’’,‘f3’
用法格式2:create 'ns1:t1',{NAME => 'f1',VERSIONS => 5}
用法说明:在指定名字空间 ns1中创建表名为t1的数据表,包含1个名字为f1的列族,并指定单元格值的最大版本数为5
用法示例1:在默认名字空间创建students表
在HBase shell终端执行create 'students','info'命令,输出结果如下:
0 row(s) in 1.4260 seconds
=> Hbase::Table - students
说明:第1行提示创建表命令的执行时长;第2行提示创建完成的数据表的表名。students表用于保存学生的基本信息和成绩信息。info列族用于保存学生姓名、年龄、性别等基本信息。
执行create命令创建表时,必须指定至少一个列族;只指定表名而无列族名,终端会提示用法错误。create命令执行完成后可执行list命令查看新建的表students;还可执行desc 'students'命令查看新创建表students的列族属性,只显示一个列族info。
执行list命令输出结果如下:
TABLE
students
t1
t2
3 row(s) in 0.0250 seconds
=> ["students","t1","t2"]
执行desc ‘students’命令输出结果如下:
Table students is ENABLED
students
COLUMN FAMILIES DESCRIPTION
{NAME => 'info',KEEP_DELETED_CELLS => 'FALSE',MIN_VERSIONS => '0',REPLICATION_SCOPE => '0'}
1 row(s) in 0.0540 seconds
list命令可以查看新建的students表是否存在,desc命令可以查看info列族属性信息。
用法示例2:创建名字空间ns1
HBase shell终端依次执行命令create_namespace 'ns1',输出结果如下:
hbase(main):026:0> create_namespace 'ns1'
0 row(s) in 0.0530 seconds
hbase(main):027:0> create 'ns1:t1',VERSIONS => 5}
0 row(s) in 1.2900 seconds
=> Hbase::Table - ns1:t1
用法示例3:在ns1名字空间创建t1表,包含一个列族f1,设置最大版本数5
HBase shell终端依次执行create 'ns1:t1',VERSIONS => 5}、list和desc 'ns1:t1'命令,输出结果如下:
hbase(main):023:0> create 'ns1:t1',VERSIONS => 5}
0 row(s) in 1.2650 seconds
hbase(main):028:0> list
TABLE
ns1:t1
students
t1
t2
4 row(s) in 0.0210 seconds
=> ["ns1:t1","students","t2"]
hbase(main):029:0> desc 'ns1:t1'
Table ns1:t1 is ENABLED
ns1:t1
COLUMN FAMILIES DESCRIPTION
{NAME => 'f1',VERSIONS => '5',REPLICATION_SCOPE => '0'}
1 row(s) in 0.0470 seconds
说明:可执行list命令查看新建的数据表ns1:t1,执行desc命令查看表列族f1中VERSION=5。注意如果要创建的表已存在,则不允许重复创建。重复执行create命令HBase Shell终端会提示错误:ERROR: Table already exists: students!
- alter命令
alter是修改表命令,在HBase Shell终端只输入alter后按回车,会提示alter命令的各种用法。alter命令的一般格式是alter t1,ATTRNAME=>ATTRVALUE,该命令功能强大,用法复杂,可先掌握简单常用的用法。alter命令能执行列族级别、数据表级别和集群级别的修改操作。
1)列族级别
列族级别的修改操作主要是增加列族、删除列族和修改列族属性。
用法格式1:alter 't1',NAME=>'f2'
用法说明:修改数据表t1,增加一个新列族f2
用法示例:HBase shell终端执行alter 'students','score'命令,输出结果如下:
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.2810 seconds
为students表增加一个列族score,等效命令是alter 'students',NAME=>'score';第1行提示更新所有的regions为新的表模式;增加、删除列族及修改列族属性都会导致表结构的更新,学习HBase体系架构得知由HMaser负责表结构的更新;alter命令执行后可再执行desc ‘students’命令查看对列族属性的修改,会发现多了一个score列族的属性描述。
如果要增加的列族不存在,alter命令作用是增加一个新的列族;如果要增加列族已经存在,alter命令作用可以是修改指定列族的属性或删除指定列族。
用法格式2:alter ‘t1’,NAME=>‘f1’,ATTRNAME=>ATTRVALUE
用法说明:修改数据表t1,修改列族f1的属性名为ATTRNAME的属性值为ATTRVALUE。
用法示例1:修改表students的列族属性VERSION
HBase shell终端执行alter 'students',NAME => 'score',VERSIONS => 5命令,输出结果如下:
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.0120 seconds
说明:修改数据表students,将其列族score的列族属性最大版本数VERSIONS修改为5。执行desc ‘students’命令查看表列族属性,发现score列族的列族属性VERSIONS => '5'。注意不能用简写形式的命令alter 'students','info',VERSIONS => '3',虽然命令能执行但是不会生效。
用法示例2:修改表students的列族属性COMPRESSION
HBase shell终端执行alter 'students',NAME=>'score',COMPRESSION=>'GZ'命令,输出结果如下:
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.0000 seconds
说明:修改数据表students的指定列族score的列族属性压缩模式COMPRESSION为GZ。为节省存储空间,HBase将数据保存到HDFS时可按压缩模式进行数据压缩,常用压缩模式有GZ和SNAPPY等。修改完成后可以执行desc ‘students’命令查看对列族属性COMPRESSION的修改。理论上desc命令能查看到的列族属性都可以用alter命令来修改其对应的属性值。
用法示例3:修改表students的列族属性TTL
HBase shell终端执行alter "students",NAME=>'info',TTL=>'300'命令输出结果如下:
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 1.9710 seconds
说明:将students表的info列族的TTL生存时间修改为300秒。300秒后再执行scan ‘students’命令,会发现info列族的数据都不见了,因为超过TTL时间的数据在执行HFile文件小缩并时被清除。
用法格式3:alter 't1',NAME => 'f1',METHOD => 'delete'或alter 't1','delete' => 'f1'
用法说明:修改数据表t1,对其列族名为f1的列族执行删除操作。
用法示例:删除表students的列族score
HBase shell终端执行alter 'students',METHOD => 'delete'命令,输出结果如下:
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.2570 seconds
说明:alter命令执行后可再执行desc ‘students’命令查看对列族属性的修改,会发现score列族已经不存在。请注意执行列族删除操作会将属于该列族的所有数据列全部删除且无任何提示,因此执行该命令需谨慎。还需注意数据表的唯一列族不允许被删除。执行alter 'students',METHOD => 'delete'命令删除数据表students的唯一列族info,终端会给出错误删除提示:
ERROR: org.apache.hadoop.hbase.InvalidFamilyOperationException: Family 'info' is the only column family in the table,so it cannot be deleted
2)数据表级别
数据表级别的修改操作主要是修改数据表级别的属性,这些属性属于一整张表。
用法格式:alter ‘t1’,ATTRNAME1=>ATTRVALUE1,ATTRNAME2=>ATTRVALUE2,....
用法说明:修改表t1的表级别属性ATTRNAME1、ATTRNAME2...
数据表级别操作允许的属性必须是表级别的属性用法示例:修改表students的表级别属性MAX_FILESIZE
HBase shell终端执行alter 'students',MAX_FILESIZE=>134217728命令,输出结果如下:
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.3060 seconds
说明:修改数据表students的文件大小最大值MAX_FILESIZE为134217728字节。修改完成后可执行desc ‘students’命令,查看对列族属性FILESIZE的修改结果:
students,{TABLE_ATTRIBUTES => {MAX_FILESIZE => '134217728'}
3)集群级别
集群级别的修改操作主要是修改HBase集群的配置参数。HBase的数据表或列族属性可以通过在HBase集群配置文件中修改相应配置参数进行修改。例如在配置文件hbase-site.xml中设置配置参数hbase.hstore.blockingStoreFiles,参数含义是当某个region的storefile文件个数达到该值则阻塞数据写入操作。若指定列族名,该配置属性只针对数据表的某列族有效。
alter命令修改集群级别配置参数的优先级高于配置文件hbase-site.xml中相同参数的优先级,hbase-site.xml中的配置参数优先级高于hbase-default.xml文件中的相同参数的优先级。
用法格式1:alter 't1',{ CONFIGURATION=> {ATTRNAME => ATTRVALUE}}
用法说明:修改表t1的集群级别配置参数ATTRNAME,修改对整个数据表t1均有效。
用法示例:修改将数据表students的集群级别配置参数
HBase shell终端执行alter 'students',{CONFIGURATION=> { 'hbase.hstore.blockingStoreFile' => '15' }}命令,输出结果如下:
Updating all regions with the new schema..
1/1 regions updated.
Done.
0 row(s) in 2.2780 seconds
说明:将数据表students的配置参数hbase.hstore.blockingStoreFile修改为15。修改完成后可执行desc ‘students’命令,查看对集群配置参数的修改结果如下:
students,{TABLE_ATTRIBUTES=>{MAX_FILESIZE=>'134217728',CONFIGURATION=>{'hbase.hstore.blockingStoreFile' => '15'}。
用法格式2:alter 't1',{ NAME => 'f1',CONFIGURATION=> {ATTRNAME => ATTRVALUE}}
用法说明:修改表t1的集群级别配置参数ATTRNAME,修改只对表t1的列族f1有效。
用法示例:修改将数据表students的集群级别配置参数
HBase shell终端执行alter 'students',{NAME => 'info',CONFIGURATION=> { 'hbase.hstore.blockingStoreFile' => '15' }}命令,输出结果如下:
Updating all regions with the new schema..
1/1 regions updated.
Done.
0 row(s) in 2.0250 seconds
说明:将students数据表的info列族的hbase.hstore.blockingStoreFiles属性值修改为15,而不会影响整个数据表或数据表的其他列族。修改完成后可执行desc ‘students’命令,查看对列族info的集群配置参数修改结果如下:
{NAME => 'info',REPLICATION_SCOPE => '0',CONFIGURATION => {'hbase.hstore.blockingStoreFile' => '15'}}
- disable命令
disable是禁用表命令,用于禁用指定表名的数据表。
用法格式1:disable 't1'
用法说明:禁用默认名字空间default表名为t1的数据表
用法格式2:disable 'ns1:t1'
用法说明:禁用指定名字空间ns1中表名为t1的数据表
用法示例:禁用默认名字空间的数据表students
HBase Shell终端执行disable 'students'命令,输出结果如下:
0 row(s) in 2.4390 seconds
说明:0 row(s) 表示命令执行成功。
HBase Shell终端执行is_disabled 't1'命令,输出结果如下:
true
0 row(s) in 0.0480 seconds
说明:is_disabled命令是判断数据表是否已被禁用,true表示已禁用。
- enable命令
enable是启用表命令,用于启用指定表名的数据表。
用法格式1:enable 't1'
用法说明:启用默认名字空间default表名为t1的数据表
用法格式2:enable 'ns1:t1'
用法说明:启用指定名字空间ns1中表名为t1的数据表
用法示例:启用默认名字空间的数据表students
HBase Shell终端执行enable 'students'命令,输出结果如下:
0 row(s) in 1.3180 seconds
说明:0 row(s) 表示命令执行成功。
HBase Shell终端执行is_enabled 't1'命令,输出结果如下:
true
0 row(s) in 0.0680 seconds
说明:is_enabled命令是判断数据表是否已启用,true表示已启用。
- drop命令
drop是删除表命令,用于删除指定表名的数据表,只能删除已禁用的数据表。即使表中有数据也会直接被删除,表中数据会丢失,因此执行该命令需谨慎。
用法格式1:drop 't1'
用法说明:删除默认名字空间default表名为t1的数据表
用法格式2:drop 'ns1:t1'
用法说明:删除指定名字空间ns1中表名为t1的数据表
用法示例:删除默认名字空间的数据表students
HBase Shell终端执行drop 'students'命令,部分输出结果如下:
ERROR: Table students is enabled. Disable it first.
Here is some help for this command:
Drop the named table. Table must first be disabled
删除指定名称的数据表时,该表必须首先被禁用。
HBase Shell终端先执行disable 'students'命令,再执行drop 'students'命令,部分输出结果如下:
0 row(s) in 1.3170 seconds
说明:0 row(s) 表示命令执行成功
执行list命令看不到students表说明已被成功删除。
- alter_async命令
alter_async命令是异步修改表命令,用于异步修改表列族的属性。
用法格式:alter_async 't1',NAME => 'f1,VERSIONS => 5
用法说明:异步更新数据表t1的模式,将其列族f1的版本数VERSIONS 修改为5。
用法示例:对数据表students执行表模式的异步更新。
在HBase Shell终端执行alter_async 'students',NAME => 'info',VERSIONS => 5命令,输出结果如下:
0 row(s) in 0.9540 seconds
说明:0 row(s) 表示命令执行成功。该命令和alter命令功能差不多,唯一不同是对表模式的修改是异步的,命令执行后会立即返回,不会等待所有Region列族属性更新完成。
- alter_status命令
alter_status是表模式更新状态查看命令,用于查看数据表每个Region的异步更新状况。获取alter命令的执行状态,表明已有多少region已完成列族属性更新。该命令在执行异步更新表时可以用于查看alter_async命令执行的情况,判断该命令是否执行完毕。
用法格式:alter_status 't1'
用法说明:异步更新数据表t1的模式,将其列族f1的版本数VERSIONS 修改为5。
用法示例:查看数据表t1的表模式更新状态
在HBase Shell终端执行alter_status 't1'命令,输出结果如下:
1/1 regions updated.
Done.
说明:该表共有1个Region完成表模式更新。
- locate_region命令
locate_region是Region寻址命令,用于根据指定行键来定位某一数据行所属Region位于哪个RegionServer节点。该命令实际是对HBase的元数据表hbase:meta进行查询。
用法格式:locate_region 'tableName','key0'
用法说明:根据指定行键key0定位数据表'tableName'的key0行所在的Region位置。
用法示例:定位数据表students的s001行数据所在的Region位置
在HBase Shell终端执行locate_region 'students','s001命令,输出结果如下:
HOST REGION
hbase:60020 {ENCODED => 7b5d6520acc45e83cf401b52b2f41663,NAME => 'students,1618652901895.7b5d6520acc45e83cf401b52b2f41663.',STARTKEY => '',ENDKEY => ''}
1 row(s) in 0.0270 seconds
说明:表students的s001行数据所属Region位于的RegionServer主机名称是HBase:60020,并描述该Region的详细信息,包括表名、Region编码、起止行键等。
2.2 DML分组的操作命令
- DML分组中包含的操作命令很多,主要用于对数据表中的数据进行操作,主要包括全表扫描、读取单行数据、写入数据和删除数据等操作。
- put命令
put是写数据操作命令,对应增删改查中的增加和修改,类似于SQL中的insert和update语句。put命令实际上是针对指定数据列插入一个新的时间戳版本的单元格值。在HBase Shell终端只输入put后按回车键,会提示put命令的完整用法。
用法格式1:put 't1','r1','c1','value'
用法说明:指定数据表t1、行键r1和列名c1,写入一个值为value的数据列单元格,其中t1是表名,r1是行键,c1是列名;列名由列族名列限定符组成,命令用冒号间隔;c1格式为f1:q1,f1是列族名,q1是列限定符;value是单元格值,单元格值是无类型的字节数组。
原文地址:https://blog.csdn.net/qq_35447918/article/details/130366973
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。