更新时间:2024-11-29 GMT+08:00

配置HBase数据压缩和编码

操作场景

HBase可以通过对HFile中的data block编码,减少keyvalue中key的重复部分,从而减少空间的使用。目前对data block的编码方式有:NONE、PREFIX、DIFF、FAST_DIFF和ROW_INDEX_V1,其中NONE表示不使用编码。另外,HBase还支持使用压缩算法对HFile文件进行压缩,默认支持的压缩算法有:NONE、GZ、SNAPPY和ZSTD,其中NONE表示HFile不压缩。

这两种方式都是作用在HBase的列簇上,可以同时使用,也可以单独使用。

前提条件

  • 已安装HBase客户端。例如,客户端安装目录为“/opt/client”。
  • 如果HBase已经开启了鉴权,操作的用户还需要具备对应的操作权限。即创建表时需要具备对应的namespace或更高级别的创建(C)或者管理(A)权限,修改表时需要具备已创建的表或者更高级别的创建(C)或者管理(A)权限。具体的授权操作请参考创建HBase角色章节。

操作步骤

创建时设置data block encoding和压缩算法。

  1. 以客户端安装用户,登录安装客户端的节点。
  2. 执行以下命令切换到客户端目录。

    cd /opt/client

  3. 执行以下命令配置环境变量。

    source bigdata_env

  4. 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户。如果当前集群未启用Kerberos认证,则无需执行此命令。

    kinit 组件业务用户

    例如,kinit hbaseuser

  5. 直接执行HBase组件的客户端命令。

    hbase shell

  6. 创建表。
    create 't1', {NAME => 'f1', COMPRESSION => 'SNAPPY', DATA_BLOCK_ENCODING => 'FAST_DIFF'}
    • t1:表名。
    • f1:列簇名。
    • SNAPPY:该列簇使用的压缩算法为SNAPPY。
    • FAST_DIFF:使用的编码方式为FAST_DIFF。
    • {}内的参数为指定列簇的参数,多个列簇可以用多个{},然后用逗号隔开。关于建表语句的更多使用说明可以在hbase shell中执行help 'create' 进行查看。

对已存在的表设置或修改data block encoding和压缩算法

  1. 以客户端安装用户,登录安装客户端的节点。
  2. 执行以下命令切换到客户端目录。

    cd /opt/client

  3. 执行以下命令配置环境变量。

    source bigdata_env

  4. 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户。如果当前集群未启用Kerberos认证,则无需执行此命令。

    kinit 组件业务用户

    例如,kinit hbaseuser

  5. 直接执行HBase组件的客户端命令。

    hbase shell

  6. 执行修改表的命令。

    alter 't1', {NAME => 'f1', COMPRESSION => 'SNAPPY', DATA_BLOCK_ENCODING => 'FAST_DIFF'}