通用
status
查看集群状态,有三种可选的参数simple、summary、detailed。
默认为summary。
格式:
- status
- status ‘simple’
- status ‘summary’
- status ‘detailed’
version
查看当前HBase版本。
格式:
- version
whoami
查看当前用户。
格式:
- whoami
table_help
输出关于表操作的帮助信息。
格式:
- table_help
表操作
list
列出所有表名。
格式:
- list
- list ‘通配符’
alter
更改表或者列族定义。如果你传入一个新的列族名,则意味着创建一个新的列族。
(1)建立/修改列族
如果传入新的列族名,可以新建列族;如果传入已存在的列族名,可以修改列族属性。列族属性有:
- BLOOMFILTER
- REPLICATION_SCOPE
- MIN_VERSIONS
- COMPRESSION
- TTL
- BLOCKSIZE
- IN_MEMORY
- IN_MEMORY_COMPACTION
- BLOCKCACHE
- KEEP_DELETED_CELLS
- DATA_BLOCK_ENCODING
- CACHE_DATA_ON_WRITE
- CACHE_DATA_IN_L1
- CACHE_INDEX_ON_WRITE
- CACHE_BLOOMS_ON_WRITE
- EVICT_BLOCKS_ON_CLOSE
- PREFETCH_BLOCKS_ON_OPEN
- ENCRYPTION
- ENCRYPTION_KEY
- IS_MOB_BYTES
- MOB_THRESHOLD_BYTES
(2)建立/修改多个列族
(3)删除列族
(4)修改表级别属性
允许的属性名必须是属于表级别的属性。表级别的属性有:
- MAX_FILESIZE
- READONLY
- MEMSTORE_FLUSHSIZE
- DEFERRED_LOG_FLUSH
- DURABILITY
- REGION_REPLICATION
- NORMALIZATION_ENABLED
- PRIORITY
- IS_ROOT
- IS_META
(5)设置表配置
一般情况下,我们都会把表/列族的配置属性设置在hbasesite.xml文件里面。现在,alter命令给了你一个可以更改专属于这个表/列族的配置属性值的机会。比如我们在hbase-site.xml文件里面配置的hbase.hstore.blockingStoreFiles是10,我们可以将该列族的hbase.hstore.blockingStoreFiles修改为15,而不影响到别的表。
格式:
- alter ‘表名’, CONFIGURATION => { ‘配置名’ => ‘配置值’ }
- alter ‘表名’, { NAME => ‘列族名’, CONFIGURATION=> { ‘配置名’ => ‘配置值’ }}
(6)删除表级别属性:
格式:
- alter ‘表名’, METHOD => ‘table_att_unset’, NAME => ‘属性名’
范例:
(7)同时执行多个命令
你还可以把前面我们说的这些命令都放到一条命令里面去执行。
格式:
- alter ‘表名’, 命令1, 命令2, 命令3
create
建立新表。建立新表的时候可以同时修改表属性。
格式:
- create ‘表名’, { NAME => ‘列族名1’, 属性名 => 属性值}, {NAME => ‘列族名2’, 属性名 => 属性值}, …
如果你只需要创建列族,而不需要定义列族属性,那么可以采用以下快捷写法:
- create’表名’,‘列族名1’ ,‘列族名2’, …
alter_status
查看表的各个Region的更新状况,这条命令在异步更新表的时候,
用来查看更改命令执行的情况,判断该命令是否执行完毕。
格式:
- alter_status
alter_async
异步更新表。使用这个命令你不需要等待表的全部Region更新完后才返回。记得配合alter_status来检查异步表更改命令的执行进度。
格式:
alter_async ‘表名’,参数列表
describe
输出表的描述信息。
格式:
- describe ‘表名’
- desc ‘表名’
disable
停用指定表。
格式:
- disable ‘表名’
disable_all
通过正则表达式来停用多个表。
格式:
- disable_all ‘正则表达式’
is_disabled
检测指定表是否被停用了。
格式:
- is_disabled ‘表名’
drop
删除指定表。
格式:
- drop ‘表名’
drop_all
通过正则表达式来删除多个表。
格式:
- drop_all ‘正则表达式’
enable
启动指定表。
格式:
- enable ‘表名’
enable_all
通过正则表达式来启动指定表。
格式:
- enable_all ‘正则表达式’
is_enabled
判断指定表是否启用。
格式:
- is_enabled ‘表名’
exists
判断指定表是否存在。
格式:
- exists ‘表名’
show_filters
列出所有过滤器。
格式:
- show_filters
范例:
get_table
使用这条命令,你可以把表名转化成一个对象,在下面的脚本中使用这个对象来操作表,达到面向对象的语法风格。这个命令对表并没有实质性的操作,只是让你的脚本看来更好看,类似一种语法糖。
格式:
- 变量 = get_table ‘表名’
locate_region
通过这条命令可以知道你所传入的行键(rowkey)对应的行(row)在哪个Region里面。
格式:
- locate_region ‘表名’, ‘行键’
数据操作
scan
按照行键的字典排序来遍历指定表的数据。
遍历所有数据所有列族。
格式:
- scan ‘表名’
(1)指定列
只遍历指定的列,就像我们在关系型数据库中用select语句做的事情一样。要注意的是,写列名的时候记得把列族名带上,就像这样cf1:name。
格式:
- scan ‘表名’, { COLUMNS => [‘列1’, ‘列2’, …] }
(2)指定行键范围
通过传入起始行键(STARTROW)和结束行键(ENDROW)来遍历指定行键范围的记录。强烈建议每次调用scan都至少指定起始行键或者结束行键,这会极大地加速遍历速度。
格式:
- scan ‘表名’, { STARTROW => ‘起始行键’, END_ROW => ‘结束行键’ }
(3)指定最大返回行数量
通过传入最大返回行数量(LIMIT)来控制返回行的数量。类似我们在传统关系型数据库中使用limit语句的效果。
格式:
- scan ‘表名’, { LIMIT => 行数量}
(4)指定时间戳范围
通过指定时间戳范围(TIMERANGE)来遍历记录,可以使用它来找出单元格的历史版本数据。
格式:
- scan ‘表名’, { TIMERANGE => [最小时间戳, 最大时间戳]}
提示
返回结果包含最小时间戳的记录,但是不包含最大时间戳记录。这是一个左闭右开区间。
范例:
注意row1的cf1:name单元格显示的值是jack。现在,我们使用不带TIMERANGE参数的scan命令来查询row1的记录:
可以看到row1的cf1:name单元格最新值其实是apollo,所以使用了TIMERANGE参数后,我们将该单元格的之前的历史记录查询出来了。
(5)显示单元格的多个版本值
通过制定版本数(VERSIONS),可以显示单元格的多个版本值。
格式:
- scan ‘表名’, {VERSIONS => 版本数}
范例:
(6)显示原始单元格记录
在HBase被删除掉的记录并不会立即从磁盘上清除,而是先被打上墓碑标记,然后等待下次major compaction的时候再被删除掉。所谓的原始单元格记录就是连已经被标记为删除但是还未被删除的记录都显示出来。通过添加RAW参数来显示原始记录,不过这个参数必须配合VERSIONS参数一起使用。RAW参数不能跟COLUMNS参数一起使用。
格式:
- scan ‘表名’, { RAW => true, VERSIONS => 版本数}
你可以看到一个时间戳为1504048716932的墓碑标记在记录值为michael的记录里,这意味着michael这个记录已经被标记为删除了。
(7)指定过滤器
通过使用FILTER参数来指定要使用的过滤器。
格式:
- scan ‘表名’, { FILTER => “过滤器”}
get
通过行键获取某行记录。
格式:
- get ‘表名’, ‘行键’
范例:
get支持scan所支持的大部分属性,具体支持的属性如下:
- COLUMNS
- TIMERANGE
- VERSIONS
- FILTER
count
计算表的行数。
简单计算。
格式:
- count ‘表名’
(1)指定计算步长
通过指定INTERVAL参数来指定步长。如果你使用不带参数的count
命令,要等到所有行数都计算完毕才能显示结果;如果指定了INTERVAL
参数,则shell会立即显示当前计算的行数结果和当前所在的行键。
格式:
- count ‘表名’, INTERVAL => 行数计算步长
(2)指定缓存
通过指定缓存加速计算过程。
格式:
- count ‘表名’, CACHE => 缓存条数
delete
删除某个列的数据。
格式:
- delete ‘表名’, ‘行键’, ‘列名’
- delete ‘表名’, ‘行键’, ‘列名’,时间戳
deleteall
可以使用deleteall删除整行数据,也可以删除单列数据,它就像是delelte的增强版。
格式:
- deleteall ‘表名’, ‘行键’
- deleteall ‘表名’, ‘行键’, ‘列名’
- deleteall ‘表名’, ‘行键’, ‘列名’,时间戳
incr
为计数器单元格的值加1,如果该单元格不存在,则创建一个计数器单元格。所谓计数器单元格就是一个可以做原子加减计算的特殊单元
格。
格式:
- incr ‘表名’, ‘行键’,’ ‘列名’
- incr ‘表名’, ‘行键’, ‘列名’,加减值
范例:
put
put操作在新增记录的同时还可以为记录设置属性。
格式:
- put ‘表名’, ‘行键’, ‘列名’, ‘值’
- put ‘表名’, ‘行键’, ‘列名’, ‘值’,时间戳
- put ‘表名’, ‘行键’, ‘列名’, ‘值’, { ‘属性名’ => ‘属性值’}
- put ‘表名’, ‘行键’, ‘列名’, ‘值’,时间戳, { ‘属性名’ =>‘属性值’}
- put ‘表名’, ‘行键’, ‘列名’, ‘值’, { ATTRIBUTES => {‘属性名’ => ‘属性名’}}
- put ‘表名’, ‘行键’, ‘列名’, ‘值’,时间戳, { ATTRIBUTES =>{‘属性’ => ‘属性名’}}
- put ‘表名’, ‘行键’, ‘列名’, ‘值’,时间戳, { VISIBILITY =>‘PRIVATE|SECRET’ }
append
给某个单元格的值拼接上新的值。原本我们要给单元格的值拼接新值,需要先get出这个单元格的值,拼接上新值后再put回去。append这个操作简化了这两步操作为一步完成。不仅方便,而且保证了原子性。
格式:
- append ‘表名’, ‘行键’, ‘列名’, ‘值’
- append ‘表名’, ‘行键’, ‘列名’, ‘值’, ATTRIBUTES => {‘自定义键’ => ‘自定义值’}
- append ‘表名’, ‘行键’, ‘列名’, ‘值’, {VISIBILITY =>'PRIVATE|SECRET '}
truncate
这个命令跟关系型数据库中同名的命令做的事情是一样的:清空表内数据,但是保留表的属性。不过HBase truncate表的方式其实就是先帮你删掉表,然后帮你重建表。
格式:
- truncate ‘表名’
truncate_preserve
这个命令也是清空表内数据,但是它会保留表所对应的Region。当你希望保留Region的拆分规则时,可以使用它,避免重新定制Region拆分规则。
格式:
- truncate_preserve ‘表名’
get_splits
获取表所对应的Region个数。因为一开始只有一个Region,由于Region的逐渐变大,Region被拆分(split)为多个,所以这个命令叫get_splits。
格式:
- get_splits ‘表名’
工具方法
close_region
下线指定的Region。下线Region可以通过指定Region名,也可以指定Region名的hash值。那么怎么拿到Region名呢?可以通过前面介绍的locate_region命令来获取某个行键所在的Region。Region名的hash值就是Region名的最后一段字符串,该字符串夹在两个句点之间。我们来一个例子。执行了locate_region之后的输出是这样的:
从输出中可以看出:
Region名:
table1,1503250079525.85b7e814d52c22acc11d337d0e4190ee。
Region名的hash值:85b7e814d52c22acc11d337d0e4190ee。
服务器标识码是类似这样的一串字符串:
它由服务器名+端口+启动码组成。你可以通过查询hbase:meta表知道某个Region的信息,就拿刚刚看到的table1,1503250079525.85b7e814d52c22acc11d337d0e4190ee.举例吧。执行以下shell命令:
这个Region对应的服务器标识码是:nn02,16020,1499985181271。
格式:
- close_region ‘region名字’
- close_region ‘region名字’, ‘服务器标识码’
- close_region ‘region名的hash值’, ‘服务器标识码’
unassign
下线指定的Region后马上随机找一台服务器上线该Region。如果跟上第二个参数true,则会在关闭Region之前清空Master中关于该Region的上线状态,在某些出故障的情况下,Master中记录的Region上线状态可能会跟Region实际的上线状态不相符,不过一般情况下你不会用到第二个参数。
格式:
- unassign ‘region名字’
- unassign ‘region名字’, true
assign
上线指定的Region,不过如果你指定了一个已经上线的Region的
话,这个Region会被强制重上线。
格式:
- assign ‘region名字’
move
移动一个Region。你可以传入目标服务器的服务器标识码来将Region移动到目标服务器上。如果你不传入目标服务器的服务器标识码,那么就会将Region随机移动到某一个服务器上,就跟unassign操作
的效果一样。该方法还有一个特殊的地方就是,它只接受Region名的hash值,而不是Region名。关于Region名的hash值和服务器标识码的知识,已经在close_region命令中介绍过了,在此不再赘述。
格式:
- move ‘region名的hash值’, ‘服务器标识码’
split
拆分(split)指定的Region。除了可以等到Region大小达到阈值后触发自动拆分机制来拆分Region,我们还可以手动拆分指定的Region。通过传入切分点行键,我们可以从我们希望的切分点切Region。
格式:
- split ‘表名’
- split ‘region名’
- split ‘表名’, ‘切分点行键’
- split ‘region名’, ‘切分点行键’
执行后等待一段时间,再查看Region信息:
可以看到Region被拆分为2个Region了。
merge_region
合并(merge)两个Region为一个Region。如果传入第二个参数’true’,则会触发一次强制合并(merge)。该命令的接收参数为Region名的hash值,即Region名最后两个句点中的那段字符串(不包含句点)。拿我们上一个命令split中的例子来说:
的Region名的hash值为:
格式:
- merge_region ‘region1名的hash值’, ’ region2名的hash值’
- merge_region ‘region1名的hash值’, ’ region2名的hash值’,true
范例:
我们在上一个命令split中拆分出了2个Region,分别是:
和
现在我们来将其合并为一个Region,命令如下:
执行该条命令后,等待一段时间,再去查看该表的Region情况,可以看到现在该表只有一个Region:
compact
调用指定表的所有Region或者指定列族的所有Region的合并
(compact)机制。通过compact机制可以合并该Region或者该Region的
列族下的所有HFile(StoreFile),以此来提高读取性能。
格式:
- compact ‘表名’
- compact ‘region名’
- compact ‘region名’, ‘列族名’
- compact ‘表名’, ‘列族名’
提示
compact跟合并(merge)并不一样。merge操作是合并2个Region为1个Region,而compact操作着眼点在更小的单元:StoreFile,一个Region可以含有一个或者多个StoreFile,compact操作的目的在于减少StoreFile的数量以增加读取性能。
major_compact
在指定的表名/region/列族上运行major compaction。
格式:
- major_compact ‘表名’
- major_compact ‘region名’
- major_compact ‘region名’, ‘列族名’
- major_compact ‘表名’, ‘列族名’
compact_rs
调用指定RegionServer上的所有Region的合并机制,加上第二个参数true,意味着执行major compaction。
格式:
- compact_rs ‘服务器标识码’
- compact_rs ‘服务器标识码’, true
balancer
手动触发平衡器(balancer)。平衡器会调整Region所属的服务器,让所有服务器尽量负载均衡。如果返回值为true,说明当前集群的状况允许运行平衡器;如果返回false,意味着有些Region还在执行着某些操作,平衡器还不能开始运行。
格式:
- balancer
balance_switch
打开或者关闭平衡器。传入true即为打开,传入false即为关闭。
格式:
- balance_switch true
- balance_switch false
提示
返回值为平衡器(balancer)的前一个状态,在范例中平衡器(balancer)在执行balance_switch操作前的状态是关闭的。
balancer_enabled
检测当前平衡器是否开启。
格式:
- balancer_enabled
catalogjanitor_run
开始运行目录管理器(catalog janitor)。所谓的目录指的就是hbase:meta表中存储的Region信息。当HBase在拆分或者合并的时候,为了确保数据不丢失,都会保留原来的Region,当拆分或者合并过程结束后再等待目录管理器来清理这些旧的Region信息。
格式:
- catalogjanitor_run
catalogjanitor_enabled
查看当前目录管理器的开启状态。
格式:
- catalogjanitor_enabled
catalogjanitor_switch
启用/停用目录管理器。该命令会返回命令执行后状态的前一个状态。
格式:
- catalogjanitor_switch true
- catalogjanitor_switch false
normalize
规整器用于规整Region的尺寸,通过该命令可以手动启动规整器。只有NORMALIZATION_ ENABLED为true的表才会参与规整过程。如果返回true,则说明规整器启动成功;如果某个Region被设置为禁用规整器,则该命令不会对其产生任何效果。
格式:
- normalize
normalizer_enabled
查看规整器的启用/停用状态。
格式:
- normalizer_enabled
normalizer_switch
启用/停用规整器。该命令会返回规整器的前一个状态。
格式:
- normalizer_switch true
- normalizer_switch false
flush
手动触发指定表/Region的刷写。所谓的刷写就是将memstore内的
数据持久化到磁盘上, 称为HFile文件。
格式:
- flush ‘表名’
- flush ‘region名’
- flush ‘region名的hash值’
trace
启用/关闭trace功能。不带任何参数地执行该命令会返回trace功能的开启/关闭状态。当第一个参数使用’start’的时候,会创建新的trace段(trace span);如果传入第二个参数还可以指定trace段的名称,否则默认使用’HBaseShell’作为trace段的名称;当第一个参数传入’stop’的时候,当前trace段会被关闭;当第一个参数使用’status’的时候,会返回当前trace功能的开启/关闭状态。
格式:
- trace
- trace ‘start’
- trace ‘start’, ‘trace段名称’
- trace ‘stop’
- trace ‘status’
wal_roll
手动触发WAL的滚动。
格式:
- wal_roll ‘服务器标识码’
zk_dump
打印出ZooKeeper集群中存储的HBase集群信息。
格式:
- zk_dump
快照
snapshot
快照(snapshot)就是表在某个时刻的结构和数据。可以使用快照来将某个表恢复到某个时刻的结构和数据。通过snapshot命令可以创建指定表的快照。
格式:
- snapshot ‘表名’, ‘快照名’
- snapshot ‘表名’, ‘快照名’, { SKIP_FLUSH => true }
范例:
list_snapshots
列出所有快照。可以传入正则表达式来查询快照列表。
格式:
- list_snapshots
- list_snapshots ‘正则表达式’
restore_snapshot
使用快照恢复表。由于表的数据会被全部重置,所以在根据快照恢复表之前,必须要先停用该表。
格式:
- restore_snapshot ‘快照名’
clone_snapshot
使用快照的数据创建出一张新表。创建的过程很快,因为使用的方式不是复制数据,并且修改新表的数据也不会影响旧表的数据。
格式:
- clone_snapshot ‘快照名’, ‘新表名’
delete_snapshot
删除快照。
格式:
- delete_snapshot ‘快照名’
范例:
delete_all_snapshot
同时删除多个跟正则表达式匹配的快照。
格式:
- delete_all_snapshot ‘正则表达式’
命名空间
list_namespace
列出所有命名空间。你还可以通过传入正则表达式来过滤结果。
格式:
- list_namespace
- list_namespace ‘正则表达式’
list_namespace_tables
列出该命名空间下的表。
格式:
- list_namespace_tables’命名空间名’
create_namespace
创建命名空间。你还可以在创建命名空间的同时指定属性。
格式:
- create_namespace’命名空间名’
- create_namespace’命名空间名’, { ‘属性名’ => ‘属性值’ }
describe_namespace
显示命名空间定义。
格式:
- describe_namespace’命名空间名’
范例:
alter_namespace
更改命名空间的属性或者删除该属性。如果METHOD使用set表示设
定属性,使用unset表示删除属性。
格式:
- alter_namespace’命名空间名’, {METHOD => ‘set’, ‘属性名’=> ‘属性值’}
- alter_namespace’命名空间名’, {METHOD => ‘unset’,NAME=>‘属性值’}
drop_namespace
删除命名空间。不过在删除之前,请先确保命名空间内没有表,否则你会得到以下报错信息:
格式:
- drop_namespace’命名空间名’
配置
update_config
要求指定服务器重新加载配置文件。参数为服务器标识码。
格式:
- update_config ‘服务器标识码’
update_all_config
要求所有服务器重新加载配置文件。
格式:
- update_all_config
以上内容不包括标签,备份和安全部分