阅读目录

前言

笔者在分类中的Hbase栏目之前已经分享了hbase的安装以及一些常用的shell命令的使用,这里不仅仅重新复习一下shell命令,还会介绍hbase的DDL以及DML的相关操作。

一、hbase的shell操作

1.1启动hbase shell

在hbase的安装目录的bin目录下面启动我们的hbase,执行命令:hbase shell,执行效果以>结束,如下执行效果:

 hbase shell

1.2执行hbase shell的帮助文档

输入help并按Enter键,可以显示HBase Shell的基本使用信息,和我们接下来会列举的一些命令类似。需要注意的是,表名,行,列都必须包含在引号内。
执行效果:

 help

1.3退出hbase shell

使用quit命令,退出HBase Shell 并且断开和集群的连接,但此时HBase仍然在后台运行。

1.4使用status命令查看hbase现在的状态

hbase(main):004:0> status
1 active master, 0 backup masters, 2 servers, 0 dead, 1.0000 average load

从上面可以看出一个master在运行,并且下面有两个服务器...没有备份的master,没有死亡的服务。

1.5使用version命令查看hbase的相关的版本

hbase(main):005:0> version
1.3.1, r930b9a55528fe45d8edce7af42fef2d35e77677a, Thu Apr 6 19:36:54 PDT 2017

从上面可以看出版本是1.3.1版本的。

1.6table_help

此命令将引导如何使用表引用的命令。下面给出的是使用这个命令的语法:

 table_help

1.7whoami

该命令返回HBase用户详细信息。如果执行这个命令,返回当前HBase用户,如下所示:

hbase(main):007:0> whoami
root (auth:SIMPLE)
groups: root

从上面我们看出操作者是root用户,该用户属于root组。

二、hbase的DDL相关的操作

2.1使用hbase创建表

2.1.1创建表

可以使用命令创建一个表,在这里必须指定表名和列族名。在HBase shell中创建表的语法如下所示:

create '<table name>','<column family>'

例子:
下面给出的是一个表名为emp的样本模式。它有两个列族:“personal data”和“professional data”:

1 hbase(main):005:0> create 'emp','personal data','professional data'
2 0 row(s) in 1.2570 seconds
3
4 => Hbase::Table - emp

2.1.2验证创建

可以验证是否已经创建,使用 list 命令如下所示。在这里,可以看到创建的emp表:

1 hbase(main):006:0> list
2 TABLE
3 emp
4 1 row(s) in 0.0480 seconds
5
6 => ["emp"]

从上面我们可以很直观地看出我们已经创建了相关的emp表格了。

2.2使用hbase禁用表

2.2.1禁用表

要删除表或改变其设置,首先需要使用 disable 命令关闭表。使用 enable 命令,可以重新启用它。
禁用我们上面创建的emp表:

1 hbase(main):008:0> disable 'emp'
2 0 row(s) in 2.3300 seconds

2.2.2验证禁用

禁用表之后,仍然可以通过 list 和exists命令查看到。但是无法扫描到它存在,它会给下面的错误。

下面以exists命令为例:

1 hbase(main):004:0> exists 'emp'
2 Table emp does exist
3 0 row(s) in 0.3610 seconds

从第二行我们可以很直观地看出我们的emp表是存在的。

 扫描禁用表

2.2.3is_disabled

1)这个命令是用来查看表是否被禁用。它的语法如下:

hbase> is_disabled 'table name'

下面的例子验证表名为emp是否被禁用。如果禁用,它会返回true,如果没有,它会返回false。

1 hbase(main):031:0> is_disabled 'emp'
2 true
3 0 row(s) in 0.0440 seconds

从第二行中我们可以看出,这张emp表确实已经被禁用了。

2)disable_all

此命令用于禁用所有匹配给定正则表达式的表。disable_all命令的语法如下:

hbase> disable_all 'r.*'

假设有5个表在HBase,即raja, rajani, rajendra, rajesh 和 raju。下面的代码将禁用所有以 raj 开始的表。

 disable_all

2.3启用表

2.3.1启用表

命令格式:

enable 'table_name'

执行命令:

1 hbase(main):008:0> enable 'emp'
2 0 row(s) in 1.3610 seconds

2.3.2验证表是不是已经被启用了

启用表之后,扫描。如果能看到的模式,那么证明表已成功启用:

1 hbase(main):009:0> scan 'emp'
2 ROW COLUMN+CELL
3 0 row(s) in 0.0700 seconds

2.3.3is_enabled

此命令用于查找表是否被启用。它的语法如下:

hbase> is_enabled 'table name'

下面的代码验证表emp是否启用。如果启用,它将返回true,如果没有,它会返回false。

1 hbase(main):010:0> is_enabled 'emp'
2 true
3 0 row(s) in 0.0130 seconds

2.4hbase的表描述和修改

2.4.1表描述

命令格式:

describe 'table_name'

下面给出的是对emp表的 describe 命令的输出:

 1 hbase(main):011:0> describe 'emp'
2 Table emp is ENABLED
3 emp
4 COLUMN FAMILIES DESCRIPTION
5 {NAME => 'personal data', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DA
6 TA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSI
7 ZE => '65536', REPLICATION_SCOPE => '0'}
8 {NAME => 'professional data', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE'
9 , DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLO
10 CKSIZE => '65536', REPLICATION_SCOPE => '0'}
11 2 row(s) in 0.0430 seconds

2.4.2表修改

alter用于更改现有表的命令。使用此命令可以更改列族的单元,设定最大数量和删除表范围运算符,并从表中删除列家族。更改列族单元格的最大数目
1)下面给出的语法来改变列家族单元的最大数目。

hbase> alter 't1', NAME => 'f1', VERSIONS => 5

在下面的例子中,单元的最大数目设置为5。

hbase(main):003:0> alter 'emp', NAME => 'personal data', VERSIONS => 5
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.3050 seconds

2)表范围运算符
使用alter,可以设置和删除表范围,运算符,如MAX_FILESIZE,READONLY,MEMSTORE_FLUSHSIZE,DEFERRED_LOG_FLUSH等。
设置只读
下面给出的是语法,是用以设置表为只读。

命令格式:
hbase>alter 't1', READONLY(option)

在下面的例子中,我们已经设置表emp为只读。

1 hbase(main):006:0> alter 'emp', READONLY
2 Updating all regions with the new schema...
3 0/1 regions updated.
4 1/1 regions updated.
5 Done.
6 0 row(s) in 2.2140 seconds

3)删除表范围运算符
也可以删除表范围运算。下面给出的是语法,从emp表中删除“MAX_FILESIZE”。

hbase> alter 't1', METHOD => 'table_att_unset', NAME => 'MAX_FILESIZE'

4)删除列族
使用alter,也可以删除列族。下面给出的是使用alter删除列族的语法。

hbase> alter ‘ table name ’, ‘delete’ => ‘ column family ’ 

下面给出的是一个例子,从“emp”表中删除列族。
假设在HBase中有一个employee表。它包含以下数据:

hbase(main):006:0> scan 'employee'
ROW COLUMN+CELL
row1 column=personal:city, timestamp=1418193767, value=hyderabad
row1 column=personal:name, timestamp=1418193806767, value=raju
row1 column=professional:designation, timestamp=1418193767, value=manager
row1 column=professional:salary, timestamp=1418193806767, value=50000
1 row(s) in 0.0160 seconds

现在使用alter命令删除指定的 professional 列族。

hbase(main):007:0> alter 'employee','delete'=>'professional'
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.2380 seconds

现在验证该表中变更后的数据。观察列族“professional”也没有了,因为前面已经被删除了。

hbase(main):003:0> scan 'employee'
ROW COLUMN+CELL
row1 column=personal:city, timestamp=14181936767, value=hyderabad
row1 column=personal:name, timestamp=1418193806767, value=raju
1 row(s) in 0.0830 seconds

2.5删除表

drop命令可以删除表。在删除一个表之前必须先将其禁用。

hbase(main):018:0> disable 'emp'
0 row(s) in 1.4580 seconds
hbase(main):019:0> drop 'emp'
0 row(s) in 0.3060 seconds

使用exists 命令验证表是否被删除。

hbase(main):020:0> exists 'emp'
Table emp does not exist
0 row(s) in 0.0730 seconds

drop_all
这个命令是用来在给出删除匹配“regex”表。它的语法如下:

hbase> drop_all 't.*'

注意:要删除表,则必须先将其禁用。
示例
假设有一些表的名称为raja, rajani, rajendra, rajesh, 和 raju。

hbase(main):017:0> list
TABLE
raja
rajani
rajendra
rajesh
raju
9 row(s) in 0.0270 seconds

所有这些表以字母raj开始。首先使用disable_all命令禁用所有这些表如下所示:

hbase(main):002:0> disable_all 'raj.*'
raja
rajani
rajendra
rajesh
raju
Disable the above 5 tables (y/n)?
y
5 tables successfully disabled

现在,可以使用 drop_all 命令删除它们,如下所示:

hbase(main):018:0> drop_all 'raj.*'
raja
rajani
rajendra
rajesh
raju
Drop the above 5 tables (y/n)?
y
5 tables successfully dropped

2.6exit

可以通过键入exit命令退出shell。

hbase(main):021:0> exit

停止HBase
要停止HBase,浏览进入到HBase主文件夹,然后键入以下命令。

./bin/stop-hbase.sh

三、hbase的DML相关的操作

本章将介绍如何在HBase表中创建的数据。要在HBase表中创建的数据,可以下面的命令和方法:

put 命令:

add() - Put类的方法

put() - HTable 类的方法

作为一个例子,我们将在HBase中创建下表:

使用put命令,可以插入行到一个表。它的语法如下:

put '<table name>','row1','<colfamily:colname>','<value>'

3.1hbase创建数据

首先我们按照上图的要求将第一行数据插入到表emp中:

1 hbase(main):014:0> put 'emp','1','personal data:name','raju'
2 0 row(s) in 0.0210 seconds
3 hbase(main):017:0> put 'emp','1','personal data:city','hyderabad'
4 0 row(s) in 0.0140 seconds
5 hbase(main):019:0> put 'emp','1','professional data:designation','manager'
6 0 row(s) in 0.0120 seconds
7 hbase(main):020:0> put 'emp','1','professional data:salary','5000'
8 0 row(s) in 0.0090 seconds

同样的方式将第二行,第三行插入到表中,此时进行扫描就会发现数据已经插入了:

hbase(main):001:0> scan 'emp'
ROW COLUMN+CELL
1 column=personal data:city, timestamp=1521255425941, value=hyderabad
1 column=personal data:name, timestamp=1521255356033, value=raju
1 column=professional data:designation, timestamp=1521255484441, value=manager
1 column=professional data:salary, timestamp=1521255507973, value=5000
1 row(s) in 0.5880 seconds

当然了,笔者比较懒,只是插入了一行数据...

3.2hbase修改数据

可以使用put命令更新现有的单元格值。按照下面的语法,并注明新值,如下所示:

put 'table name','row ','Column family:column name','new value'

新给定值替换现有的值,并更新该行。
实例:
通过扫描我们可以发现我们刚刚已经添加了一行数据:

1 hbase(main):001:0> scan 'emp'
2 ROW COLUMN+CELL
3 1 column=personal data:city, timestamp=1521255425941, value=hyderabad
4 1 column=personal data:name, timestamp=1521255356033, value=raju
5 1 column=professional data:designation, timestamp=1521255484441, value=manager
6 1 column=professional data:salary, timestamp=1521255507973, value=5000
7 1 row(s) in 0.5880 seconds

现在我们的任务就是将上面的city改成'NewYork':

1 hbase(main):002:0> put 'emp','1','personal data:city','New York'
2 0 row(s) in 0.1710 seconds

验证修改:

1 hbase(main):009:0> scan 'emp'
2 ROW COLUMN+CELL
3 1 column=personal data:city, timestamp=1521256072830, value=NewYork
4 1 column=personal data:name, timestamp=1521255356033, value=raju
5 1 column=professional data:designation, timestamp=1521255484441, value=manager
6 1 column=professional data:salary, timestamp=1521255507973, value=5000
7 1 row(s) in 0.0470 seconds

毫无疑问我们已经将数据修改了。

3.3hbase获取数据

get命令和HTable类的get()方法用于从HBase表中读取数据。使用 get 命令,可以同时获取一行数据。它的语法如下:

get '<table name>','row number'

3.3.1读取整行的数据

1 hbase(main):010:0> get 'emp','1'
2 COLUMN CELL
3 personal data:city timestamp=1521256072830, value=NewYork
4 personal data:name timestamp=1521255356033, value=raju
5 professional data:designation timestamp=1521255484441, value=manager
6 professional data:salary timestamp=1521255507973, value=5000
7 1 row(s) in 0.0580 seconds

3.3.2读取指定列的数据

命令格式:

hbase>get 'table name', 'rowid', {COLUMN => 'column family:column name'}

读取city那一行的数据:

1 hbase(main):011:0> get 'emp','1',{COLUMN=>'personal data:city'}
2 COLUMN CELL
3 personal data:city timestamp=1521256072830, value=NewYork
4 1 row(s) in 0.0250 seconds

3.4hbase删除数据

3.4.1从表中删除指定的单元格

使用 delete 命令,可以在一个表中删除特定单元格。 delete 命令的语法如下:

delete '<table name>', '<row>', '<column name >', <time stamp>

下面是一个删除特定单元格和例子。在这里,我们删除city:

hbase(main):013:0> delete 'emp','1','personal data:city',1521256072830
0 row(s) in 0.0090 seconds

笔者发现了一个问题,那就是<time stamp>这个参数加上去和没有加上去的效果,都能够删除指定的单元格,那为什么要加呢?是不是有什么特定的作用?

3.4.2从表中删除所有的单元格

使用“deleteall”命令,可以删除一行中所有单元格。下面给出是 deleteall 命令的语法:

deleteall '<table name>', '<row>'

下面是删除第一行的例子:

1 hbase(main):018:0> deleteall 'emp','1'
2 0 row(s) in 0.0120 seconds

下面是验证删除所有:

hbase(main):019:0> scan 'emp'
ROW COLUMN+CELL
0 row(s) in 0.0160 seconds

发现笔者插入的一条数据都已经被删除了...

3.5hbase的计数和截断

3.5.1hbase的计数

可以使用count命令计算表的行数量。它的语法如下:

count '<table name>'

当然了,笔者上面比较懒,只是插入了一条数据,后来又将之删除了,所以只能够重新插入一下了,此处略去....
插入数据之后,使用count命令进行计数:

1 hbase(main):026:0> count 'emp'
2 1 row(s) in 0.0210 seconds
3
4 => 1

3.5.2truncate

此命令将禁止删除并重新创建一个表。truncate 的语法如下:

hbase> truncate 'table name'

下面给出是 truncate 命令的例子。在这里,我们已经截断了emp表:

1 hbase(main):027:0> truncate 'emp'
2 Truncating 'emp' table (it may take a while):
3 - Disabling table...
4 - Truncating table...
5 0 row(s) in 4.5990 seconds

截断表之后,我们使用scan命令来验证会得到表的行数为0:

1 hbase(main):028:0> scan 'emp'
2 ROW COLUMN+CELL
3 0 row(s) in 0.1500 seconds

Hbase_02、Hbase的常用的shell命令&Hbase的DDL操作&Hbase的DML操作(转)的更多相关文章

  1. hbase的常用的shell命令&hbase的DDL操作&hbase的DML操作

    前言 笔者在分类中的hbase栏目之前已经分享了hbase的安装以及一些常用的shell命令的使用,这里不仅仅重新复习一下shell命令,还会介绍hbase的DDL以及DML的相关操作. hbase的 ...

  2. Lua 常用的shell命令

    lua作为一种小巧的脚本语言,其函数等动作可以使用shell命令进行运行和调试,以下是几个常用的shell命令.基本格式是  lua [选项参数] [脚本参数] (1)%lua 程序名.lua     ...

  3. 常用的shell命令整理

    工作快一年了,shell命令也玩了一年了.还是有点积累的,下面是本人常用的. 1.pwd | xargs -i basename {}   获取当前所在目录的名称 2.ps -ef|grep -w   ...

  4. Hadoop集群常用的shell命令

    Hadoop集群常用的shell命令 Hadoop集群常用的shell命令 查看Hadoop版本 hadoop -version 启动HDFS start-dfs.sh 启动YARN start-ya ...

  5. 安卓日常开发和逆向中常用的shell命令与非shell命令

    简述shell 命令与 非shell命令区别 shell命令不用先adb shell进入界面执行 非shell命令必须要 adb shell进入界面执行 基础非shell命令 1.安装app adb ...

  6. kafuka常用的shell命令

    kafka常用shell命令: ------------------------------------ 1.创建topic bin/kafka-topics.sh --create --zookee ...

  7. 工作中常用的 Shell 命令及技巧

    调试 bash 脚本的技巧 加 -x 参数运行 bash 脚本时,会显示执行的语句 # 也可以在 demo.sh 中加上 set -x bash -x demo.sh 设置环境变量,然后通过如上方式运 ...

  8. Linux下最常用的Shell命令的介绍

    Shell基础: 你可以通过打开Linux的terminal(终端)来执行Shell命令.Shell的种类有很多种,例如CSH,Bourne Shell,Korn Shell.在现在的大多数Linux ...

  9. Android 常用adb shell 命令

    原文地址http://blog.csdn.net/rain_butterfly/article/details/40894807 调试Android程序有时需要adb shell 命令,adb全称An ...

随机推荐

  1. redis日常使用汇总--持续更新

    redis日常使用汇总--持续更新 工作中有较多用到redis的场景,尤其是触及性能优化的方面,传统的缓存策略在处理持久化和多服务间数据共享的问题总是不尽人意,此时引入redis,但redis是单线程 ...

  2. Educational Codeforces Round 53 (Rated for Div. 2) D. Berland Fair

    题意:一个人  有T块钱 有一圈商店 分别出售 不同价格的东西  每次经过商店只能买一个  并且如果钱够就必须买 这个人一定是从1号店开始的!(比赛的时候读错了题,以为随意起点...)问可以买多少个 ...

  3. python里如何获取当前日期前后N天或N月的日期

    #!/usr/bin/python#_*_ coding:UTF-8_*_ import timeimport datetimeimport mathimport calendar ''' time. ...

  4. 【BZOJ5020】【THUWC2017】在美妙的数学王国中畅游 LCT 泰勒展开

    题目大意 给你一棵树,每个点有一个函数\(f(x)\) 正弦函数 \(\sin(ax+b) (a\in[0,1],b\in[0,\pi],a+b\in[0,\pi])\) 指数函数 \(e^{ax+b ...

  5. 【BZOJ1831】[AHOI2008]逆序对(动态规划)

    [BZOJ1831][AHOI2008]逆序对(动态规划) 题面 BZOJ 洛谷 题解 显然填入的数拎出来是不降的. 那么就可以直接大力\(dp\). 设\(f[i][j]\)表示当前填到了\(i\) ...

  6. docker-网络基础

    网络 Docker 网络从覆盖范围可分为单个 host 上的容器网络和跨多个 host 的网络 Docker 安装时会自动在 host 上创建三个网络, ⚡ root@bogon  /home  ...

  7. Tarjan求无向图割点、桥详解

    tarjan算法--求无向图的割点和桥   一.基本概念 1.桥:是存在于无向图中的这样的一条边,如果去掉这一条边,那么整张无向图会分为两部分,这样的一条边称为桥无向连通图中,如果删除某边后,图变成不 ...

  8. [2017-7-28]Android Learning Day6

    常用控件 Spinner DatePickerDialog TimePickerDiaog RadioButton CheckBox spinner(下拉菜单) <Spinner android ...

  9. [HAOI2010]最长公共子序列(LCS+dp计数)

    字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X ...

  10. wampserver安装之后出现“无法启动,因为计算机中丢失了msvr110.dll”

    1.是因为计算机缺失包所致,我的解决办法是安装一个包来解决. 2.网址如下:下载网址 3.下载完之后,然后安装就是(根据自己的系统版本来选择合适的安装版本).