精华内容
下载资源
问答
  • HBase Shell命令大全

    万次阅读 多人点赞 2019-03-18 20:55:18
    HBase关键名称: ...如果配置了HBase的环境变量了,就可以知己在命令行中输入hbase shell 命令进入命令行。 hbase shell help命令 可以通过 help '命名名称'来查看命令行的具体使用 查询服务器状态st...

    一:简介

    HBase的名字的来源于Hadoop database,即hadoop数据库,不同于一般的关系数据库,它是非结构化数据存储的数据库,而且它是基于列的而不是基于行的模式。

    HBase是一个分布式的、面向列的、基于Google Bigtable的开源实现。
    利用Hadoop HDFS作为其文件存储系统,
    利用Hadoop MapReduce来处理HBase中的海量数据,
    利用Zookeeper作为协同服务。

    二:HBase重要概念

    HBase的表结构

    HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族/列簇(column family),每个列族/列簇下面可以有多个普通列。

    在这里插入图片描述

    表Table

    HBase是用表来存储数据的。

    命名空间namespace

    namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。
    HBase系统默认定义了两个缺省的namespace:

    • hbase:系统内建表,包含namespace和meta表
    • default:用户建表时未指定namespace的表都创建在此

    行键 Row Key

    行键,每一行的主键列,每行的行键要唯一,行键的值为任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在HBase内部,rowKey保存为字节数组byte[]
    行的一次读写是原子操作 (不论一次读写多少列)

    区域Region

    Table在行的方向上分割为多个Region。

    Region是按大小分割的,每个表开始只有一个region,随着数据的增多,region不断增大,当增大到一个阀值的时候,region就会等分为两个新的region,之后会有越来越多的region。

    Region是HBase中分布式存储和负载均衡的最小单元。不同的Region分布到不同的RegionServer上。

    Region由一个或者多个Store组成, 每个Store保存一个column family, 每个Store又由一个MemStore(存储在内存中)和0到多个StoreFile(存储在HDFS上)组成
    在这里插入图片描述

    列族 column family

    列族是每个子列的父级,每个子列都属于一个列族,一个列族包含一个或者多个相关列,创建表的时候需要指定列族,而列不需要必须指定。通过“列族名:列名”来表示某个具体的子列。

    HBase中的Schema就是 TableName + Column Family Name

    列限定符

    就是列族下的每个子列名称,或者称为相关列,或者称为限定符,只是翻译不同。
    通过columnFamily:column来定位某个子列。

    存储单元 cell

    我们外观看到的每个单元格其实都对应着多个存储单元,默认情况下一个单元格对应着一个存储单元,一个存储单元可以存储一份数据,如果一个单元格有多个存储单元就表示一个单元格可以存储多个值。可以通过version来设置存储单元个数。可以通过
    rowKey + columnFamily + column + timestamp来唯一确定一个存储单元。cell中的数据是没有类型的,全部是字节码形式存贮。

    hbase按照时间戳降序排列各时间版本,其他映射建按照升序排序。

    时间戳版本号 timestamp

    每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。

    为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

    三:HBase Shell

    命名描述语法
    help ‘命名名’查看命令的使用描述help ‘命令名’
    whoami我是谁whoami
    version返回hbase版本信息version
    status返回hbase集群的状态信息status
    table_help查看如何操作表table_help
    create创建表create ‘表名’, ‘列族名1’, ‘列族名2’, ‘列族名N’
    alter修改列族添加一个列族:alter ‘表名’, ‘列族名’
    删除列族:alter ‘表名’, {NAME=> ‘列族名’, METHOD=> ‘delete’}
    describe显示表相关的详细信息describe ‘表名’
    list列出hbase中存在的所有表list
    exists测试表是否存在exists ‘表名’
    put添加或修改的表的值put ‘表名’, ‘行键’, ‘列族名’, ‘列值’
    put ‘表名’, ‘行键’, ‘列族名:列名’, ‘列值’
    scan通过对表的扫描来获取对用的值scan ‘表名’
    扫描某个列族: scan ‘表名’, {COLUMN=>‘列族名’}
    扫描某个列族的某个列: scan ‘表名’, {COLUMN=>‘列族名:列名’}
    查询同一个列族的多个列: scan ‘表名’, {COLUMNS => [ ‘列族名1:列名1’, ‘列族名1:列名2’, …]}
    get获取行或单元(cell)的值get ‘表名’, ‘行键’
    get ‘表名’, ‘行键’, ‘列族名’
    count统计表中行的数量count ‘表名’
    incr增加指定表行或列的值incr ‘表名’, ‘行键’, ‘列族:列名’, 步长值
    get_counter获取计数器get_counter ‘表名’, ‘行键’, ‘列族:列名’
    delete删除指定对象的值(可以为表,行,列对应的值,另外也可以指定时间戳的值)删除列族的某个列: delete ‘表名’, ‘行键’, ‘列族名:列名’
    deleteall删除指定行的所有元素值deleteall ‘表名’, ‘行键’
    truncate重新创建指定表truncate ‘表名’
    enable使表有效enable ‘表名’
    is_enabled是否启用is_enabled ‘表名’
    disable使表无效disable ‘表名’
    is_disabled是否无效is_disabled ‘表名’
    drop删除表drop的表必须是disable的
    disable ‘表名’
    drop ‘表名’
    shutdown关闭hbase集群(与exit不同)
    tools列出hbase所支持的工具
    exit退出hbase shell

    HBase Shell 是官方提供的一组命令,用于操作HBase。如果配置了HBase的环境变量了,就可以知己在命令行中输入hbase shell 命令进入命令行。

    hbase shell
    

    在这里插入图片描述

    help命令

    可以通过 help '命名名称'来查看命令行的具体使用,包括命令的作用和用法。
    通过help ‘hbase’ 命名来查看hbase shell 支持的所有命令,hbase将命令进行分组,其中ddl、dml使用较多。
    在这里插入图片描述

    在这里插入图片描述

    四:general 命名

    1. 显示集群状态status

    可以为 ‘summary’, ‘simple’, ‘detailed’, or ‘replication’. 默认为 ‘summary’

    hbase> status
    hbase> status 'simple'
    hbase> status 'summary'
    hbase> status 'detailed'
    hbase> status 'replication'
    hbase> status 'replication', 'source'
    hbase> status 'replication', 'sink'
    

    在这里插入图片描述

    2. 查询数据库版本version

    在这里插入图片描述

    3. 显示当前用户与组 whoami

    在这里插入图片描述

    4. 查看操作表的命令table_help

    在这里插入图片描述

    5. 退出HBase Shell exit

    exit
    

    五:ddl命令

    1. 创建表create

    注意:创建表时只需要指定列族名称,不需要指定列名。

    # 语法
    create '表名', {NAME => '列族名1'}, {NAME => '列族名2'}, {NAME => '列族名3'}
    # 此种方式是上上面的简写方式,使用上面方式可以为列族指定更多的属性,如VERSIONS、TTL、BLOCKCACHE、CONFIGURATION等属性
    create '表名', '列族名1', '列族名2', '列族名3'
    
    create '表名', {NAME => '列族名1', VERSIONS => 版本号, TTL => 过期时间, BLOCKCACHE => true}
    
    
    # 示例
    create 'tbl_user', 'info', 'detail'
    create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
    

    在这里插入图片描述

    2. 修改(添加、删除)表结构Schema alter

    2.1 添加一个列族

    # 语法 
    alter '表名', '列族名'
    
    # 示例
    alter 'tbl_user', 'address'
    

    在这里插入图片描述

    2.2 删除一个列族

    # 语法 
    alter '表名', {NAME=> '列族名', METHOD=> 'delete'}
    
    # 示例
    alter 'tbl_user', {NAME=> 'address', METHOD=> 'delete'}
    

    在这里插入图片描述
    3.3 修改列族的属性
    可以修改列族的VERSIONS、IN_MEMORY

    # 修改f1列族的版本为5
    alter 't1', NAME => 'f1', VERSIONS => 5
    
    # 修改多个列族,修改f2为内存,版本号为5
    alter 't1', 'f1', {NAME => 'f2', IN_MEMORY => true}, {NAME => 'f3', VERSIONS => 5}
    
    # 也可以修改table-scope属性,例如MAX_FILESIZE, READONLY,MEMSTORE_FLUSHSIZE, DEFERRED_LOG_FLUSH等。
    # 例如,修改region的最大大小为128MB:
    alter 't1', MAX_FILESIZE => '134217728'
    

    3. 异步修改Schema alter_async

    # change or add the 'f1' column family in table 't1' from defaults
    to instead keep a maximum of 5 cell VERSIONS
    alter_async 't1', NAME => 'f1', VERSIONS => 5
    
    # delete the 'f1' column family in table 'ns1:t1'
    alter_async 'ns1:t1', NAME => 'f1', METHOD => 'delete'
    alter_async 'ns1:t1', 'delete' => 'f1'
    
    # change the max size of a family to 128MB
    alter 't1', METHOD => 'table_att', MAX_FILESIZE => '134217728'
    alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
    

    4. 获取alter_async执行的状态 alter_status

    alter_status '表名'
    

    5. 获取表的描述describe

    # 语法 
    describe '表名'
    
    # 示例
    describe 'tbl_user'
    

    在这里插入图片描述

    6. 列举所有表list

    在这里插入图片描述

    7. 表是否存在exists

    # 语法 
    exists '表名'
    
    # 示例
    exists 'tbl_user'
    

    在这里插入图片描述

    8. 启用表enable和禁用表disable

    通过enable和disable来启用/禁用这个表,相应的可以通过is_enabled和is_disabled来检查表是否被禁用。

    # 语法
    enable '表名'
    is_enabled '表名'
    
    disable '表名'
    is_disabled '表名'
    
    # 示例
    disable 'tbl_user'
    is_disabled 'tbl_user'
    
    enable 'tbl_user'
    is_enabled 'tbl_user'
    

    在这里插入图片描述

    9. 禁用满足正则表达式的所有表disable_all

    • .匹配除“\n”和"\r"之外的任何单个字符
    • *匹配前面的子表达式任意次
    # 匹配以t开头的表名
    disable_all 't.*'
    # 匹配指定命名空间ns下的以t开头的所有表
    disable_all 'ns:t.*'
    # 匹配ns命名空间下的所有表
    disable_all 'ns:.*'
    

    10. 启用满足正则表达式的所有表enable_all

    enable_all 't.*'
    enable_all 'ns:t.*'
    enable_all 'ns:.*'
    

    11. 删除表drop

    需要先禁用表,然后再删除表,启用的表是不允许删除的

    # 语法
    disable '表名'
    drop '表名'
    
    # 示例
    disable 'tbl_user'
    drop 'tbl_user'
    

    在这里插入图片描述

    12. 删除满足正则表达式的所有表drop_all

    drop_all 't.*'
    drop_all 'ns:t.*'
    drop_all 'ns:.*'
    

    13. 获取某个表赋值给一个变量 get_table

    通过 var = get_table ‘表名’ 赋值给一个变量对象,然后对象.来调用,就像面向对象编程一样,通过对象.方法来调用,这种方式在操作某个表时就不必每次列举表名了。
    在这里插入图片描述

    14. 获取rowKey所在的区 locate_region

    locate_region '表名', '行键'
    

    在这里插入图片描述

    15. 显示hbase所支持的所有过滤器show_filters

    过滤器用于get和scan命令中作为筛选数据的条件,类型关系型数据库中的where的作用
    在这里插入图片描述


    六:namespace命令

    1. 列举命名空间 list_namespace

    在这里插入图片描述

    2. 获取命名空间描述 describe_namespace

    在这里插入图片描述

    3. 查看命名空间下的所有表 list_namespace_tables

    在这里插入图片描述

    4. 创建命名空间create_namespace

    在这里插入图片描述

    5. 修改命名空间的属性

    # add/modify a property
    alter_namespace 'ns1', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
    # delete a property
    alter_namespace 'ns1', {METHOD => 'unset', NAME=>'PROPERTY_NAME'}
    

    6. 删除命名空间drop_namespace

    drop_namespace '命名空间名称'
    

    七:dml命令

    1. 插入或者修改数据put

    # 语法
    # 当列族中只有一个列时'列族名:列名'使用'列族名'
    put '表名', '行键', '列族名', '列值'
    put '表名', '行键', '列族名:列名', '列值'
    
    # 示例
    
    # 创建表
    create 'tbl_user', 'info', 'detail', 'address'
    
    # 第一行数据
    put 'tbl_user', 'mengday', 'info:id', '1'
    put 'tbl_user', 'mengday', 'info:name', '张三'
    put 'tbl_user', 'mengday', 'info:age', '28'
    
    put 'tbl_user', 'mengday', 'detail:birthday', '1990-06-26'
    put 'tbl_user', 'mengday', 'detail:email', 'abc@163.com'
    put 'tbl_user', 'mengday', 'detail:create_time', '2019-03-04 14:26:10'
    
    put 'tbl_user', 'mengday', 'address', '上海市'
    
    # 第二行数据
    put 'tbl_user', 'vbirdbest', 'info:id', '2'
    put 'tbl_user', 'vbirdbest', 'info:name', '李四'
    put 'tbl_user', 'vbirdbest', 'info:age', '27'
    
    put 'tbl_user', 'vbirdbest', 'detail:birthday', '1990-06-27'
    put 'tbl_user', 'vbirdbest', 'detail:email', 'xxx@gmail.com'
    put 'tbl_user', 'vbirdbest', 'detail:create_time', '2019-03-05 14:26:10'
    
    put 'tbl_user', 'vbirdbest', 'address', '北京市'
    
    
    # 第一行数据
    put 'tbl_user', 'xiaoming', 'info:id', '3'
    put 'tbl_user', 'xiaoming', 'info:name', '王五'
    put 'tbl_user', 'xiaoming', 'info:age', '26'
    
    put 'tbl_user', 'xiaoming', 'detail:birthday', '1990-06-28'
    put 'tbl_user', 'xiaoming', 'detail:email', 'xyz@qq.com'
    put 'tbl_user', 'xiaoming', 'detail:create_time', '2019-03-06 14:26:10'
    
    put 'tbl_user', 'xiaoming', 'address', '杭州市'
    

    在这里插入图片描述

    2. 全表扫描scan

    获取表的所有数据

    # 语法
    scan '表名'
    
    # 示例
    scan 'tbl_user'
    

    在这里插入图片描述
    注意:中文编码了

    扫描整个列簇

    # 语法
    scan '表名', {COLUMN=>'列族名'}
    
    # 示例
    scan 'tbl_user', {COLUMN=>'info'}
    

    在这里插入图片描述

    扫描整个列簇的某个列

    # 语法
    scan '表名', {COLUMN=>'列族名:列名'}
    
    # 示例
    scan 'tbl_user', {COLUMN=>'info:age'}
    

    在这里插入图片描述

    3. 获取数据get

    # 语法
    get '表名', '行键'
    
    # 示例
    get 'tbl_user', 'mengday'
    

    在这里插入图片描述
    根据某一行某列族的数据

    # 语法
    get '表名', '行键', '列族名'
    
    # 示例
    get 'tbl_user', 'mengday', 'info'
    

    在这里插入图片描述

    # 创建表,c1版本为4, 元数据mykey=myvalue
    hbase(main):009:0> create 't1', {NAME => 'c1', VERSIONS => 4}, METADATA => { 'mykey' => 'myvalue' }
    0 row(s) in 2.2810 seconds
    
    => Hbase::Table - t1
    # 添加列族c2, c3
    hbase(main):010:0> alter 't1', 'c2', 'c3'
    Updating all regions with the new schema...
    1/1 regions updated.
    Done.
    Updating all regions with the new schema...
    1/1 regions updated.
    Done.
    0 row(s) in 3.8320 seconds
    
    # 出入数据,c1 插入4个版本的值
    hbase(main):011:0> put 't1', 'r1', 'c1', 'v1'
    0 row(s) in 0.1000 seconds
    
    hbase(main):012:0> put 't1', 'r1', 'c1', 'v11'
    0 row(s) in 0.0180 seconds
    
    hbase(main):013:0> put 't1', 'r1', 'c1', 'v111'
    0 row(s) in 0.0140 seconds
    
    hbase(main):014:0> put 't1', 'r1', 'c1', 'v1111'
    0 row(s) in 0.0140 seconds
    
    # 插入c2、c3的值
    hbase(main):015:0> put 't1', 'r1', 'c2', 'v2'
    0 row(s) in 0.0140 seconds
    
    hbase(main):016:0> put 't1', 'r1', 'c3', 'v3'
    0 row(s) in 0.0210 seconds
    
    # 获取rowKey=r1的一行记录
    hbase(main):017:0> get 't1', 'r1'
    COLUMN                                              CELL
     c1:                                                timestamp=1552819382575, value=v1111
     c2:                                                timestamp=1552819392398, value=v2
     c3:                                                timestamp=1552819398244, value=v3
    3 row(s) in 0.0550 seconds
    
    # 获取rowKey=r1并且 1552819392398 <= 时间戳范围 < 1552819398244
    hbase(main):018:0> get 't1', 'r1', {TIMERANGE => [1552819392398, 1552819398244]}
    COLUMN                                              CELL
     c2:                                                timestamp=1552819392398, value=v2
    1 row(s) in 0.0090 seconds
    
    # 获取指定列的值
    hbase(main):019:0> get 't1', 'r1', {COLUMN => 'c1'}
    COLUMN                                              CELL
     c1:                                                timestamp=1552819382575, value=v1111
    1 row(s) in 0.0160 seconds
    
    # 获取指定列的值,多个值使用数组表示
    hbase(main):020:0> get 't1', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
    COLUMN                                              CELL
     c1:                                                timestamp=1552819382575, value=v1111
     c2:                                                timestamp=1552819392398, value=v2
     c3:                                                timestamp=1552819398244, value=v3
    3 row(s) in 0.0170 seconds
    
    # 获取c1的值,获取4个版本的值,默认是按照时间戳降续排序的
    hbase(main):021:0> get 't1', 'r1', {COLUMN => 'c1', VERSIONS => 4}
    COLUMN                                              CELL
     c1:                                                timestamp=1552819382575, value=v1111
     c1:                                                timestamp=1552819376343, value=v111
     c1:                                                timestamp=1552819368993, value=v11
     c1:                                                timestamp=1552819362975, value=v1
    4 row(s) in 0.0180 seconds
    
    # 获取c1的3个版本值
    hbase(main):027:0* get 't1', 'r1', {COLUMN => 'c1', VERSIONS => 3}
    COLUMN                                               CELL
     c1:                                                 timestamp=1552819382575, value=v1111
     c1:                                                 timestamp=1552819376343, value=v111
     c1:                                                 timestamp=1552819368993, value=v11
    3 row(s) in 0.0090 seconds
    
    # 获取指定时间戳版本的列
    hbase(main):022:0> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => 1552819376343}
    COLUMN                                              CELL
     c1:                                                timestamp=1552819376343, value=v111
    1 row(s) in 0.0170 seconds
    
    hbase(main):023:0> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => 1552819376343, VERSIONS => 4}
    COLUMN                                              CELL
     c1:                                                timestamp=1552819376343, value=v111
    1 row(s) in 0.0130 seconds
    
    # 获取rowKey=r1中的值等于v2的所有列
    hbase(main):024:0> get 't1', 'r1', {FILTER => "ValueFilter(=, 'binary:v2')"}
    COLUMN                                              CELL
     c2:                                                timestamp=1552819392398, value=v2
    1 row(s) in 0.0510 seconds
    
    
    hbase(main):025:0> get 't1', 'r1', {COLUMN => 'c1', ATTRIBUTES => {'mykey'=>'myvalue'}}
    COLUMN                                              CELL
     c1:                                                timestamp=1552819382575, value=v1111
    1 row(s) in 0.0100 seconds
    

    4. 删除某个列族中的某个列delete

    # 语法
    delete '表名', '行键', '列族名:列名'
    
    
    create 'tbl_test', 'columnFamily1'
    
    put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value1'
    put 'tbl_test', 'rowKey1', 'columnFamily1:column2', 'value2'
    
    delete 'tbl_test', 'rowKey1', 'columnFamily1:column1'
    

    在这里插入图片描述

    5. 删除某行数据deleteall

    # 语法
    deleteall '表名', '行键'
    
    # 示例
    deleteall 'tbl_test', 'rowKey1'
    

    在这里插入图片描述

    6. 清空整个表的数据truncate

    先disable表,然后再drop表,最后重新create表

    truncate '表名'
    

    在这里插入图片描述

    7. 查询表中有多少行count

    # 语法
    count '表名'
    
    # 示例
    count 'tbl_user'
    

    在这里插入图片描述

    8. 自增incr

    # 语法
    incr '表名', '行键', '列族:列名', 步长值
    
    # 示例 
    # 注意:incr 可以对不存的行键操作,如果行键已经存在会报错,如果使用put修改了incr的值再使用incr也会报错
    # ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: Field is not a long, it's 2 bytes wide
    incr 'tbl_user', 'xiaohong', 'info:age', 1
    

    在这里插入图片描述

    9. 计数器get_counter

    # 点击量:日、周、月
    create 'counters', 'daily', 'weekly', 'monthly'
    incr 'counters', '20110101', 'daily:hits', 1
    incr 'counters', '20110101', 'daily:hits', 1
    get_counter 'counters', '20110101', 'daily:hits'
    

    在这里插入图片描述

    10. 修饰词

    10.1 COLUMNS: 查询同一个列族的多个列
    # 语法
    
    scan '表名', {COLUMNS => [ '列族名1:列名1', '列族名1:列名2', ...]}
    
    # 示例
    scan 'tbl_user', {COLUMNS => [ 'info:id', 'info:age']}
    

    在这里插入图片描述

    10.2 TIMESTAMP 指定时间戳
    scan 't1', {COLUMNS => 'c2', TIMESTAMP=> 1552819392398}
    
    10.3 TIMERANGE表示的是”>=开始时间 and <结束时间“
    # 语法
    scan '表名',{TIMERANGE=>[timestamp1, timestamp2]}
    
    # 示例
    scan 'tbl_user',{TIMERANGE=>[1551938004321, 1551938036450]}
    

    在这里插入图片描述

    10.4 VERSIONS

    默认情况下一个列只能存储一个数据,后面如果修改数据就会将原来的覆盖掉,可以通过指定VERSIONS时HBase一列能存储多个值。

    create 'tbl_test', 'columnFamily1'
    describe 'tbl_test'
    
    # 修改列族版本号
    alter 'tbl_test', { NAME=>'columnFamily1', VERSIONS=>3 }
    
    put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value1'
    put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value2'
    put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value3'
    
    # 默认返回最新的一条数据
    get 'tbl_test','rowKey1','columnFamily1:column1'
    
    # 返回3个
    get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>3}
    # 返回2个
    get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>2}
    

    在这里插入图片描述

    10.5 STARTROW

    ROWKEY起始行。会先根据这个key定位到region,再向后扫描

    # 语法
    scan '表名', { STARTROW => '行键名'}
    
    # 示例
    scan 'tbl_user', { STARTROW => 'vbirdbest'}
    

    在这里插入图片描述

    10.6 STOPROW :截止到STOPROW行,STOPROW行之前的数据,不包括STOPROW这行数据
    # 语法
    scan '表名', { STOPROW => '行键名'}
    
    # 示例
    scan 'tbl_user', { STOPROW => 'vbirdbest'}
    

    在这里插入图片描述

    10.7 LIMIT 返回的行数
    # 语法
    scan '表名', { LIMIT => 行数}
    
    # 示例
    scan 'tbl_user', { LIMIT => 2 }
    

    在这里插入图片描述

    11. FILTER条件过滤器

    过滤器之间可以使用AND、OR连接多个过滤器。

    ValueFilter 值过滤器
    # 语法:binary 等于某个值
    scan '表名', FILTER=>"ValueFilter(=,'binary:列值')"
    # 语法 substring:包含某个值
    scan '表名', FILTER=>"ValueFilter(=,'substring:列值')"
    
    # 示例
    scan 'tbl_user', FILTER=>"ValueFilter(=, 'binary:26')"
    scan 'tbl_user', FILTER=>"ValueFilter(=, 'substring:6')"
    

    在这里插入图片描述

    ColumnPrefixFilter 列名前缀过滤器
    # 语法 substring:包含某个值
    scan '表名', FILTER=>"ColumnPrefixFilter('列名前缀')"
    
    # 示例
    scan 'tbl_user', FILTER=>"ColumnPrefixFilter('birth')"
    # 通过括号、AND和OR的条件组合多个过滤器
    scan 'tbl_user', FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter(=,'substring:26')"
    

    在这里插入图片描述

    rowKey字典排序

    Table中的所有行都是按照row key的字典排序的
    在这里插入图片描述

    三:HBase 常见错误

    hbase shell在使用的时候经常会报错,这里列举了几个错误:

    1. HBase创建不存在的表报已经存在错误 ERROR: Table already exists: !

    解决办法:

    # 1. 进入zookeeper client模式
    cd /usr/local/Cellar/hbase/1.2.9/bin
    hbase zkcli
    
    # 2. 在zk client模式下输入ls /hbase/table命令看到zombie table
    ls /hbase/table
    
    # 3. 删除表,TABLE_NAME为要删除的表名
    rmr /hbase/table/TABLE_NAME
    
    # 4. 重启hbase
    ./stop-hbase.sh
    ./start-hbase.sh
    
    2. ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet
    # 使用jps查看是否有datanode服务
    jps
    
    删除hadoop 的临时目录
    /usr/local/Cellar/hadoop/3.1.1/libexec/tmp
    
    3. ERROR: Can’t get master address from ZooKeeper; znode data == null
    # 重启hbase
    ./stop-hbase.sh
    
    ./start-hbase.sh
    

    4. ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing

    这个错误出现的原因很多,这里说一下我的错误原因是hbase-site.xml中的有个属性名配置错误, 网上有的是hbase.rootdir, name配置成这个有的时候会报错有的时候不会报错,报错的时候格式化一下hadoop然后再重新启动,这种方式有的时候能解决问题,有的时候解决不了。这里我将hbase.rootdir改为hbase.root.dir 就不报错了,不知道是不是版本不同属性名配置不同,我的hadoop版本为3.1.1,hbase版本为1.2.9

    <!-- 正确的配置的属性名应为hbase.root.dir而不是hbase.rootdir -->
    <property>
      <name>hbase.root.dir</name>
      <value>hdfs://localhost:8020/hbase</value>
    </property>
    

    相关文档

    HBase操作(Shell与Java API)https://blog.csdn.net/u013980127/article/details/52443155

    展开全文
  • HBase Shell命令

    2019-05-23 09:17:21
    HBase包含可以与HBase进行通信的Shell。...常用的HBase Shell命令。 数据操纵语言 命令 说明 命令表达式 create 创建一个表 create '表名称', '列名称1','列名称2','列名称N' put 添加记录 put '表名称...

    HBase包含可以与HBase进行通信的Shell。 HBase使用Hadoop文件系统来存储数据。所有这些任务发生在HDFS。下面给出的是一些由

    常用的HBase Shell命令。

    数据操纵语言

    1. 命令    说明    命令表达式
    2. create    创建一个表    create '表名称', '列名称1','列名称2','列名称N'
    3. put     添加记录    put '表名称', '行名称', '列名称:', '值'
    4. get     查看记录    get '表名称', '行名称'
    5. count    查看表中的记录总数    count  '表名称'
    6. delete     删除记录    delete  '表名' ,'行名称' , '列名称'
    7. scan     查看所有数据    scan "表名称" 
    8. scan        查看表某列数据    scan "表名称" , ['列名称:']

    数据定义语言

    1. list    列出HBase的所有表
    2. disable    禁用表    disable '表名称'
    3. is_disabled    验证表是否被禁用    is_disabled '表名称'
    4. enable     启用一个表    enable '表名称'
    5. is_enabled      验证表是否已启用    is_enabled '表名称'
    6. describe      提供了一个表的描述    describe '表名称'
    7. alter     改变一个表
    8. exists        验证表是否存在    exists '表名称'
    9. drop         从HBase中删除表     drop  '表名称'
    10. drop_all     丢弃在命令中给出匹配“regex”的表
    11. truncate      清空整张表    truncate '表名称'
    12. deleteall     删除给定行的所有单元格      deleteall '表名称','行名称'

     

    展开全文
  • Hbase shell命令

    千次阅读 2020-12-21 18:04:10
    Hbase shell命令 1.基础概念 (1)表( table ):HBase采用表来组织数据; (2)行( row ):每个表都由行组成,每个行由行键( row key )来标识,行键可以是任意字符串; (3)列族( column family ):一个...

    Hbase shell命令

    1.基础概念

    (1)表( table ):HBase采用表来组织数据;

    (2)行( row ):每个表都由行组成,每个行由行键( row key )来标识,行键可以是任意字符串;

    (3)列族( column family ):一个table有许多个列族,列族是列的集合,属于表结构,也是表的基

    本访问控制单元;

    (4)列标识(column qualifier):属于某一个Column Family:Column Qualifier形式标识,每条记录

    可动态添加

    (5)时间戳( timestamp ):时间戳用来区分数据的不同版本;

    (6)单元格( cell ):在table中,通过行、列族、列、时间戳来确定一个cell,cell中存储的数据没有

    数据类型,是字节数组byte[]

    2.DDL操作

    命名空间namespace指的是一个表的逻辑分组,同一组中的表有类似的用途,限制一个namespace可以使用的资源,资源包括region和table等

    2.1创建命名空间

    create_namespace 'bigdata'
    

    2.2查看命名空间

    list_namespace 
    

    2.3查表

    查看所有表

    list
    

    2.4 创建表

    hbase中使用create来创建表

    语法:

    create 'tl' 'columnfamily'
    create 'ns1:tl' 'columnfamily'
    

    列子:

    #在bigdata命名空间下创建表Student,列族有Info
    create 'bigdata:Student','Info'
    
    #创建一个Student表,有2个列族,Info,Grades
    create 'Student','Info','Grades'
    
    #创建表,并生成一个列族info,指定其版本号为5,开启BLOCKCACHE
    create 'Student', { NAME=>’info’, VERSION=>5, BLOCKCACHE=>true}
    
    #创建表,设置表的hregion FILESIZE最大字节数
    create‘Student’,‘StuInfo’,‘Grades’,MAX_FILESIZE=>‘134217718’
    

    2.5查看表

    语法:

    describe 'tableName'
    

    列子:

    #查看刚刚创建的Student表
    describe 'Student'
    

    2.6改表

    语法:

    alter 'tableName',{修改信息}
    alter 'tableName','delete'=>'删除列族名'
    alter 'tableName','添加列族名'
    

    例子:

    #修改Info列族保留版本数
    alter 'Student',{NAME=>'Info',VERSIONS=>3}
    #删除列族Grade
    alter 'Student','delete'=>'Grade'
    #增加一个列族hobby
    alter 'Student','hobby'
    

    2.7删表

    要删除一个表,要先解禁一个表,解禁表使用disable命令,

    disable 'Student'
    drop 'Student'
    

    3.DML

    3.1增

    语法:

    put 'ns1:t1' 'r1' 'c1', 'value','timestamp'
    ...
    

    例子:

    #表Stuent,行键1001,列族Info中的name列,存放值'zhangsan',timestamp默认使用系统的
    put 'Stuent' '1001','Info:name','zhangsan'
    
    #在最后写指定的时间戳
    put 'Stuent' '1001','Info:name','zhangsan',1
    
    #列族中的列是动态扩展的,无需定义列
    put 'Stuent' '1001','Info:sex','nan'
    

    3.2更新

    hbase有时间戳,当数据进行更新的时候,执行的是非覆盖型更新,也就是说旧的数据会保留下来,而非被新数据完全覆盖掉,而查询的时候会默认优先查最新版本的 ,除非指定版本,一般的查询都是返回最新的数据。

    语法:

    put 'ns1:t1' 'r1' 'c1', 'value','timestamp'
    ...
    

    例子:

    #后一个数据拥有最新时间戳,所以查询时,如果不指定,默认返回拥有最新时间戳的信息
    put 'Stuent' '1001','Info:name','zhangsan'
    put 'Stuent' '1001','Info:name','zhangsan2'
    #get 'Stuent' '1001','Info:name' 会返回'zhangsan2'
    
    #hbase会将三个版本的Info:name都保存下来,默认只查最新的'zhangsan3'
    #这样从而实现类似于改的操作
    put 'Stuent' '1001','Info:name','zhangsan'
    put 'Stuent' '1001','Info:name','zhangsan2'
    put 'Stuent' '1001','Info:name','zhangsan3'
    

    3.3查

    语法:

    scan 'ns1:t1',{条件}
    #get能指定到单元,row,列族,列
    get 't1','r1','c1',{条件}
    get 't1','r1',{条件}
    ...
    

    例子:

    #查看整个Student表(默认放回最新版本号的数据)
    scan 'Student'
    
    #指定查询范围(扫描1001行到1003,不包含1003)
    scan 'Student',{ STARTROW=>'1001', STOPROW=>'1003'}
    
    #查询所有数据(三个版本内的)
    scan 'Student',{ RAW=>true,VERSIONS=>3}
    
    #查看表Student的1001行(默认放回的信息都是最新版本号的)
    get 'Student','1001'
    
    #查看表Student的1001行,列族为Grade的信息
    get 'Student','1001', 'Grade'
    get 'Student','1001', { COLUMN=>Grade}
    
    #查看Student的1001行,列族Info中的name的数据
    get 'Student','1001','Info:name'
    
    #获取俩个版本内的
    get 'Student','0001','stuInfo',{ VERSIONS=>2}
    

    3.4删

    语法:

    delete 't1','r1','c1'
    delete 't1','r1','c1',ts1
    delete 't1','r1','c1',ts1,{条件}
    ...
    deleteall 't1','r1'
    truncate 't1'
    

    例子:

    #删除1001的Name(最新版本的信息将被打上删除标记)
    #旧版本依旧存在, get 'Student','1001',{RAW=>true,VERSIONS=>3}
    delete 'Stuent','1001','Info:Name'
    
    #删除1001行
    deleteall 'Stuent','1001'
    
    #删除整个表数据(完成禁用、删除,按原结构重新建立表结构的过程)
    truncate 'Student'
    
    展开全文
  • hbase shell 命令

    千次阅读 2018-09-10 23:06:43
    hbase shell 命令 list 查看存在哪些表 scan “表名称” 插卡某个表某个列中所有数据 create ‘people’,’info1’,’info2’ 创造表并指定列簇 put put ‘people’,’10001’,’info1:age’,’20’ people是...

    hbase shell 命令

    • list
      查看存在哪些表
    • scan “表名称”
      插卡某个表某个列中所有数据
    • create ‘people’,’info1’,’info2’
      创造表并指定列簇
    • put
      • put ‘people’,’10001’,’info1:age’,’20’
        people是表名,10001是rowkey
    • count ‘people’
      查看表中有多少行
    • get ‘people’,’10001’
      查看一张表中某 row key 的所有数据
    • get ‘people’,’10001’,’info1’
      查看一张表中某 row key 下某列簇的数据
    • scan ‘people’,{COLUMNS=>’info1’}
      扫描整个列簇
    • scan ‘people’,{COLUMNS=>’info1:age’}
      指定扫描其列簇中的某个列
    • describe ‘people’
      获得表的描述
    • alter ‘people’,’id’
      添加一个列簇
    • alter ‘people’, {NAME => ‘info1’, METHOD => ‘delete’}
      删除一个列簇
    • delete ‘people’,’10001’,’info1:age’
      删除某row key的某一列
    • deleteall ‘people’,’10001’
      删除某一行
    • is_enabled ‘people’
      启用表
    • is_disabled ‘people’
      禁用表
    • drop ‘people’
      删除表,删除表之前需要先将表disable
    展开全文
  • HBase Shell命令大全_monday的博客-CSDN博客_hbase shell.html
  • HbaseShell命令

    2017-03-31 19:06:42
    Hbase Shell命令: 创建一个表, Create +’表名’ ,+’列族名1’,’列族名2’ 查看所有的表:list 添加数据: 添加student表,主键为Test,列族为basic,添加列族name为xiaominng的数据: put 'student','...
  • hbase shell命令

    2014-11-20 15:18:54
    如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之后再使用hbase shell进入可以使用whoami命令可查看当前用户 hbase(main)> whoami 表的管理 ...
  • hbase shell命令详解

    2016-06-18 13:55:01
    hbase shell命令详解
  • 主要介绍了Hadoop 中 HBase Shell命令的详解的相关资料,需要的朋友可以参考下
  • Hbase shell 命令

    2017-08-12 16:53:01
    打开Hadoop: sbin/start-...1.启动: bin/hbase shell 2.帮助:help 3.Debug模式:debug 退出ds 4.Status :查看集群的各种信息 5.Version:查看版本 6.创建一个表和两个列族:create 'table1','cm1','cm2'
  • 实验9-HBase shell命令使用.pdf
  • Hbase Shell 命令

    千次阅读 2013-11-02 15:54:55
    Hbase Shell 命令 描述 alter 修改 列族 模式 count 统计表中 行的数量 create 创建 表 describe 显示 表 相关的 详细信息 delete 删除指定 对象值...
  • HBase shell 命令

    2017-07-08 10:02:03
    HBase shell 命令。   进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之后再使用hbase shell进入可以使用whoami命令...
  • shell中调用hbase shell命令

    千次阅读 2015-03-31 18:07:21
    4. hbase shell脚本  既然是shell命令,当然也可以把所有的hbase shell命令写入到一个文件内,想linux shell脚本程序那样去顺序的执行所有命令。如同写linux shell,把所有hbase ... $ hbase shell test.hbaseshell
  • 以下HBase Shell命令的执行结果可供演示参考 hbase(main:001:0> create 'scores'grade'course' 0 row(s) in 0.5940 seconds => Hbase:Table - scores hbase(main:001:0> list TABLE scores 1 row(s) in 0.3580 ...
  • Hbase shell命令的特别操作 backspace 清除后面写错的 ctrl+ backspace清除前面写错的 当有语法错误的时候,诸如下面所示, 可以输入 >’ 退出本次执行,再次输入正确的命令后,可重新执行

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,893
精华内容 8,757
关键字:

hbaseshell命令