• hbase常用命令


    常用命令格式

    名称命令表达式
    创建表create ‘表名称’, ‘列名称1’,‘列名称2’,‘列名称N’
    添加记录put ‘表名称’, ‘行名称’, ‘列名称:’, ‘值’
    查看记录get ‘表名称’, ‘行名称’
    查看表中的记录总数count ‘表名称’
    删除记录delete ‘表名’ ,‘行名称’ , ‘列名称’
    删除一张表先要屏蔽该表,才能对该表进行删除,第一步 disable ‘表名称’ 第二步 drop ‘表名称’
    查看所有记录scan “表名称”
    查看某个表某个列中所有数据scan “表名称” , [‘列名称:’]
    更新记录就是重写一遍进行覆盖

    HBase Shell操作

    控制台

    # 进入HBase Shell控制台
    export HBASE_HOME=/usr/local/hbase
    ${HBASE_HOME}/bin/hbase shell
    # 如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之后再使用hbase shell进入可以使用whoami命令可查看当前用户。
    hbase(main)> whoami
    
    • 1
    • 2
    • 3
    • 4
    • 5

    直接运行

    echo "list" | hbase shell
    echo "user_permission" | hbase shell
    echo "whoami" | hbase shell
    
    • 1
    • 2
    • 3

    脚本调用

    # 1. 将执行命令编辑到command.txt
    # 2. HBase shell调用命令文本
    hbase shell ./command.txt
    
    • 1
    • 2
    • 3

    常用操作

    1. NameSpace
    ################################# - 命名空间 - #################################
    # 查看namespace 
    hbase(main)> scan 'hbase:namespace'
    # 展示namespace
    hbase(main)> list_namespace
    # 展示namespace下所有表(默认,hbase命名空间有meta、namespace,配置acl后会新增acl表)
    hbase(main)> list_namespace_tables 'hbase'
    # 创建namespace
    hbase(main)> help 'create_namespace'
    hbase(main)> create_namespace 'nstest'
    # 查看namespace描述
    hbase(main)> describe_namespace 'nstest'
    # 修改,只能修改命名空间的属性,对于名称是不能修改的
    hbase(main)> help 'alter_namespace'
    # 添加,修改一个属性
    hbase(main)> alter_namespace 'nstest', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
    # 删除一个属性
    hbase(main)> alter_namespace 'nstest', {METHOD => 'unset', NAME=>'PROPERTY_NAME'}
    # 删除
    hbase(main)> drop_namespace 'nstest'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    1. Table DDL

    创建表时不需要进入到某个命名空间下,没有use命令,不同于RDBMS。如:‘nstest:t1’ 表与命名空间的关联通过“:”这个符号。相关规范如下:

    1指定某一个namespace下的某一张表;

    2必须要指定一个列族;

    3“=>”表示等于的意思;

    4一对{}只能定义一个列簇,不同的{}定义不同多个列簇;

    5{}中的变量名称必须是大写的;

    6VERSIONS指定列簇下存储多个版本的数据;

    ################################# - 创建表 - #################################
    # 基本语法:create , {NAME => , VERSIONS => }
    # 简单示例(至少有一个列簇)
    hbase(main)> create 't1','f1'
    hbase(main)> create 't1', {NAME => 'f1'}
    # 示例:多个列簇
    hbase(main)> create 't1', 'f1', 'f2'
    # 示例:创建表,指定命名空间
    hbase(main)> create 'nstest:t1', 'f1'
    hbase(main)> create 'nstest:t1', {NAME => 'f1', VERSIONS => 2}
    # 示例:创建表t1,有两个family name:f1,f2,且版本数均为2
    hbase(main)> create 'nstest:t1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2}
    
    # 示例:创建表,f1列簇下的所有cell的存活时间为30秒,从最后一次更新开始计时;f2列簇下的所有cell的存活时间为默认值,TTL => 'FOREVER'
    hbase(main)> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 30, BLOCKCACHE => true},{NAME => 'f2',VERSIONS => 1,BLOCKCACHE => true}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    注意:TTL(Time to Live) 用于限定数据的有效时间,ColumnFamily 默认的TTL值是FOREVER,也就是永不过期。ColumnFamily TTL的时间单位是:秒,Cell TTL的时间单位是:毫秒。Cell TTL设置的值,优先于ColumnFamily TTL的值,但是需要注意的是,Cell TTL不能大于ColumnFamily TTL的值。如果使用ColumnFamily TTL,则TTL值对该列簇下面的所有列,都起作用,包括多版本的值。Cell TTL针对当前列起作用。

    describe

    ################################# - 查看表 - #################################
    # 查看有哪些表
    hbase(main)> list
    # 查看表的结构 语法:describe 
    hbase(main)> describe 't1' # 描述表(如果指定namespace需要指明,否则会查询默认命名空间) hbase(main)> describe 'nstest:t1' hbase(main)> desc 'nstest:t1' # 查看表是否存在 hbase(main)> exists 'nstest:t1'
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    alter

    ################################# - 更新表 - #################################
    # 修改表中列簇属性(alter不能修改表的名称)
    # 示例:alter修改指定某个列簇的属性
    # 增加/修改列族(如果表中已存在该列族表示修改该列簇属性,反之就是增加一个列族)
    hbase(main)> alter 'nstest:t1', NAME => 'f1', VERSIONS => 5
    # 示例:修改多个列簇的属性
    hbase(main)> alter 'nstest:t1', 'f1', {NAME => 'f2', IN_MEMORY => true}, {NAME => 'f3', VERSIONS => 5}
    # 示例:删除列簇(不支持同时删除多个列簇)
    hbase(main)> alter 'nstest:t1', NAME => 'f3', METHOD => 'delete'
    hbase(main)> alter 'nstest:t1', 'delete' => 'f2'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    drop

    ################################# - 删除表 - #################################
    # 删除表(需要注意在hbase中删除表前都需要先禁用这张表)
    hbase(main)> help 'drop'
    # 禁用
    hbase(main)> disable 'nstest:t1'
    # 启用
    hbase(main)> enable 'nstest:t1'
    # 删除
    hbase(main)> drop 'nstest:t1'
    # 是否禁用状态
    hbase(main)> is_disabled 'nstest:t1'
    # 是否启用状态
    hbase(main)> is_enabled 'nstest:t1'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    truncate

    ################################# - 删除表 - #################################
    # 删除表(需要注意在hbase中删除表前都需要先禁用这张表)
    hbase(main)> help 'drop'
    # 禁用
    hbase(main)> disable 'nstest:t1'
    # 启用
    hbase(main)> enable 'nstest:t1'
    # 删除
    hbase(main)> drop 'nstest:t1'
    # 是否禁用状态
    hbase(main)> is_disabled 'nstest:t1'
    # 是否启用状态
    hbase(main)> is_enabled 'nstest:t1'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    注意:truncate使用时需谨慎,truncate将删除预分区信息。

    1. Table DML

    put

    ################################# - 新增/修改数据 - #################################
    hbase(main)> help 'put'
    # 语法:put 
    ,,,, # row1表示rowkey,f1:name表示列簇+列,value表示插入的值 hbase(main)> put 'nstest:t1', 'row1', 'f1:name', 'value' hbase(main)> put 'nstest:t1', 'row2', 'f1:name', 'value2'
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    delete

    ################################# - 删除数据 - #################################
    # 删除行中的某个列值
    # 语法:delete 
    , , , ,必须指定列名 # 例如:删除表t1,row1中的f1:name的数据(注:将删除该行f1:name列所有版本的数据) hbase(main)> delete 'nstest:t1','row1','f1:name' # 例如:将记录中<=1597109046167,最近的一条记录标记为删除(type=DeleteColumn/DeleteFamily) hbase(main)> delete 'nstest:t1', 'row1', 'f1:name', 1597109046167 # 删除行 # 语法:deleteall
    , , , ,可以不指定列名,删除整行数据 # 例如:删除表t1,row1的数据 hbase(main)> deleteall 'nstest:t1','row1'
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    flush

    ################################# - 刷写磁盘 - #################################
    # flush可以删除部分type=DeleteColumn/DeleteFamily数据(注意:flush只能删除内存数据)
    hbase(main)> flush 'nstest:t1'
    hbase(main)> flush 'region名称' # 可在region web管理找到
    
    • 1
    • 2
    • 3
    • 4
    1. DQL

    get

    快速查询(指定索引查询),必须要跟rowkey,hbase默认按照字典序进行排列。

    ################################# - 快速查询(单行) - #################################
    # 语法:get 
    ,,[,....] # 查询某个rowkey的数据 hbase(main)> get 'nstest:t1','row1' # 指定某个列簇的数据 hbase(main)> get 'nstest:t1','row1','f1' # 指定某个列簇下某个列的数据 # 例如:查询表t1,row1中的f1下的name的值 hbase(main)> get 'nstest:t1','row1', 'f1:name' hbase(main)> get 'nstest:t1','row1', {COLUMN=>'f1:name'} # 例如:查询表t1,row1中的f1下的name的值(最近的<=5个版本,实际返回版本数根据情况) # 如果HBase存储3个版本,则最多返回3个版本数据,如果当前实际只存储了2个版本,则会返回2个版本数据 hbase(main)> get 'nstest:t1', 'row1', {COLUMN=>'f1:name', VERSIONS => 5}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    scan

    全表扫描,类似“select * from”的方式,全表扫描。

    ################################# - 全表扫描 - #################################
    # 语法:scan 
    , {COLUMNS => [ ,.... ], LIMIT => num} # 另外,还可以添加STARTROW、TIMERANGE和FITLER等高级功能 hbase(main)> scan 'nstest:t1' # 例如:扫描表t1的前5条数据 hbase(main)> scan 'nstest:t1',{LIMIT => 5} # 例如:指定列查询(不限制行) hbase(main)> scan 'nstest:t1',{COLUMNS => 'f1:name'} # 例如:指定列簇查询(不限制行) hbase(main)> scan 'nstest:t1',{COLUMNS => 'f1'} # STARTROW表示开始的行号,LIMIT是限制显示的行数 hbase(main)> scan 'nstest:t1', {COLUMNS => ['f1', 'f2'], LIMIT => 10, STARTROW => 'row0'} # 查看最近的10个版本数据(包括已经删除的数据) hbase(main)> scan 'nstest:t1', {RAW => true, VERSIONS => 10} # 查看最近的10个版本数据 hbase(main)> scan 'nstest:t1', {VERSIONS => 10}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    count

    ################################# - 统计行数 - #################################
    # 查询表中的数据行数
    # 语法:count 
    , {INTERVAL => intervalNum, CACHE => cacheNum} # INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度 # 例如,查询表t1中的行数,每100条显示一次,缓存区为500 hbase(main)> count 'nstest:t1', {INTERVAL => 100, CACHE => 500}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. Table DCL

    ** grant**

    ################################# - 权限赋值 - #################################
    # 分配权限
    # 语法 : grant   
    参数后面用逗号分隔 # 权限用五个字母表示: "RWXCA". # READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A') # 例如,给用户‘bigdata'分配对表t1有读写的权限, hbase(main)> grant 'bigdata','RW','nstest:t1' # 查看权限 # 语法:user_permission
    # 例如,查看表t1的权限列表 hbase(main)> user_permission 'nstest:t1' hbase(main)> scan 'hbase:acl'
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    **revoke **

    ################################# - 权限收回 - #################################
    # 收回权限
    # 与分配权限类似,语法:revoke  
    # 例如,收回bigdata用户的所有权限 hbase(main)> revoke 'bigdata' # 例如,收回bigdata用户在表t1上的权限 hbase(main)> revoke 'bigdata','nstest:t1'
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. Region

    **move **

    # 移动region
    
    # 语法:move 'encodeRegionName', 'ServerName'
    
    # encodeRegionName指的regioName后面的编码,ServerName指的是master-status的Region Servers列表
    
    # 示例
    
    hbase(main)> move '4343995a58be8e5bbc739af1e91cd72d', 'ltsr003,60020,1390274516739'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    **balance_switch **

    # 开启/关闭自动balance
    
    # 语法:balance_switch true|false
    
    hbase(main)> balance_switch true
    
    hbase(main)> balance_switch false
    
    # 查看状态
    
    hbase(main)> balancer_enabled
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ** split **

    # 手动split
    
    # 语法:split 'regionName', 'splitKey'
    
    • 1
    • 2
    • 3

    **compact **

    
    # 手动合并(HFile多于3个时(>=3),等同于major_compact;<3时,compact不做合并)
    
    hbase(main)> compact 't1'
    
    # 手动触发major compaction(默认:7天,建议生产环境下配置手动执行,hbase.hregion.majorcompaction)
    
    # Compact all regions in a table(合并“t1”表的所有Region)
    
    hbase(main)> major_compact 't1'
    
    # Compact an entire region(合并名称为“r1”的Region)
    
    hbase(main)> major_compact 'r1'
    
    # Compact a single column family within a region(合并名称为“r1”的Region的“c1”列簇))
    
    hbase(main)> major_compact 'r1', 'c1'
    
    # Compact a single column family within a table(合并“t1”表的Region的“c1”列簇)
    
    hbase(main)> major_compact 't1', 'c1'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    LVGL可视化设计-Gui Guider
    ubuntu在PowerShell的vi编辑器蓝色注释看不见
    Day 84
    能ping通但无法上网的问题
    java Date
    django中导出csv文件
    HTML emoji整理 表情符号
    GPT-4V:AI在教育领域的应用
    Python小游戏自己动手编写,你能写出几个(分享版)
    小程序制作(超详解!!!)第十四节 计时器
  • 原文地址:https://blog.csdn.net/robinhunan/article/details/130910693