最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
开启左侧

[Hbase] Hbase常用命令

[复制链接]
发表于 2020-3-5 16:33:17 | 显示全部楼层 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 168主编 于 2020-3-5 16:47 编辑

HBase 提供了一个非常方便的命令行交互工具 HBase Shell。通过 HBase Shell 可以创建表,也可以增删查数据,同时集群的管理、状态查看等也可以通过 HBase shell 实现。
HBase Shell 用法:
  • 确保用 HBase Shell 对所有名称使用双引号,例如表名和列名。
  • 逗号分隔命令参数。
  • 在输入要运行的命令之后,键入。
  • 在表的创建和更改中,我们使用配置字典,它们是Ruby哈希。看起来像:{‘key1’ => ‘value1’, ‘key2’ => ‘value2’, …}。
1. 连接HBase Shell
通过使用以下命令,我们可以通过 Shell 连接到正在运行的 HBase:
./bin/hbase shell
键入 help 然后回车可以查看 Shell 命令以及参数列表:
[AppleScript] 纯文本查看 复制代码
hbase(main):001:0> help
HBase Shell, version 2.1.6, rba26a3e1fd5bda8a84f99111d9471f62bb29ed1d, Mon Aug 26 20:40:38 CST 2019
Type 'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific command.
Commands are grouped. Type 'help "COMMAND_GROUP"', (e.g. 'help "general"') for help on a command group.

COMMAND GROUPS:
  Group name: general
  Commands: processlist, status, table_help, version, whoami
...

如果想退出 Shell,可以通过键入 exit 退出:
hbase(main):002:0> exit

2. 常规命令
在 Hbase 中,有如下常规命令:
  • status
  • version
  • whoami
2.1 status
可以使用 status 命令展示 HBase 集群的系统状态的详细,例如服务器数量:
[AppleScript] 纯文本查看 复制代码
hbase(main):001:0> status
1 active master, 0 backup masters, 1 servers, 0 dead, 3.0000 average load
Took 0.3686 seconds

我们还可以传递特定参数,具体取决于我们想了解系统的哪些详细状态。参数可以为 summary,simple,detailed 或 replication。默认不填为 summary。下面我们展示了如何将不同的参数传递给 status 命令:
[AppleScript] 纯文本查看 复制代码
hbase> status
hbase> status 'simple'
hbase> status 'summary'
hbase> status 'detailed'
hbase> status 'replication'
hbase> status 'replication', 'source'
hbase> status 'replication', 'sink'


2.2 version
可以使用 version 命令展示当前使用的 HBase 版本:
[AppleScript] 纯文本查看 复制代码
hbase(main):005:0> version
2.1.6, rba26a3e1fd5bda8a84f99111d9471f62bb29ed1d, Mon Aug 26 20:40:38 CST 2019



2.3 whoami
可以使用 whoami 命令展示当前 HBase 用户:
[AppleScript] 纯文本查看 复制代码
hbase(main):010:0> whoami
smartsi (auth:SIMPLE)
    groups: staff, everyone, localaccounts, _appserverusr, admin, _appserveradm, _lpadmin, com.apple.sharepoint.group.1, _appstore, _lpoperator, _developer, _analyticsusers, com.apple.access_ftp, com.apple.access_screensharing, com.apple.access_ssh


3. DDL命令
数据定义语言(Data Definition Language, DDL),包括数据库表的创建、修改、删除等语句。
在 Hbase 中,有如下数据定义命令:
  • Create
  • Exists
  • Describe
  • List
  • Disable
  • Disable_all
  • Is_disabled
  • Enable
  • Enable_all
  • Is_enabled
  • Alter
  • Drop
3.1 Create
可以使用 create 命令创建表,必须指定表名和列族名,以及可选的命名空间参数。列族名可以是一个简单的字符串,也可以是包含 NAME 属性的字典:
[AppleScript] 纯文本查看 复制代码
hbase(main):002:0> create 't1', 'f1', 'f2', 'f3'
Created table t1
Took 2.7450 seconds
=> Hbase::Table - t1

上述命令也可以通过字典方式创建:
create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}

上面命令均没有指定命名空间,默认为 default。使用如下命令在 ns1 命名空间下创建 t1 表:

[AppleScript] 纯文本查看 复制代码
hbase(main):026:0> create 'ns1:t1', 'f1', 'f2', 'f3'[/align]Created table ns1:t1
Took 2.4030 seconds
=> Hbase::Table - ns1:t1


命名空间是表的逻辑分组,类似于关系数据库系统中的数据库。这种抽象为多租户相关功能奠定了基础。具体使用可以查阅HBase 命名空间 Namespace

3.2 Exists
可以使用 exists 命令判断表是否存在:
[AppleScript] 纯文本查看 复制代码
hbase> exists 't1'
hbase> exists 'ns1:t1'

例如,使用如下命令查看表 t1 是否存在:
[AppleScript] 纯文本查看 复制代码
hbase(main):003:0> exists 't1'
Table t1 does exist
Took 0.0914 seconds
=> true
hbase(main):029:0> exists 'ns1:t1'
Table ns1:t1 does exist
Took 0.1863 seconds
=> true



3.3 Describe
可以使用 describe 命令查看表信息:
[AppleScript] 纯文本查看 复制代码
hbase> describe 't1'
hbase> describe 'ns1:t1'

或者简写为:
[AppleScript] 纯文本查看 复制代码
hbase> desc 't1'
hbase> desc 'ns1:t1'

例如,使用如下命令查看表 t1 的具体信息:
[AppleScript] 纯文本查看 复制代码
hbase(main):043:0> describe 't1'
Table t1 is ENABLED
t1
COLUMN FAMILIES DESCRIPTION
{NAME => 'f1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERS
IONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE
 => 'true', BLOCKSIZE => '65536'}
...
Took 0.0319 seconds

可以看到在建表的时候没有指定任何属性,但是 HBase 默认会给表设置一些属性:
  • VERSIONS:HBase 对表的数据行可以保留多个数据版本,以时间戳来区分。VERSIONS 表示对该表应该保留多少个数据版本。
  • KEEP_DELETED_CELLS:保留删除的数据。这意味着可以通过 Get 或 Scan 操作获取已经被删除的数据(如果数据删除后经过了一次主压缩,那么这些删除的数据也会被清理)。需要注意的是,如果开启了集群间复制,则这个属性必须设置为 true,否则可能导致数据复制失败。
  • DATA_BLOCK_ENCODING:数据块编码。用类似压缩算法的编码形式来节省存储空间,主要是针对行键。默认情况下不启用数据块编码。
  • TTL:数据有效时长。超过有效时长的数据在主压缩的时候会被删除。
  • BLOOMFILTER:布隆过滤器。数据查询 Scan 操作的时候用来排除待扫描的 StoreFile 文件。
  • REPLICATION_SCOPE:集群间数据复制开关。当集群间数据复制配置好之后 REPLICATION_SCOPE = 1 的表会开启复制。默认为 0,表示不开启复制。
  • COMPRESSION:压缩方式。HBase 提供了多种压缩方式来在数据存储到磁盘之前压缩以减少存储空间。
  • BLOCKSIZE:HBase 读取数据的最小单元。设置过大会导致读取很多不需要的数据,过小则会产生过多的索引文件,默认为 64 KB。
3.4 List
可以使用 list 命令查看 HBase 中用户自定义的表,也可以使用正则表达式查询:
[AppleScript] 纯文本查看 复制代码
hbase> list
hbase> list 'abc.*'
hbase> list 'ns:abc.*'
hbase> list 'ns:.*'

例如,使用如下命令查看所有的表:
[AppleScript] 纯文本查看 复制代码
hbase(main):045:0> list
TABLE
ns1:t1
ns1:test
t1
test
4 row(s)
Took 0.0075 seconds
=> ["ns1:t1", "ns1:test", "t1", "test"]



3.5 Disable
可以使用 disable 命令禁用表:
[AppleScript] 纯文本查看 复制代码
hbase(main):050:0> disable 'test'
Took 0.7409 seconds
hbase(main):051:0> disable 'ns1:test'
Took 0.4331 seconds



3.6 Disable_all
可以使用 disable_all 命令禁用满足正则表达式条件的表:
[AppleScript] 纯文本查看 复制代码
hbase> disable_all 't.*'
hbase> disable_all 'ns:t.*'
hbase> disable_all 'ns:.*'



3.7 Is_disabled
可以使用 is_disabled 命令查看表是否被禁用:
[AppleScript] 纯文本查看 复制代码
hbase> is_disabled 't1'
hbase> is_disabled 'ns1:t1'

例如,使用如下命令查看表 t1 是否被禁用:

[AppleScript] 纯文本查看 复制代码
hbase(main):009:0> is_disabled 't1'
true
Took 0.0269 seconds
=> 1


3.8 Enable
可以使用 enable 命令启用表:
[AppleScript] 纯文本查看 复制代码
hbase> enable 't1'
hbase> enable 'ns1:t1'



3.9 Enable_all
可以使用 enable_all 命令启用满足正则表达式条件的表:
[AppleScript] 纯文本查看 复制代码
hbase> enable_all 't.*'
hbase> enable_all 'ns:t.*'
hbase> enable_all 'ns:.*'



3.10 Is_enabled
可以使用 is_enabled 命令查看表是否启用:
hbase> is_enabled 't1'hbase> is_enabled 'ns1:t1'
例如,使用如下命令查看表 t1 是否启用:
hbase(main):004:0> is_enabled 't1'falseTook 0.0242 seconds=> false


3.11 Alter
可以使用 alter 命令对 Hbase 的表以及列族进行修改,如新增一个列族、修改表属性,增加协处理器等等。修改表的模式之前需要先将表下线(禁用),然后执行修改命令,再上线(启用)。例如,使用如下命令修改表列族 f1 可以最多保留5个版本的数据:
hbase(main):012:0> alter 't1', NAME => 'f1', VERSIONS => 5Updating all regions with the new schema...All regions updated.Done.Took 1.3834 seconds
我们也可以同时操作多个列族:
hbase> alter 't1', 'f1', {NAME => 'f2', IN_MEMORY => true}, {NAME => 'f3', VERSIONS => 5}
我们可以使用如下方法删除表 ns1:t1 中的 f3 列族:
hbase> alter 'ns1:t1', NAME => 'f3', METHOD => 'delete'hbase> alter 'ns1:t1', 'delete' => 'f3'


3.12 drop
可以使用 drop 命令删除表,但是表必须首先要禁用表:
hbase(main):052:0> drop 't1'Took 0.2300 secondshbase(main):053:0> drop 'ns1:t1'Took 0.2357 seconds


4. DML命令
数据操纵语言(Data Manipulation Language, DML),包括数据的修改、查询、删除等语句。
在 Hbase 中,有如下数据操纵命令:
  • Put
  • Get
  • Scan
  • Count
  • Append
  • Delete
  • Deleteall
  • Truncate
4.1 Put
可以使用 put 命令将一行数据插入到 HBase 表中:
put <table>, <rowkey>, <列族:列标示符>, <值>
例如,使用如下命令分别在表 t1、ns1:t1 插入一行数据:
[AppleScript] 纯文本查看 复制代码
put 't1', 'r1', 'f1:c1', 'this is first value'
put 'ns1:t1', 'r1', 'f1:c1', 'this is first value of ns1'



4.2 Get
可以使用 get 命令获取 HBase 表的一行或者一个单元的内容:
[AppleScript] 纯文本查看 复制代码
hbase> get 'ns1:t1', 'r1'
hbase> get 't1', 'r1'
hbase> get 't1', 'r1', {TIMERANGE => [ts1, ts2]}
hbase> get 't1', 'r1', {COLUMN => 'c1'}
hbase> get 't1', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1}
hbase> get 't1', 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4}
hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1, VERSIONS => 4}
hbase> get 't1', 'r1', {FILTER => "ValueFilter(=, 'binary:abc')"}
hbase> get 't1', 'r1', 'c1'
hbase> get 't1', 'r1', 'c1', 'c2'
hbase> get 't1', 'r1', ['c1', 'c2']
hbase> get 't1', 'r1', {COLUMN => 'c1', ATTRIBUTES => {'mykey'=>'myvalue'}}
hbase> get 't1', 'r1', {COLUMN => 'c1', AUTHORIZATIONS => ['PRIVATE','SECRET']}
hbase> get 't1', 'r1', {CONSISTENCY => 'TIMELINE'}
hbase> get 't1', 'r1', {CONSISTENCY => 'TIMELINE', REGION_REPLICA_ID => 1}


例如,使用如下命令可以获取表 t1 的一条记录:
[AppleScript] 纯文本查看 复制代码
hbase(main):028:0> get 'ns1:t1', 'r1'
COLUMN                                              CELL
 f1:c1                                              timestamp=1573986505024, value=this is third value of ns1
1 row(s)
Took 0.0299 seconds

Get 也可以支持获取多个版本的数据,但是需要修改表的 VERSIONS 属性以支持多版本:
[AppleScript] 纯文本查看 复制代码
hbase(main):019:0> alter 'ns1:t1', NAME => 'f1', VERSIONS => 3
Updating all regions with the new schema...
1/1 regions updated.
Done.
Took 1.8057 seconds

hbase(main):027:0> get 'ns1:t1', 'r1', {COLUMN => 'f1:c1', VERSIONS => 3}
COLUMN                                              CELL
 f1:c1                                              timestamp=1573986505024, value=this is third value of ns1
 f1:c1                                              timestamp=1573986499590, value=this is second value of ns1
 f1:c1                                              timestamp=1573986493844, value=this is first value of ns1
1 row(s)
Took 0.0070 seconds



4.3 Scan
可以使用 scan 命令来扫描表的数据。该命令是 HBase 数据查询命令中最复杂的命令,需要特别注意查询的数据量,以免由于扫描数据过大导致 HBase 集群出现响应延迟:
[AppleScript] 纯文本查看 复制代码
hbase(main):042:0> scan 'ns1:t1'
ROW                                                 COLUMN+CELL
 r1                                                 column=f1:c1, timestamp=1573994164276, value=this is first value of r1
 r2                                                 column=f1:c1, timestamp=1573994095092, value=this is first value of r2
 r3                                                 column=f1:c1, timestamp=1573994102776, value=this is first value of r3
 r4                                                 column=f1:c1, timestamp=1573994109851, value=this is first value of r4
 r5                                                 column=f1:c1, timestamp=1573994116959, value=this is first value of r5
 r6                                                 column=f1:c1, timestamp=1573994123621, value=this is first value of r6
 r7                                                 column=f1:c1, timestamp=1573994130600, value=this is first value of r7
 r8                                                 column=f1:c1, timestamp=1573994138110, value=this is first value of r8
8 row(s)
Took 0.0137 seconds

我们也可以通过指定时间区间获取某个时刻的数据:
[AppleScript] 纯文本查看 复制代码
hbase(main):043:0> scan 'ns1:t1', {TIMERANGE => [1573994102776, 1573994130600]}
ROW                                                 COLUMN+CELL
 r3                                                 column=f1:c1, timestamp=1573994102776, value=this is first value of r3
 r4                                                 column=f1:c1, timestamp=1573994109851, value=this is first value of r4
 r5                                                 column=f1:c1, timestamp=1573994116959, value=this is first value of r5
 r6                                                 column=f1:c1, timestamp=1573994123621, value=this is first value of r6
4 row(s)
Took 0.0786 seconds
我们也可以从 r6 行键开始获取 2 条记录:
[AppleScript] 纯文本查看 复制代码
hbase(main):002:0> scan 'ns1:t1', {COLUMNS => 'f1:c1', LIMIT => 2, STARTROW => 'r6'}
ROW                                                 COLUMN+CELL
 r6                                                 column=f1:c1, timestamp=1573994123621, value=this is first value of r6
 r7                                                 column=f1:c1, timestamp=1573994130600, value=this is first value of r7
2 row(s)
Took 0.4751 seconds


4.4 Count

可以使用 count 命令统计表的行数:
hbase(main):005:0> count 'ns1:t1'8 row(s)Took 0.0726 seconds=> 8
此操作可能需要花费很长的时间,因为会使用 $hadoop_HOME/bin/hadoop/jarhbase.jar rowcount 命令来运行计数 MapReduce 作业。
默认情况下每 1000 行展示当前统计的计数,也可以通过 INTERVAL 属性重新指定计数间隔,如下每 2 行展示一次计数:
[AppleScript] 纯文本查看 复制代码
hbase(main):007:0> count 'ns1:t1', INTERVAL => 2
Current count: 2, row: r2
Current count: 4, row: r4
Current count: 6, row: r6
Current count: 8, row: r8
8 row(s)
Took 0.0200 seconds
=> 8

4.5 Append
可以使用 append 命令向指定的单元上在原先值上追加新值:
hbase> append 't1', 'r1', 'c1', 'value'
例如,使用如下命令在原先的值后面追加, append a new value:
[AppleScript] 纯文本查看 复制代码
hbase(main):047:0> get 'ns1:t1', 'r1'
COLUMN                                              CELL
 f1:c1                                              timestamp=1573994164276, value=this is first value of r1
1 row(s)
Took 0.0475 seconds
hbase(main):049:0> append 'ns1:t1', 'r1', 'f1:c1', ', append a new value'
CURRENT VALUE = this is first value of r1, append a new value
Took 0.0119 seconds
hbase(main):050:0> get 'ns1:t1', 'r1'
COLUMN                                              CELL
 f1:c1                                              timestamp=1573996248316, value=this is first value of r1, append a new value
1 row(s)
Took 0.0171 seconds

4.6 Delete
可以使用 delete 命令删除某列数据。如果我们指定了时间戳,那么我们只会删除对应版本的单元数据:
[AppleScript] 纯文本查看 复制代码
hbase(main):027:0> put 't1', 'r1', 'f1:c1', 'f1:c1:value1'
Took 0.0029 seconds
hbase(main):028:0> put 't1', 'r1', 'f1:c2', 'f1:c2:value1'
Took 0.0032 seconds
hbase(main):029:0> delete 't1', 'r1', 'f1:c1'
Took 0.0040 seconds
hbase(main):030:0> scan 't1'
ROW                                         COLUMN+CELL
 r1                                         column=f1:c2, timestamp=1577537013630, value=f1:c2:value1
1 row(s)
Took 0.0097 seconds
hbase(main):031:0> delete 't1', 'r1', 'f1:c2'
Took 0.0056 seconds
hbase(main):032:0> scan 't1'
ROW                                         COLUMN+CELL
0 row(s)
Took 0.0035 seconds



4.7 Deleteall
可以使用 deleteall 命令删除整行数据:
[AppleScript] 纯文本查看 复制代码
hbase(main):033:0> put 't1', 'r1', 'f1:c1', 'f1:c1:value1'
Took 0.0030 seconds
hbase(main):034:0> put 't1', 'r1', 'f1:c2', 'f1:c2:value1'
Took 0.0044 seconds
hbase(main):035:0> deleteall 't1', 'r1'
Took 0.0038 seconds
hbase(main):036:0> scan 't1'
ROW                                         COLUMN+CELL
0 row(s)
Took 0.0036 seconds


4.8 Truncate
可以使用 truncate 命令清空整个表的数据:
[AppleScript] 纯文本查看 复制代码
hbase(main):037:0> put 't1', 'r1', 'f1:c1', 'f1:c1:value1'
Took 0.0053 seconds
hbase(main):038:0> put 't1', 'r2', 'f1:c1', 'f1:c1:value2'
Took 0.0031 seconds
hbase(main):039:0> put 't1', 'r3', 'f1:c1', 'f1:c1:value3'
Took 0.0037 seconds
hbase(main):040:0> scan 't1'
ROW                                         COLUMN+CELL
 r1                                         column=f1:c1, timestamp=1577537153001, value=f1:c1:value1
 r2                                         column=f1:c1, timestamp=1577537167747, value=f1:c1:value2
 r3                                         column=f1:c1, timestamp=1577537173985, value=f1:c1:value3
3 row(s)
Took 0.0072 seconds
hbase(main):041:0> truncate 't1'
Truncating 't1' table (it may take a while):
Disabling table...
Truncating table...
Took 2.6141 seconds
hbase(main):042:0> scan 't1'
ROW                                         COLUMN+CELL
0 row(s)
Took 0.7199 seconds


原文:HBase Shell & Commands – Usage & Starting HBase Shell

[AppleScript] 纯文本查看 复制代码
**

一般操作:
-----

**

hbase(main)> status
hbase(main)> version
创建命名空间: namespace指的是一个 表的逻辑分组 ,同一组中的表有类似的用途,相当于关系型数据库中的database。
hbase(main):060:0> create_namespace 'test1'
drop_namespace 

创建该命名空间的表:
hbase(main):061:0> create 'test1:test','f1','f2'
create 'scores',{NAME=>'course',VERSIONS=>2}

1)查看有哪些表 list   describe 
hbase(main)> list
hbase(main)> describe 'member'

2)创建表 create  只创建列族就可,put数据时直接
# 语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
# 例如:创建表t1,有两个family name:f1,f2,且版本数均为2
hbase(main)> create 't1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2}

3)删除表
分两步:首先disable,然后drop
例如:删除表t1
hbase(main)> disable 't1'
hbase(main)> drop 't1'

4)查看表的结构
# 语法:describe <table>
# 例如:查看表t1的结构
hbase(main)> describe 't1'

5)修改表结构  alter
修改表结构必须先disable
alter 't1', {NAME => 'f1', VERSIONS => 5}
# 语法:alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
# 例如:修改表test1的cf的TTL为180天
hbase(main)> disable 'test1'
hbase(main)> alter 'test1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'}
hbase(main)> enable 'test1'

6)添加数据 put
# 语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
# 例如:给表t1的添加一行记录:rowkey是rowkey001,family name:f1,column name:col1,value:value01,timestamp:系统默认
hbase(main)> put 't1','rowkey001','f1:col1','value01'
用法比较单一。

7)查询数据 
a)查询某行记录  get
# 语法:get <table>,<rowkey>,[<family:column>,....]
查询rowkey001一行下的所有列值:
hbase(main)> get 't1','rowkey001'
# 例如:查询表t1,rowkey001行,f1:col1列
hbase(main)> get 't1','rowkey001', 'f1:col1'
# 或者:
hbase(main)> get 't1','rowkey001', {COLUMN=>'f1:col1'}

b)扫描表
# 语法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num}
# 另外,还可以添加STARTROW、TIMERANGE和FITLER等高级功能
# 例如:扫描表t1的前5条数据
hbase(main)> scan 't1',{LIMIT=>5}
test1空间下的test表的columns=f1的所有行
hbase(main)> scan 'test1:test',{COLUMNS=>'f1'}
test1空间下的test表的columns=f1的第1行
hbase(main)> scan 'test1:test',{COLUMNS=>'f1',LIMIT=>1}

scan 'scores',{VERSIONS=>2}  version<=2
scan 'scores',{TIMERANGE=>[1394097631386,1394097651029],VERSIONS=>2}
c)查询表中的数据行数  count
# 语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}
# INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度
# 例如,查询表t1中的行数,每100条显示一次,缓存区为500
hbase(main)> count 't1', {INTERVAL => 100, CACHE => 500}

8)删除数据
a )删除行中的某个列值  delete
# 语法:delete <table>, <rowkey>,  <family:column> , <timestamp>,必须指定列名
# 例如:删除表t1,rowkey001中的f1:col1的数据
hbase(main)> delete 't1','rowkey001','f1:col1'
注:将删除改行f1:col1列所有版本的数据
b )删除行  deleteall
# 语法:deleteall <table>, <rowkey>,  <family:column> , <timestamp>,可以不指定列名,删除整行数据
# 例如:删除表t1,rowk001的数据
hbase(main)> deleteall 't1','rowkey001'
c)删除表中的所有数据   truncate
# 语法: truncate <table>
# 其具体过程是:disable table -> drop table -> create table
# 例如:删除表t1的所有数据
hbase(main)> truncate 't1'

9)检查表是否存在 exists
hbase(main):019:0> exists 't1'

10)查看表是否可用   is_enabled
hbase(main):036:0> is_enabled 't1'
help
hbase(main)>  create help

11).判断表是否enable
hbase(main):034:0>is_enabled 'member'




**过滤器:**
--------

0.所有的过滤器都在服务端生效

1.显示所有过滤器
hbase(main):010:0> show_filters

2.只返回key及其他关键部分
scan 'airline',{ FILTER => "KeyOnlyFilter()"}

3.只返回每一行的第一个值
 scan 'airline',{ FILTER => "FirstKeyOnlyFilter()"}

4.过滤rowkey 需要输入rowkey的前缀
scan 'airline', {FILTER => "(PrefixFilter ('row2'))"}

5.过虑qualifier,需要输入qualifier前缀
scan 'airline', {FILTER => "(PrefixFilter ('row2')) AND ColumnPrefixFilter('destination')"}

6.多重过滤qualifier,需要输入qualifier前缀
scan 'airline',{FILTER =>"MultipleColumnPrefixFilter('source','destination','date')"}

7.返回该表中相应的qualifier数
scan 'airline',{FILTER =>"ColumnCountGetFilter(2)"}

8.返回多少行
scan 'airline',{FILTER => "PageFilter(1)"}

9.扫描到哪一行停止
scan 'airline',{FILTER =>"InclusiveStopFilter('row1')"}

10.只返回有指定Qualifier的数据
scan 'airline',{ FILTER =>"QualifierFilter(=,'binary:flightno')"}   >  =   <来替换‘=’

11.返回满足条件(某一列的值)的数据
scan 'airline', { COLUMNS =>'flightbetween:source', LIMIT => 4, FILTER => "ValueFilter( =, 'binaryprefix:hyd' )" }      >  =   <来替换‘=’

行的最大版本是通过 HColumnDescriptor定义在每一个列族的,默认的最大版本号是1
不推荐设置 最大版本号 为很大的值(数百甚至更多),除非旧的数据对你而言十分重要。因为太多的版本会使 StoreFile 很大。


hbase org.apache.hadoop.hbase.mapreduce.Driver import apply_info /user/data_temp/apply_info   hdfs路径  hbase表



[AppleScript] 纯文本查看 复制代码
**

建表语句详解:
-------

**
create 'testtable',{NAME => 'Toutiao', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '10', COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'false', BLOCKCACHE => 'false'},
 {NAME => 'coulmn', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '30', COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'true'} 
 (其中的属性有   REPLICATION_SCOPE 复制份数 ,只包含一个列簇“Toutiao”,versions:设置历史版本数 默认为1,TTL:过期时间 单位为秒,默认为永久保存,COMPRESSION:压缩方式,当配置lzo的情况)

BLOOMFILTER
布隆过滤器,优化HBase的随即读取性能,可选值NONE|ROW|ROWCOL,默认为NONE,该参数可以单独对某个列簇启用。启用过滤器,对于get操作以及部分scan操作可以剔除掉不会用到的存储文件,减少实际IO次数,提高随机读性能。Row类型适用于只根据Row进行查找,而RowCol类型适用于根据Row+Col联合查找,如下:
Row类型适用于:get ‘NewsClickFeedback’,’row1′
RowCol类型适用于:get ‘NewsClickFeedback’,’row1′,{COLUMN => ‘Toutiao’}
对于有随机读的业务,建议开启Row类型的过滤器,使用空间换时间,提高随机读性能。

COMPRESSION
数据压缩方式,HBase支持多种形式的数据压缩,一方面减少数据存储空间,一方面降低数据网络传输量进而提升读取效率。目前HBase支持的压缩算法主要包括三种:GZip | LZO | Snappy,下面表格分别从压缩率,编解码速率三个方面对其进行对比:
Snappy的压缩率最低,但是编解码速率最高,对CPU的消耗也最小,目前一般建议使用Snappy

IN_MEMORY
数据是否常驻内存,默认为false。HBase为频繁访问的数据提供了一个缓存区域,缓存区域一般存储数据量小、访问频繁的数据,常见场景为元数据存储。默认情况,该缓存区域大小等于Jvm Heapsize * 0.2 * 0.25 ,假如Jvm Heapsize = 70G,存储区域的大小约等于3.2G。需要注意的是HBase Meta元数据信息存储在这块区域,如果业务数据设置为true而且太大会导致Meta数据被置换出去,导致整个集群性能降低,所以在设置该参数时需要格外小心。
BLOCKCACHE
是否开启block cache缓存,默认开启。

TTL
数据过期时间,单位为秒,默认为永久保存。对于很多业务来说,有时候并不需要永久保存某些数据,永久保存会导致数据量越来越大,消耗存储空间是其一,另一方面还会导致查询效率降低。如果设置了过期时间,HBase在Compact时会通过一定机制检查数据是否过期,过期数据会被删除。用户可以根据具体业务场景设置为一个月或者三个月。示例中TTL => ‘ 259200’设置数据过期时间为三天,以最后一次更新时间为开始时间(TTL=>的更新超时时间是指:该列最后更新的时间,到超时时间的限制,而不是第一次创建,到超时时间。)


楼主热帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-3-28 18:34

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表