通过Shell工具可以对云数据库HBase进行数据管理,包括建表、插入数据、删除数据和删除表等操作,本文介绍Shell的基本使用命令。

访问配置

常用命令

Shell的使用命令更多请参见Apache HBase Shell介绍

  • Shell数据定义语言

     
    create: 用于创建一个表。
    list: 用于列出HBase的所有表。
    disable: 用于禁用表。
    is_disabled: 用于验证表是否被禁用。
    enable: 用于启用一个表。
    is_enabled: 用于验证表是否已启用。
    describe: 用于提供了一个表的描述。
    alter: 用于改变一个表。
    exists: 用于验证表是否存在。
    drop: 用于从HBase中删除表。
  • Shell数据操作语言
     
    put: 用于把指定列在指定的行中单元格的值在一个特定的表。
    get: 用于取行或单元格的内容。
    delete:用于删除表中的单元格值。
    deleteall: 用于删除给定行的所有单元格。
    scan: 用于扫描并返回表数据。
    count: 用于计数并返回表中的行的数目。
    truncate: 清空表中的数据,其内部实现是将指定的表下线、删除、重建,该操作会丢失Region分区
    truncate_preserve:清空表中的数据,其内部实现是将指定的表下线、删除、重建,并且Region分区与旧表保留一致

进入和退出Shell环境

  • 执行以下命令进入Shell环境。

     
    bin/hbase shell
  • 执行以下命令退出Shell环境。
     
    quit
  • 使用help命令查看基本命令和对应的使用方法。
     
    help

基本操作

  • 创建表

    使用create命令来创建表格,在创建的时候必须输入表的名称和列族的名称。

     
    //创建一个名称为test,列族名为cf的表
    create 'test', 'cf'
  • 查询所有表的信息
    使用list命令来查询HBase数据库中所有表的信息,也可以使用正则表达式来过滤表。

     
    list
    list 'abc.*'
    list 'test'
  • 插入数据
    使用put命令为新创建的表插入数据。执行以下语句插入三条数据。

     
    put 'test', 'row1', 'cf:a', 'value1'
    put 'test', 'row2', 'cf:b', 'value2'
    put 'test', 'row3', 'cf:c', 'value3'
     
    说明 语句中test为表名,row1为表的Rowkey,cf:a表示自定义列,列族名和列名,value1为值。
  • 查询指定表的数据
    scan是一种访问HBase数据的方式,它非常的灵活,scan操作可以用它来扫描全表,也可以用它查询固定范围。查询速度会比查询单条(使用get)数据略慢一些,这里因为我们的demo数据库数据并不多,所以我们全部取出来。执行以下语句可以查询test表的数据。

     
    scan 'test'
    返回数据如下:

     
    ROW                                      COLUMN+CELL
    row1 column=cf:a, timestamp=1421762485768, value=value1
    row2 column=cf:b, timestamp=1421762491785, value=value2
    row3 column=cf:c, timestamp=1421762496210, value=value3
    3 row(s) in 0.0230 seconds
  • 查询表的单条数据
    使用get来查询表的单条数据。

     
    get 'test', 'row1'
    返回数据如下:

     
    COLUMN                                   CELL
    cf:a timestamp=1421762485768, value=value1
    1 row(s) in 0.0350 seconds
  • 禁用和启用指定表
    如果您想要删除一张表,或者改变一张表的设置,或者其他类似的场景。您需要使用disable命令先禁用这张表,删除或者修改配置完成后,使用enable命令启用表,重新使用这张表。

     
    disable 'test'
    enable 'test'
  • 删除指定表
    如果您想要删除一张表,使用drop命令,这是一个危险的操作,请谨慎使用。

     
    drop 'test'

常用配置

  • 为指定表设置Major Compaction周期(无特殊情况下不建议自行设置)。

    Major Compaction周期的单位为毫秒(ms),默认值是7天,设置为0表示关闭周期。

     
    alter 'test', CONFIGURATION => {'hbase.hregion.majorcompaction' => 300000}
  • 为指定表的列族设置数据压缩格式。
    云数据库HBase的数据压缩详情介绍请参见数据压缩与编码

     
    alter 'test', NAME => 'cf', COMPRESSION => 'SNAPPY'
  • 为指定表的列族设置Block Encoding类型。
    将test表列族的Block Encoding类型设置为DATA_BLOCK_ENCODING。

     
    alter 'test', NAME => 'cf', DATA_BLOCK_ENCODING => 'DIFF'
  • 为指定表的列族设置数据存活时间(Time To Live,简称TTL)。
    TTL单位为秒(s),例如2592000s=30天。

     
    alter 'test', NAME => 'cf', TTL => 2592000
  • 为指定表设置预分区。云数据库HBase的预分区详情介绍请参见设置预分区

一个学生成绩表的例子来演示hbase的用法。

name grade course
math english
Tom 5 97 87
Jim 4 89 80

表的创建:语法:create '表名称','列簇名称1','列簇名称2'........

create 'student','name','grade','course'
desc 'student'

结果:

{
NAME=>'course',
DATA_BLOCK_ENCODING=>'NONE',
BLOOMFILTER=>'ROW',
REPLICATION_SCOPE=>'0',
VERSIONS=>'1',
COMPRESSION=>'NONE',
MIN_VERSIONS=>'0',
TTL=>'FOREVER',
KEEP_DELETED_CELLS=>'FALSE',
BLOCKSIZE=>'65536',
IN_MEMORY=>'false',
BLOCKCACHE=>'true'
}{
NAME=>'grade',
DATA_BLOCK_ENCODING=>'NONE',
BLOOMFILTER=>'ROW',
REPLICATION_SCOPE=>'0',
VERSIONS=>'1',
COMPRESSION=>'NONE',
MIN_VERSIONS=>'0',
TTL=>'FOREVER',
KEEP_DELETED_CELLS=>'FALSE',
BLOCKSIZE=>'65536',
IN_MEMORY=>'false',
BLOCKCACHE=>'true'
}{
NAME=>'name',
DATA_BLOCK_ENCODING=>'NONE',
BLOOMFILTER=>'ROW',
REPLICATION_SCOPE=>'0',
VERSIONS=>'1',
COMPRESSION=>'NONE',
MIN_VERSIONS=>'0',
TTL=>'FOREVER',
KEEP_DELETED_CELLS=>'FALSE',
BLOCKSIZE=>'65536',
IN_MEMORY=>'false',
BLOCKCACHE=>'true'
}

新增列簇:

alter '表名称',NAME='列簇名称'

hbase(main):068:0> alter 'student',NAME=>'age'
Updating all regions with the new schema...
1/1 regions updated.

删除列簇:

alter '表名称',NAME=>'列簇名称',METHOD=>'delete'

 alter 'student',NAME=>'test',METHOD=>'delete'

删除一个表:之前,必须先将该表disable掉。

disable 'student'

drop 'student'

给表添加记录:

put '表名称','rowkey','列簇名称:列名称','值'

put 'student','001201509011001','name','Tom'

结果:

hbase(main):085:0> scan 'student'
ROW COLUMN+CELL
001201509011001 column=name:, timestamp=1447766388162, value=Tom
1 row(s) in 0.0090 seconds

继续执行:name列簇的value='jim',但是rowkey 不变,

hbase(main):086:0> put 'student','001201509011001','name','Jim'

结果还是一条数据,001201509011001的rowkey,被第二条数据覆盖。

scan 'student'
ROW COLUMN+CELL
001201509011001 column=name:, timestamp=1447766492893, value=Jim
put 'student','001201509011001','course:math','100'
put 'student','001201509011001','course:english','100'
hbase(main):096:0> scan 'student'
ROW COLUMN+CELL
001201509011001 column=course:english, timestamp=1447766828720, value=100
001201509011001 column=course:math, timestamp=1447766813289, value=100
001201509011001 column=grade:, timestamp=1447766751652, value=2
001201509011001 column=name:, timestamp=1447766492893, value=Jim
001201509011002 column=name:, timestamp=1447766547713, value=Tom

加了很多rowKey进行测试:如下

base(main):127:0> scan 'student'
ROW COLUMN+CELL
001201509011001 column=course:english, timestamp=1447766828720, value=100
001201509011001 column=course:math, timestamp=1447766813289, value=100
001201509011001 column=grade:, timestamp=1447766751652, value=2
001201509011001 column=name:, timestamp=1447766492893, value=Jim
001201509011002 column=course:english, timestamp=1447766987607, value=95
001201509011002 column=course:math, timestamp=1447767003501, value=80
001201509011002 column=grade:, timestamp=1447767073299, value=6
001201509011002 column=name:, timestamp=1447766547713, value=Tom
001201509011003 column=grade:, timestamp=1447767130750, value=5
001201509011004 column=grade:, timestamp=1447767139371, value=3
001201509011005 column=grade:, timestamp=1447767146338, value=3
001201509011006 column=course:math, timestamp=1447767489278, value=30
001201509011006 column=grade:, timestamp=1447767153088, value=2
001201509011007 column=course:math, timestamp=1447767474245, value=87
001201509011007 column=grade:, timestamp=1447767173296, value=2
001201509011008 column=grade:, timestamp=1447767181639, value=3
001201509011008 column=name:, timestamp=1447767278902, value=lucy
001201509011009 column=grade:, timestamp=1447767190450, value=10
001201509011009 column=name:, timestamp=1447767257259, value=Mike
001201509011010 column=grade:, timestamp=1447767198644, value=11
001201509011010 column=name:, timestamp=1447767236548, value=Peter

根据rowkey查看对应列的数据:

get '表名称','rowkey','列簇名称:列名称'

 get 'student','001201509011001','name'
COLUMN                        CELL
name: timestamp=1447766492893, value=Jim

查看表中的记录数:根据列簇来统计:

hbase(main):133:0* count 'student'

结果:10

查询表中指定列的所有记录:

语法:scan '表名',{COLUMNS =>'列簇'}

hbase(main):134:0> scan 'student',{COLUMNS=>'name'}
ROW                           COLUMN+CELL
001201509011001 column=name:, timestamp=1447766492893, value=Jim
001201509011002 column=name:, timestamp=1447766547713, value=Tom
001201509011008 column=name:, timestamp=1447767278902, value=lucy
001201509011009 column=name:, timestamp=1447767257259, value=Mike
001201509011010 column=name:, timestamp=1447767236548, value=Peter
hbase(main):135:0> scan 'student',{COLUMNS=>'grade'}
ROW COLUMN+CELL
001201509011001 column=grade:, timestamp=1447766751652, value=2
001201509011002 column=grade:, timestamp=1447767073299, value=6
001201509011003 column=grade:, timestamp=1447767130750, value=5
001201509011004 column=grade:, timestamp=1447767139371, value=3
001201509011005 column=grade:, timestamp=1447767146338, value=3
001201509011006 column=grade:, timestamp=1447767153088, value=2
001201509011007 column=grade:, timestamp=1447767173296, value=2
001201509011008 column=grade:, timestamp=1447767181639, value=3
001201509011009 column=grade:, timestamp=1447767190450, value=10
001201509011010 column=grade:, timestamp=1447767198644, value=11
10 row(s) in 0.0220 seconds
hbase(main):136:0> scan 'student',{COLUMNS=>'course'}
ROW COLUMN+CELL
001201509011001 column=course:english, timestamp=1447766828720, value=100
001201509011001 column=course:math, timestamp=1447766813289, value=100
001201509011002 column=course:english, timestamp=1447766987607, value=95
001201509011002 column=course:math, timestamp=1447767003501, value=80
001201509011006 column=course:math, timestamp=1447767489278, value=30
001201509011007 column=course:math, timestamp=1447767474245, value=87
4 row(s) in 0.0130 seconds

查询表中指定区间的所有记录数:

也可以指定一些修饰词:TIMERANGE, FILTER, LIMIT, STARTROW, STOPROW, TIMESTAMP, MAXLENGTH,or COLUMNS。没任何修饰词,就是上边例句,就会显示所有数据行。

语法:scan '表名',{COLUMNS =>'列簇',LIMIT =>记录数,STARTROW=>'开始rowkey',STOPROW=>'结束rowkey'}

取出name列族,前3条记录

hbase(main):012:0> scan 'student',{COLUMNS=>['name'],LIMIT=>3}
ROW COLUMN+CELL
001201509011001 column=name:, timestamp=1447766492893, value=Jim
001201509011002 column=name:, timestamp=1447766547713, value=Tom
001201509011008 column=name:, timestamp=1447767278902, value=lucy

取出name列族,前3条记录 rowkey[001201509011001,001201509011008) 左边闭合,右边开的数据。

hbase(main):014:0> scan 'student',{COLUMNS=>['name'],LIMIT=>3,STARTROW=>'001201509011001',STOPROW=>'001201509011008'}
ROW COLUMN+CELL
001201509011001 column=name:, timestamp=1447766492893, value=Jim
001201509011002 column=name:, timestamp=1447766547713, value=Tom

指定两列:name,grade

hbase(main):018:0> scan 'student',{COLUMNS=>['name','grade'],STARTROW=>'001201509011001',STOPROW=>'001201509011010'}
ROW                           COLUMN+CELL
001201509011001 column=grade:, timestamp=1447766751652, value=2
001201509011001 column=name:, timestamp=1447766492893, value=Jim
001201509011002 column=grade:, timestamp=1447767073299, value=6
001201509011002 column=name:, timestamp=1447766547713, value=Tom
001201509011003 column=grade:, timestamp=1447767130750, value=5
001201509011004 column=grade:, timestamp=1447767139371, value=3
001201509011005 column=grade:, timestamp=1447767146338, value=3
001201509011006 column=grade:, timestamp=1447767153088, value=2
001201509011007 column=grade:, timestamp=1447767173296, value=2
001201509011008 column=grade:, timestamp=1447767181639, value=3
001201509011008 column=name:, timestamp=1447767278902, value=lucy
001201509011009 column=grade:, timestamp=1447767190450, value=10
001201509011009 column=name:, timestamp=1447767257259, value=Mike

可以根据 TIMERANGE查询:

hbase(main):020:0> scan 'student',{COLUMNS=>['grade'],LIMIT => 3,TIMERANGE=>[1447766751652,1447767257259]}
ROW                           COLUMN+CELL
001201509011001 column=grade:, timestamp=1447766751652, value=2
001201509011002 column=grade:, timestamp=1447767073299, value=6
001201509011003 column=grade:, timestamp=1447767130750, value=5

删除数据:

rowkey=001201509011002 的数据有4列

hbase(main):024:0> get 'student','001201509011002'
COLUMN CELL
course:english timestamp=1447766987607, value=95
course:math timestamp=1447767003501, value=80
grade: timestamp=1447767073299, value=6
name: timestamp=1447766547713, value=Tom

删除一行数据:

hbase(main):027:0> delete 'student','001201509011002','grade'
hbase(main):028:0> get 'student','001201509011002'
COLUMN CELL
course:english timestamp=1447766987607, value=95
course:math timestamp=1447767003501, value=80
name: timestamp=1447766547713, value=Tom

查看那一行的数据:发现没有了。

hbase(main):033:0> scan 'student',{COLUMNS=>['grade'],STARTROW=>'001201509011002',STOPROW=>'001201509011003'}
ROW COLUMN+CELL
0 row(s) in 0.0080 seconds

Hbase shell学习的更多相关文章

  1. hbase shell学习-2

    一个学生成绩表的例子来演示hbase的用法. name grade course math english Tom 5 97 87 Jim 4 89 80 表的创建:语法:create '表名称',' ...

  2. 大数据学习路线分享-Hbase shell的基本操作完整流程

    HBase的命令行工具,最简单的接口,适合HBase管理使用,可以使用shell命令来查询HBase中数据的详细情况.安装完HBase之后,启动hadoop集群(利用hdfs存储),启动zookeep ...

  3. Hadoop学习笔记之HBase Shell语法练习

    Hadoop学习笔记之HBase Shell语法练习 作者:hugengyong 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令 ...

  4. HBase学习笔记2 - HBase shell常用命令

    转载请标注原链接:http://www.cnblogs.com/xczyd/p/6639397.html 扫表的时候限定行数 scan } 即为扫表的时候,限定只输出五条数据 ============ ...

  5. 大数据技术之_11_HBase学习_01_HBase 简介+HBase 安装+HBase Shell 操作+HBase 数据结构+HBase 原理

    第1章 HBase 简介1.1 什么是 HBase1.2 HBase 特点1.3 HBase 架构1.3 HBase 中的角色1.3.1 HMaster1.3.2 RegionServer1.3.3 ...

  6. HBase学习2(HBase shell)

    HBase 常用命令 查看当前用户:whoami 创建表:create '表名', '列族名1','列族名2','列族名N' 查看所有表:list 描述表: describe '表名' 判断表存在: ...

  7. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

  8. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

  9. 执行HBase shell时出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet错误解决办法(图文详解)

    不多说,直接上干货! [kfk@bigdata-pro01 bin]$ jps NameNode ResourceManager JournalNode HMaster DataNode HRegio ...

  10. Hadoop学习---Hadoop的HBase的学习

    Hbase Hbase的特点: Hbase是bigtable的开源的仿制版本 建立在HDFS之上 可靠性,靠性能 大:一个表可以有上亿行,上百万列 面向列:面向列(族)的存储和权限控制,列(族)独立检 ...

随机推荐

  1. ABC365(D,E)

    ABC365(D,E) D - AtCoder Janken 3 石头剪刀布,给出对手的出招,问在保证不败的情况下最多能赢多少回 记 \(f_i,{0/1/2}\) 表示第 \(i\) 局出石头/剪刀 ...

  2. 解读Karmada多云容器编排技术,加速分布式云原生应用升级

    本文分享自来源:<华为云DTSE>第五期开源专刊,作者:任洪彩 华为云高级软件工程师,Karmada社区Maintainer.   管理和协调跨多个云平台的容器化应用是当前企业面临的复杂性 ...

  3. python模块导入规则(相对导入和绝对导入)

    python模块可以相对导入和绝对导入,但这两者是不能随意替换使用的.本文主要讨论工作目录下模块之间的导入规则.其中相对导入前面有一个'.',表示从该脚本所在目录开始索引,而绝对导入前面没有'.',表 ...

  4. Java线程:线程的调度-守护线程——Java线程:线程的调度-合并——Java线程:新特征-障碍器——Java线程:大总结

    Java线程:线程的调度-守护线程   守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程.   守护线程使用的情况较少,但并非无用,举例 ...

  5. 二、FreeRTOS学习笔记-移植

    FreeRTOS移植 首先准备一个基础工程,stm32标准库或者HAL库,本实验使用HAL库版本的内存管理实验进行移植 移植步骤: 1 第一步:添加FreeRTOS源码(添加FreeRTOS源码的目的 ...

  6. Redis之客户端工具RedisInsight

    RedisInsight简介 RedisInsight是Redis官方出品的可视化管理工具,可用于设计.开发.优化你的Redis应用.支持深色和浅色两种主题,界面非常炫酷!可支持String.Hash ...

  7. 【实战问题】-- 并发的时候分布式锁setnx细节

    前面讲解到实战问题]-- 设计礼品领取的架构设计以及多次领取现象解决?,如果出现网络延迟的情况下,多个请求阻塞,那么恶意攻击就可以全部请求领取接口成功,而针对这种做法,我们使用setnx来解决,确保只 ...

  8. 开发Git分支管理

    目前分支管理 AngularJS在github上的提交记录被业内大多数开发人员认可,逐渐被广泛引用. 代码提交Message格式 type (scope): message 参数介绍: 1.type: ...

  9. 销讯通CRM客户关系管理系统的功能拆分

    随着技术的发展,CRM系统(客户关系管理)成为企业不可或缺的工具,本文从医药行业角度简要谈谈CRM系统的功能. 从业务的理解来说,从医药行业来说,CRM客户管理系统的有以下几部分功能: 01 客户的分 ...

  10. 斐波那契数列(Java实现)

    斐波那契数列 题目描述: 悲波那契数列(Fibonacci sequence)又称黄金分割数列,因数学家莱昂纳多·裴波那契(LeonardodaFibonacci)以兔子繁殖为例子而引入,故又称为&q ...