通过Lindorm Shell访问宽表引擎

Lindorm Shell是Lindorm提供的HBase客户端工具。Lindorm Shell基于HBase Java API连接Lindorm宽表引擎,进行创建表、插入、查询等数据操作。本文介绍如何下载Lindorm Shell并连接Lindorm宽表引擎。

前提条件

  • 已安装Java环境,要求安装JDK 1.8及以上版本。

  • 已将客户端IP地址添加至云原生多模数据库 Lindorm实例的白名单中,添加方法请参见设置白名单

注意事项

  • 通过Lindorm Shell连接Lindorm宽表引擎仅支持简单的DDL操作和数据读写操作,不支持的操作请参见HBase API使用限制

  • 请勿使用HBase API的方式去访问基于SQL创建的宽表,可能会出现乱码。

  • 推荐在Linux或者macOS操作系统使用Lindorm Shell。

    在Windows系统使用Lindorm Shell时,可能会遇到报错或缺少库的问题,请根据报错信息自行在系统中添加相应的库。

操作步骤

  1. 下载Lindorm Shell工具。

    1. Lindorm管理控制台左上角,选择实例所属的地域。在实例列表页,单击目标实例ID。

    2. 在左侧导航栏单击数据库连接,单击宽表引擎页签。

    3. 单击HBase兼容地址,然后单击Lindorm Shell下载

  2. 执行命令解压Lindorm Shell压缩包,将压缩包解压至目标文件(以alihbase-2.0.18文件为例)。

    tar zxvf hbaseue-shell.tar.gz
  3. 配置连接参数。

    1. 进入alihbase-2.0.18/conf目录,打开hbase-site.xml文件。

      vi hbase-site.xml
    2. 配置Lindorm宽表引擎的连接地址和用户名密码。

      <configuration>
          <property>
              <name>hbase.zookeeper.quorum</name>
              <value>ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30020</value>
          </property>
          <property>
              <name>hbase.client.username</name>
              <value>testuser</value>
          </property>
          <property>
              <name>hbase.client.password</name>
              <value>password</value>
          </property>
      </configuration>

      参数说明:

      • hbase.zookeeper.quorum:Lindorm宽表引擎的使用HBase Java API访问连接地址。

        • 专有网络地址:适用于Lindorm Shell安装在ECS实例上,且ECS实例与Lindorm实例位于同一VPC。

        • 公网地址:适用于Lindorm Shell安装在本地,或安装在ECS实例但ECS与Lindorm实例不在同一VPC。

      • hbase.client.usernamehbase.client.password:访问Lindorm宽表引擎的用户名和密码。如果忘记密码,可以通过宽表引擎的集群管理系统修改密码,具体操作请参见修改用户密码

  4. 通过Lindorm Shell访问Lindorm宽表引擎。

    进入alihbase-2.0.18/bin目录执行以下命令。

    ./hbase shell

    返回如下信息表示访问成功。

    Version 2.0.18, r08b8d58a9d6ce89765d5ebe2ddff425aed644c16, Mon Feb  1 12:46:39 CST 2021
    Took 0.0034 seconds
    说明

    Shell的使用方法,请参见Lindorm Shell参考

Lindorm Shell参考

命令参考

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

数据定义语言

  • create:创建表。

  • list:展示所有表。

  • disable:禁用表。

  • is_disabled:验证表是否被禁用。

  • enable:启用表。

  • is_enabled:验证表是否已启用。

  • describe:展示指定表的详细信息,包括表属性、表结构等。

  • alter:修改表。

  • exists:用于验证表是否存在。

  • drop:删除指定表。

数据操作语言

  • put:用于更新特定单元格中的值。

  • get:用于获取指定行或单元格的内容。

  • delete:用于删除表中单元格的值。

  • deleteall:用于删除指定行的所有单元格。

  • scan:用于扫描并返回表数据。

  • count:用于计算并返回表中的行数。

  • truncate_preserve:清空表中的数据,其内部实现是将指定的表下线和删除,再进行重建,并且Region分区与旧表保留一致。

进入和退出Shell环境

  • 进入Shell环境。

    bin/hbase shell
  • 退出Shell环境。

    quit

操作参考

建表并插入数据

  1. 创建表。创建时必须输入表和列族的名称。

    create '表名', '列族名'

    示例如下:

    //创建一个名称为test,列族名为cf的表
    create 'test', 'cf'
  2. 插入数据。

    put '表名', 'Rowkey', '列族名:列名', '数值'

    示例如下:

    put 'test', 'row1', 'cf:a', 'value1'
    put 'test', 'row2', 'cf:b', 'value2'
    put 'test', 'row3', 'cf:c', 'value3'
    说明

    row1为表test的Rowkey,cf:a表示自定义列的列族名和列名,value1为值。

查询

  • 查询所有表的信息。支持使用正则表达式来过滤表。

    list
    list 'abc.*'
    list 'test'
  • 查询指定表的数据。

    scan是一种访问HBase数据的方式,它非常的灵活,scan操作可以用来扫描全表或查询固定范围的数据。查询速度会比查询单条(使用get)数据略慢一些。执行以下语句可以查询test表的数据。

    scan '表名'

    示例如下:

    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 '表名', 'Rowkey' 

    示例如下:

    get 'test', 'row1' 

    返回结果:

    COLUMN CELL
     cf:a timestamp=1421762485768, value=value1
    1 row(s) in 0.0350 seconds

禁用和启用表

禁用和启用指定表。如果您想要对一张表执行删除、修改设置或其他操作,请先使用disable命令禁用这张表。在删除或者修改配置完成后,再使用enable命令启用表,重新使用这张表。

disable '表名'
enable '表名'

删除表

删除指定表。

drop '表名'

常用配置参考

常用配置

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

    以下示例设置Major Compaction周期为7天。

    alter '表名', {NAME => '列族名', CONFIGURATION => {'hbase.hregion.majorcompaction' => 16800000}}
    说明

    默认值:Math.Min(TTL,1728000000ms)。如果不设置TTL,该参数系统默认设置的是20天(20*24*60*60*1000ms=1728000000ms)。

  • 为指定表的列族设置数据压缩算法。

    alter '表名', NAME => '列族名', COMPRESSION => 'ZSTD'
  • 为指定表的列族设置Block Encoding类型。

    将test表列族的Block Encoding类型设置为DATA_BLOCK_ENCODING。

    alter '表名', NAME => '列族名', DATA_BLOCK_ENCODING => 'DIFF'
  • 为指定表的列族设置数据有效期TTL。TTL单位为秒(s),例如2592000s=30天。

    alter '表名', NAME => '列族名', TTL => 2592000

    如果想要取消数据有效期,即永久保留数据,可以将TTL的值设置为FOREVER,示例代码如下:

    alter '表名' , {NAME => '列族名', TTL => 'FOREVER'}
  • 为指定表设置预分区。

    create'表名',{NAME => '列族名',COMPRESSION => 'snappy' }, { NUMREGIONS => 50, SPLITALGO => 'HexStringSplit' }

    参数说明

    字段

    描述

    NAME

    HBase表的列族名称。

    COMPRESSION

    HBase表的数据压缩方式。无默认压缩算法。可选的压缩算法共以下三种:

    • ZSTD(推荐

    • SNAPPY

    • LZ4

    NUMREGIONS

    分片的个数。一般按照每个分片使用6~8 GB的存储量来计算分片数量。如果实例规模较大,分片数量可以按需设置多个。

    SPLITALGO

    初始化分区的算法。HBase表支持以下三种分割算法每个分割算法的适用场景如下描述:

    • HexStringSplit:适用于以十六进制的字符串作为前缀的Rowkey。

    • DecimalStringSplit:适用于以十进制的数字字符串作为前缀的Rowkey。

    • UniformSplit:适用于Rowkey的前缀是完全随机的。

修改配置后,您可以通过以下语句验证是否修改成功:

describe '表名'