zoukankan      html  css  js  c++  java
  • Hbase_02、Hbase的常用的shell命令&Hbase的DDL操作&Hbase的DML操作(转)

    前言

    笔者在分类中的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
  • 相关阅读:
    软件体系架构复习要点
    Operating System on Raspberry Pi 3b
    2019-2020 ICPC North-Western Russia Regional Contest
    2019 ICPC ShenYang Regional Online Contest
    2019 ICPC XuZhou Regional Online Contest
    2019 ICPC NanChang Regional Online Contest
    2019 ICPC NanJing Regional Online Contest
    Codeforces Edu Round 72 (Rated for Div. 2)
    Codeforces Round #583 (Div.1+Div.2)
    AtCoder Beginning Contest 139
  • 原文地址:https://www.cnblogs.com/hit-zb/p/8628498.html
Copyright © 2011-2022 走看看