【Hbase】掌握这些常用 hbase shell 命令,工作更轻松


本文将介绍一些开发以及运维工作中经常用到的 Hbase Shell 命令。作为开发以及运维人员这些常用命令是需要了解并经常使用的,当然可以不必将他们死记硬背下来。如果在某些场景下想到需要使用某个命令,但是又不知道具体的使用方法时,可以扫一眼这篇文章(熟练使用 mysql 命令的用户可能会觉得 hbase shell 命令的设计有点费解--!)。

Hbase Shell 为 Hbase 提供了一套“简单方便”的命令行工具。使用它可以很好地与 Hbase 进行交互,例如查看 Hbase 集群状态、对 Hbase 数据进行增删改查操作等等。启动 Hbase 之后,我们可以通过 "hbase shell" 来进入 Hbase Shell 命令行。


Hbase Shell 中运行 help 命令可以看到有哪些命令可以使用。这些命令按照功能范围被分成了很多组(Command Groups),每组都包含了若干个命令。本文我选取几个日常工作中常用的命令来进行介绍(对其他命令感兴趣的朋友,可以逐个百度或者 google 进行了解),这些命令主要分布在 general(通用)、ddl(data manipulation language:数据操作语言)、dml(data definition language:数据定义语言) 这些分组中。


General

  • status
  • version
  • table_help
  • whoami

status


status 命令显示 hbase 集群的状态,包括 master、region server 的数量和活跃情况,还包括集群的负载情况。

并且,我们还可以在 status 后面加上 'simple'、'summary' 或者 'detauled' 字段来获取更加详细的信息。这里,不加任何字段的 status 等同于 status 'summary'。

version


version 命令很好理解,就是查看 hbase 版本了。

table_help

一些关于表操作命令的帮助介绍(Help for table-reference commands)。

whoami

查询当前的 hbase 用户

DDL & DML

DDL 和 DML 这两类命令是工作中经常需要使用到的,并且两者关联性较大,所以这里将 这两类的命令放在一起讲解。

  • list
  • exists
  • create
  • describe
  • put
  • count
  • scan
  • get
  • delete
  • deleteall

list

列出数据库中所有表

exists

判断表是否存在
用法: exists '表名'


6
6

create

创建表
用法: create '表名','列族1','列族2'

hbase(main):007:0> create 'kooola','cf1','cf2'

例如上面的语句就创建了拥有两个列族(cf1、cf2)的表,表名为kooola

describe

查看表的结构
用法: describe '表名'

hbase(main):010:0> describe 'kooola'
Table kooola is ENABLED
kooola
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLO
CKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'cf2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLO
CKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
2 row(s) in 0.0360 seconds

显而易见,查看刚刚创建的 kooola 表,发现有两个列族:cf1 和 cf2

put

向指定表插入数据
用法: put '表名','rowkey','列族:列名','值'。

列簇下的列不需要提前创建,插入值时通过'列族:列名'来指定就行,这意味着 hbase 对表结构的要求更加灵活

hbase(main):013:0> put 'kooola','xxxxxx1','cf1:name','march'

例如上面的命令,就是向 kooola 表中插入一行数据,其中 rowkey 为 xxxxxx1,cf1 列族的 name 列有一个值为 march

count

查询表的记录数
用法:count '表名'

hbase(main):002:0> count 'kooola'
1 row(s) in 0.0320 seconds

scan

查询表数据
用法: scan '表名'
当然你也可以增加一些过滤器来指定查询条件。

我们可以认识一些关键字,例如 COLUMN 和 COLUMNS 进行列族、列过滤;STARTROW 和 STOPROW 用以标识起始、终止rowkey;LIMIT 指定查询的个数;VERSIONS 指定版本。

hbase(main):001:0> scan 'kooola'
查询所有数据
scan 'kooola', {COLUMN=>'cf1'}
指定列族进行查询
scan 'kooola', {COLUMNS=> 'cf1:name'}
指定列进行查询
scan 'kooola', { STARTROW => 'xxxxxx1', LIMIT=>2, VERSIONS=>1}
rowkey 从 xxxxxx1 开始查询 2 个版本为 1 的记录
scan 'kooola', {COLUMNS => ['cf1', 'cf2'], LIMIT => 10, STARTROW => 'xxxxxx1'}
rowkey 从 xxxxxx1 开始查询 10 条记录,记录只显示列族为 cf1 和 cf2 的值

例外我们也可以使用 FILTER 对值进行过滤

scan 'kooola',FILTER=>"RowFilter(=,'binary:xxxxxx1')"
查询 rowkey 为 xxxxxx1 的记录
scan 'kooola',FILTER=>"RowFilter(>,'binary:xxxxxx1')"
查询 rowkey 大于 xxxxxx1 的记录
scan 'kooola',FILTER=>"RowFilter(=,'substring:xxx1')"
查询 rowkey 中包含 xxx1 的记录
scan 'kooola',FILTER=>"ValueFilter(=,'binary:march')"
查询拥有 march 值的记录
scan 'kooola',FILTER=>"ValueFilter(=,'substring:arch')"
查询值包含 arch 的记录
scan 'kooola',FILTER=>"PrefixFilter('xxxx')"
查询 rowkey 前缀为 xxxx 的记录

get

获取行或单元的值
用法:
get '表名','rowkey'
get '表名','rowkey','列族'
get '表名','rowkey','列族:列'

get 'kooola','xxxxxx1'
get 'kooola','xxxxxx1','cf1:name'

delete

使用 delete 命令,可以在一个表中删除特定单元格
用法:
delete '表名', 'rowkey', '列族:列'

deleteall

使用“deleteall”命令,可以删除一行中所有单元格
deleteall '表名', 'rowkey'

扫码关注微信公众号"Kooola大数据",聊人生|聊技术
扫码关注微信公众号"Kooola大数据",聊人生|聊技术
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容