HBase官网文档粗略解读

HBase官网文档粗略解读

HBase数据库是大数据中支持分布式、大规模、大表海量数据、列式存储、支持随机、实时读写的高性能数据库。

HBase官网文档对于HBase的介绍非常齐全,内容量非常庞大,读者可访问如下链接自行查看。

官网链接:http://hbase.apache.org/

官网文档链接:http://hbase.apache.org/book.html

官网提供的中文文档链接:http://abloz.com/hbase/book.html

按常理来说,中英文文档都有了,需要什么直接去找就行了。不过,本人怀着对官网英文文档的敬畏及HBase浓厚的好奇心,再加上官网提供的中文文档版本过于老旧。因此本人不自量力,尝试着分析,解读一下英文文档,既可提升对HBase的了解,同时也满足自己工作上需求。

本人在尝试读原版英文文档的时候,也收获了一些小惊喜,同时也加强了阅读原版英文文档的信心。国人编码能力的一个很大瓶颈,就是对于英文文档的阅读难度较大,增加学习难度,工作中遇到问题有时候也难免束手无策,渐渐地被周围环境同化,到头来,泯然众人矣。

下面我就以网页版文档来尝试解读。如下就是HBase官网原版文档。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WW9rS2RG-1625577673179)(assets/image-20210704124615518.png)]

简洁,明了,排版看起来也舒服。

接下来就从目录说起。左侧目录非常多。如下:

Preface --前言
Getting Started --开始
Apache HBase Configuration --HBase配置
Upgrading --升级
The Apache HBase Shell --HBase Shell
Data Model --数据模型
HBase and Schema Design --HBase和Schema设计
RegionServer Sizing Rules of Thumb --RegionServer分级的经验法则
HBase and MapReduce --HBase和MapReduce
Securing Apache HBase --HBase安全
Architecture --架构
In-memory Compaction --内存压缩
RegionServer Offheap Read/Write Path --RegionServer堆外读写路径
Backup and Restore --备份和恢复
Synchronous Replication --同步复制
Apache HBase APIs --HBase API
Apache HBase External APIs --HBase外部API
Thrift API and Filter Language --Thrift API和过滤语言
HBase and Spark --HBase和Spark
Apache HBase Coprocessors --HBase协处理器
Apache HBase Performance Tuning --HBase性能调优
Profiler Servlet --分析器Servlet
Troubleshooting and Debugging Apache HBase --HBase故障处理和调试
Apache HBase Case Studies --HBase案例研究
Apache HBase Operational Management --HBase运维管理
Building and Developing Apache HBase --构建及开发HBase
Unit Testing HBase Applications --HBase应用单元测试
Protobuf in HBase --HBase Protobuf
Procedure Framework(Pv2) --程序框架
AMv2 Description for Devs --AWv2对开发者的描述
ZooKeeper --Zookeeper框架
Community --社区
hbtop --HBase性能监控工具,类似于Linux top命令
Tracing --追踪
Appendix --附录

为了方便读者,给每个目录都配上大标题。读者可以根据标题查找。

Preface --前言

有一点,官网提到文档可以使用mvn site命令生成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-40Tzt4Ik-1625577673181)(assets/image-20210704140837597.png)]

Getting Started --开始

这个版块主要就是教初学者如何快速安装及使用HBase。

HBase有三种安装模式。分别是standalone,Pseudo-Distributed,Full-Distributed。

  • standalone模式,独立模式,单节点部署,所有进程都运行在HMaster里。解压后直接运行bin/start-hbase.sh命令启动即可,用来学习。HBase初学命令总结如下,使用shell进入后可使用。

    #1.list 列出所有HBase中的表,后可跟表名,用于验证表是否存在。
    list 'test'
    #2.create 创建表命令,创建表必须带ColumnFamily。
    create 'test', 'cf'
    #3.describe 查看表结构命令。查看test表的ColumnFamily信息,包括Bloom Filter,是否内存存储,是否数据库加密,是否压缩,块缓存,块大小等信息。
    describe 'test'
    #4.put 向表中插入数据命令,格式为:put '表名','行','列','值'
    put 'test', 'row1', 'cf:a', 'value1'
    #5.scan 一次性查看表的所有数据
    scan 'test
    #6.get 一次取一行数据
    get 'test','row1'
    #7.disable 禁用表命令
    disable 'test'
    #8.enable 启动表命令
    enable 'test'
    #9.drop 删除表命令
    drop 'test'
    #10.truncate 命令
    truncate ’test'
    #11.取消当前输入行
    qui
    #12.quit 退出shell
    quit
    

以上都是shell的简单入门使用命令。如果需要给表加上压缩,数据块加密,表重命名等等这种高阶操作,该怎么办呢?如下:

#1.重命名表 请查看1.25章,HBase的运维与管理
#2.数据表压缩与数据块加密  请查看1.35章 Appendix --附录
#3.表重命名、数据导入导出等 请查看1.25章 HBase运维管理
#4.更多操作,请在shell命令行下输入help查看
  • Pseudo-Distributed模式,伪分布式模式。单节点部署,但进程之间分开(HMaster, HRegionServer, and ZooKeeper),需要做一些配置,仅仅用来学习和本地测试。

    hbase-site.xml添加如下配置(官网提供)

    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
    </property>
    <property>
      <name>hbase.rootdir</name>
      <value>hdfs://localhost:8020/hbase</value>
    </property>
    

    而我虚拟机上没有安装Hadoop,所以我的hbase.rootdir配置的是我本地路径。

    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
    </property>
    <property>
      <name>hbase.rootdir</name>
      <value>file:///root/hbase</value>
    </property>
    

    同时,我本地的conf/hbase-env.sh文件中,我放开了HBASE_MANAGES_ZK变量。

    export JAVA_HOME=/opt/jdk1.8
    # Tell HBase whether it should manage it's own instance of Zookeeper or not.
    # 告诉HBase,使用内置的zookeeper。
    export HBASE_MANAGES_ZK=true
    

    到此,则配置结束。执行bin/start-hbase.sh,会提示需要允许连接本地和root用户密码,,依据提示,输入 yes表示允许连接,再输入root用户的密码,则Pseudo-Distributed模式启动成功。

    使用jps命令查看,可以看到如下几个进程:

    4438 HQuorumPeer
    4505 HMaster
    4605 HRegionServer
    
  • Full-Distributed模式,全分布式模式,用于生产环境。

目前本人是需要本地调试服务器上的数据乱码和图计算及图数据库功能,伪分布式就够用了。后续时间充裕了再来补充这一块。

以上三种模式都在文档中给了配置说明。

Apache HBase Configuration --HBase配置

这一块说的是HBase的配置,这部分在HBase运行前非常重要,不同的运行模式,配置就不相同。

image-20210704150852075

这里说一下第5点:HBase的运行模式。

Run modeStandalonePseudo-DistributedFull-Distributed
LocalFileSystemDEFAULT可配置不支持
HDFS可配置可配置ONLY

核心配置如下

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://namenode.example.org:8020/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>false</value>
  </property>
</configuration>

如hbase.cluster.distributed=false,表示伪分布式。

hbase.cluster.distributed=true,就是分布式。

hbase.rootdir的值根据运行模式配置:

如果是分布式,则必须是HDFS路径,

如果是伪分布式或者独立模式,则可是HDFS路径或本地路径。

其他几个模块就没有详细去解读,读者有兴趣或工作中需要时,可以自行去查看。

Upgrading --升级

HBase的升级需要注意:

如果是0.98版本,先要升级到2.X版本,必须先升级到1.2版本,再从1.2版本升级到2.X。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BVs4Rtw-1625577673183)(assets/image-20210704152616862.png)]

其次,如果从HBase1.X版本升级到HBase2.X版本。最低环境要求是:Java8与Hadoop2.6。

且HBCK与HBCK2也应与HBase版本相对应。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cgKLulOe-1625577673186)(assets/image-20210704153713695.png)]

因目前集群不涉及升级,如果涉及升级,如果读者需要进行HBase升级,则可去官网详细研读。

The Apache HBase Shell --HBase Shell

HBase Shell这块内容,详细介绍了shell的一些其他特性。

image-20210704153842997

这里用几个案例说明。

  • 案例一:HBase Shell读取Command File,sample_commands.txt内容如下
create 'test', 'cf'
list 'test'
put 'test', 'row1', 'cf:a', 'value1'
put 'test', 'row2', 'cf:b', 'value2'
put 'test', 'row3', 'cf:c', 'value3'
put 'test', 'row4', 'cf:d', 'value4'
scan 'test'
get 'test', 'row1'
disable 'test'
enable 'test'

命令写好后,可使用如下命令执行

hbase shell ./sample_commands.txt
  • 案例二:count命令。返回的是表的数据行数。它的效率非常高。
#默认情况
count 'tableName' 
#也可执行CACHE
count 'tableName',CACHE=1000

案例三:运行ruby脚本

#格式如下
./bin/hbase org.jruby.Main PATH_TO_SCRIPT
#自测案例
bin/hbase org.jruby.Main bin/get-active-master.rb
#结果
hadoop101
#因我是运行的伪分布式版,一个节点。

案例四:非交互式模式

#在shell后加 -n 或者 --non-interactive
#如:bin/hbase shell -n ,但不要直接拿这个去执行,不会返回任何结果。需要带上你的操作。如下:
echo "describe 'test'" | bin/hbase shell -n

案例五:校验脚本命令的返回值

#!/bin/bash
echo "describe 'test'" | bin/hbase shell -n > /dev/null 2>&1
status=$?
echo "The status was " $status
if ($status == 0); then
    echo "The command succeeded"
else
    echo "The command may have failed."
fi
return $status

还有其他案例,官网都有说明。这里就不再演示了。

Data Model --数据模型

这一块是HBase的基石。首先看官网的一段说明。

In HBase, data is stored in tables, which have rows and columns. This is a terminology overlap with relational databases (RDBMSs), but this is not a helpful analogy. Instead, it can be helpful to think of an HBase table as a multi-dimensional map.

大致包括如下的内容。

image-20210704162950871

官网建议我们把HBase当做表当做a muitl-dimensional map。也就是多维映射。那它有哪些术语呢?如下。

#1.Table
它是由多个Row组成。
#2.Row
一个row由rowKey和1到多个column组成。row默认是按照字典序排列。所以,rowKey的设计非常重要。目标就是为了相关的数据存储在一起。比如说域名排序。如果你的rowKey是域名,则需要反转(org.apache.www, org.apache.mail, org.apache.jira),通过这种方式他们就能存储在一起,避免由于域名首字母不同而分开。
#3.Column
Column由column family和column qualifier组成。family与qualifier之间用冒号隔开。
#4.Column Family
Column Family出于性能原因,物理上对一组column和value进行分配。每个Column Family都有很多存储特性,比如值是否存在内存,数据是否压缩,rowKey是否加密等等。表里每个row在都有相同的Column Family,即使一行没有存储任何值。
#5.Column Qualifier
Column Qualifier是添加到列族用来给数据提供索引的。
#6.Cell
Cell是联合了Row,Column Family,Column Qualifier,包含了value和timestamp,它表示值的版本。
#7.Timestamp
它是与每个值一起写入的。是value的版本标识。默认情况下是数据在RegionServer节点写入时的时间。但也可以自己指定一个不同的值。

有了这么多术语,又有哪些操作呢?

主要是四种:Get, Put, Scan, and Delete.

HBase and Schema Design --HBase和Schema设计

这块暂时不涉及。省略。

RegionServer Sizing Rules of Thumb --RegionServer分级的经验法则

这块官网内容比较多。如下。

image-20210704163206142

这里选择2块做解读。

  • RowKey Design。rowKey的设计原则。首先看官网的原话:

However, poorly designed row keys are a common source of hotspotting. Hotspotting occurs when a large amount of client traffic is directed at one node, or only a few nodes, of a cluster.This traffic may represent reads, writes, or other operations.

这里说的就是HBase的热点问题。rowKey设计的好,可以避免热点问题,设计的不好,导致大量的读,写都集中在一台或少量的节点上,就会引发热点问题。同时,官网也给了热点问题的解决方法:

1.Salting
就是给rowKey前加个前缀,防止按照字典序排列。在写的时候能够增加吞吐量,但读的时候花费时间。
2.Hashing
哈希处理rowKey。
3.Reversing the Key
反转rowKey。
  • Supported Datatypes。支持的数据类型。

官网给了说明,HBase支持字节输入/输出,因此,任何可以转化为字节数组的值都可以存储到HBase。比如String,Number,complex Object,even Images。

当然,值的大小有限制,存储10-50MB的对象就有点过分了。

HBase and MapReduce --HBase和MapReduce

这一章节说的是MapReduce程序与HBase结合。现在MapReduce基本上不用,因此这里忽略。如果是老项目需要维护,可以到官网这部分来查。

Securing Apache HBase --HBase安全

这个章节说的是HBase的认证和授权问题。尤其是Kerberos认证。Kerberos认证在其他文档,这里就不详细说了。

如果需要查看目前HBase的认证,在shell里输入 whoami

image-20210704170746956

表示使用的是simple认证,Linux的root组。

Architecture --架构

image-20210704171853384

这章节说的是HBase的架构。

这里提一下RegionServer,数据块可以存储在堆外内存,可以对数据块进行压缩,加密,记录了WAL的操作。

WAL默认是一个RegionServer带一个WAL。有三个取值:asyncfs,2.0开始默认是 This AsyncFSWAL provider,filesystem,1.X默认是它,multiwal,意思是多节点,无论是asyncfs还是filesystem,都可以配置成多节点。

有时候HDFS需要配置成multiwal。

<property>
  <name>hbase.wal.provider</name>
  <value>multiwal</value>
</property>

HBase写数据是三大步骤。WAL(数据默认写入到WAL,不建议关闭) -> Flushing(内存到磁盘) -> Spliting(当文件到10G后进行一分为二操作)。

当然,Region官网也说的很多。

这里再提一下BulkLoading。它是HBase高效加载数据的一种方式。它的特性是直接使用一个MapReduce任务把数据直接导入HBase的内部数据格式文件(StoreFiles),可直接加载运行。它处理任务分为2步:

1.通过MapReduce任务准备数据,也就是生成StoreFiles文件。

2.完成数据加载。可通过importtsv工具或者completebulkload工具。

In-memory Compaction --内存压缩

内存压缩是2.0.0才有的新特性。

需要设置IN_MEMORY_COMPACTION=BASIC,默认是NONE,表示不压缩。

RegionServer Offheap Read/Write Path --RegionServer堆外读写路径

HBase2.X版本才有,具体省略,目前项目中不涉及。

Backup and Restore --备份和恢复

目前不涉及,省略。

Synchronous Replication --同步复制

目前不涉及,省略。

Apache HBase APIs --HBase API

官网所有代码如下

package com.example.hbase.admin;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;

public class Example {

  private static final String TABLE_NAME = "MY_TABLE_NAME_TOO";
  private static final String CF_DEFAULT = "DEFAULT_COLUMN_FAMILY";

  public static void createOrOverwrite(Admin admin, HTableDescriptor table) throws IOException {
    if (admin.tableExists(table.getTableName())) {
      admin.disableTable(table.getTableName());
      admin.deleteTable(table.getTableName());
    }
    admin.createTable(table);
  }

  public static void createSchemaTables(Configuration config) throws IOException {
    try (Connection connection = ConnectionFactory.createConnection(config);
         Admin admin = connection.getAdmin()) {

      HTableDescriptor table = new HTableDescriptor(TableName.valueOf(TABLE_NAME));
      table.addFamily(new HColumnDescriptor(CF_DEFAULT).setCompressionType(Algorithm.NONE));

      System.out.print("Creating table. ");
      createOrOverwrite(admin, table);
      System.out.println(" Done.");
    }
  }

  public static void modifySchema (Configuration config) throws IOException {
    try (Connection connection = ConnectionFactory.createConnection(config);
         Admin admin = connection.getAdmin()) {

      TableName tableName = TableName.valueOf(TABLE_NAME);
      if (!admin.tableExists(tableName)) {
        System.out.println("Table does not exist.");
        System.exit(-1);
      }

      HTableDescriptor table = admin.getTableDescriptor(tableName);

      // Update existing table
      HColumnDescriptor newColumn = new HColumnDescriptor("NEWCF");
      newColumn.setCompactionCompressionType(Algorithm.GZ);
      newColumn.setMaxVersions(HConstants.ALL_VERSIONS);
      admin.addColumn(tableName, newColumn);

      // Update existing column family
      HColumnDescriptor existingColumn = new HColumnDescriptor(CF_DEFAULT);
      existingColumn.setCompactionCompressionType(Algorithm.GZ);
      existingColumn.setMaxVersions(HConstants.ALL_VERSIONS);
      table.modifyFamily(existingColumn);
      admin.modifyTable(tableName, table);

      // Disable an existing table
      admin.disableTable(tableName);

      // Delete an existing column family
      admin.deleteColumn(tableName, CF_DEFAULT.getBytes("UTF-8"));

      // Delete a table (Need to be disabled first)
      admin.deleteTable(tableName);
    }
  }

  public static void main(String... args) throws IOException {
    Configuration config = HBaseConfiguration.create();

    //Add any necessary configuration files (hbase-site.xml, core-site.xml)
    config.addResource(new Path(System.getenv("HBASE_CONF_DIR"), "hbase-site.xml"));
    config.addResource(new Path(System.getenv("HADOOP_CONF_DIR"), "core-site.xml"));
    createSchemaTables(config);
    modifySchema(config);
  }
}

Apache HBase External APIs --HBase外部API

这里介绍了C,C++,Scala等其他语言访问HBase,目前不涉及,省略。

Thrift API and Filter Language --Thrift API和过滤语言

这里提到了PHP访问HBase,目前不涉及,省略。

HBase and Spark --HBase和Spark

这里是Spark访问HBase的操作,省略。

Apache HBase Coprocessors --HBase协处理器

  • 协处理器是在海量数据的情况下才有意义。

什么是海量数据?官网说的是:billions of rows and millions of columns。数十亿行和数百万列。 在这种情况下去Get或者Scan时,使用协处理器才有意义。

协处理器类比成Trigger,Stored Procedure,MapReduce。

Observer协处理器好比Trigger,endpoint协处理器好比Stored Procedure。MapReduce是移动计算,而不是移动存储,协处理器也是如此。

  • 协处理器有2种类型:

Observer和Endpoint。

  • HBase可以静态加载和动态加载。

静态加载是把jar包放入lib下,需要重启HBase。

动态加载是把jar包放入HDFS路径下,通过hbase shell命令加载,不需要重启。

  • 协处理器的jar包怎么来

通过Java调用API来实现。

TableName tableName = TableName.valueOf("users");
String path = "hdfs://<namenode>:<port>/user/<hadoop-user>/coprocessor.jar";
Configuration conf = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
HColumnDescriptor columnFamily1 = new HColumnDescriptor("personalDet");
columnFamily1.setMaxVersions(3);
hTableDescriptor.addFamily(columnFamily1);
HColumnDescriptor columnFamily2 = new HColumnDescriptor("salaryDet");
columnFamily2.setMaxVersions(3);
hTableDescriptor.addFamily(columnFamily2);
hTableDescriptor.setValue("COPROCESSOR$1", path + "|"
+ RegionObserverExample.class.getCanonicalName() + "|"
+ Coprocessor.PRIORITY_USER);
admin.modifyTable(tableName, hTableDescriptor);

Apache HBase Performance Tuning --HBase性能调优

性能调优这一章内容也很多。如下图。

image-20210704183306367

看目录也能知道,无非就是一些操作系统,网络等硬件层面的调优,其次就是配置层面的调优。这里提一下123点里的Bloom Filter,其他因目前工作不涉及,暂时放着,后续用到再来补。

  • Bloom Filter

下面来看看官网对Bloom Filter的描述:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pK7VytFD-1625577673187)(assets/image-20210705102120323.png)]

1.Bloom Filter,又称布隆过滤器,是用它的创建者Burton Howard Bloom命名。是一种用来预测数据是否在数据集中的一种数据结构。它的正面评价是并不总是准确,它的负面评价是保证是准确的。它是被设计成足够准确。

2.Bloom过滤器被设计成“足够精确”的数据集,这些数据集是如此之大,以至于传统的散列机制无法实现。

3.对于HBase来说,在HBase中,Bloom过滤器提供了一个轻量级的内存结构,以减少给定Get操作的磁盘读取次数(Bloom过滤器不适用于Scans),只对可能包含所需行的StoreFiles进行读取。潜在的性能增益随着并行读取的数量而增加。

4.Bloom过滤器本身存储在每个HFile的元数据中,从不需要更新。当由于region部署到RegionServer而打开HFile文件时,Bloom过滤器被加载到内存中。

5.HBase包含了一些用于折叠Bloom过滤器的调优机制,以减少大小,并将错误率保持在期望的范围内。

6.HBase在0.96版本中引入Bloom Filter,有row-based和row+column 模式,且默认是row-based。也可以禁用,但最好不要。

7.在HBase中,可以使用HColumnDescriptor.setBloomFilterType()方法来设置布隆过滤器。

也可以在shell中使用NONEROWCOLROW来指定。

hbase> create ‘mytable’,{NAME => ‘colfam1’, BLOOMFILTER => ‘ROWCOL’}

Profiler Servlet --分析器Servlet

暂时不涉及,省略。

Troubleshooting and Debugging Apache HBase --HBase故障处理和调试

这一块内容也挺多,如下。

image-20210704190517592

主要用于在使用HBase的过程中,如有遇到这里提到的问题,可以在这里找到答案。

这里有个小收获,140点的工具。

这里提到了tail,top,jps,jstack。这里要说一下top工具。

top - 14:46:59 up 39 days, 11:55,  1 user,  load average: 3.75, 3.57, 3.84
Tasks: 309 total,   1 running, 308 sleeping,   0 stopped,   0 zombie
Cpu(s):  4.5%us,  1.6%sy,  0.0%ni, 91.7%id,  1.4%wa,  0.1%hi,  0.6%si,  0.0%st
Mem:  24414432k total, 24296956k used,   117476k free,     7196k buffers
Swap: 16008732k total,        14348k used, 15994384k free, 11106908k cached

  PID USER          PR  NI  VIRT  RES  SHR S %CPU %MEM        TIME+  COMMAND
15558 hadoop        18  -2 3292m 2.4g 3556 S   79 10.4   6523:52 java
13268 hadoop        18  -2 8967m 8.2g 4104 S   21 35.1   5170:30 java
 8895 hadoop        18  -2 1581m 497m 3420 S   11  2.1   4002:32 java
…

从以上内容看到,系统的load average这一栏有三个数,分别是3.75,3.57,3.84分别表示最近5,10,15分钟内有3.75,3.57,3.84个线程在等待CPU时间。

Apache HBase Case Studies --HBase案例研究

暂时不涉及,省略。

Apache HBase Operational Management --HBase运维管理

目前碰到的一个问题:关系分析时,使用图数据库存储关系数据,HBase数据乱码。

正想在本地搭建HBase环境,把乱码数据导出来,并且导入到本地HBase中去,方便调试。

HBase的工具和应用程序非常多。可通过如下命令来查看:

bin/hbase

这里大概列举一下:

Canary --
RegionSplitter --region切分
Health Checker --健康检查
Driver  --提供导入导出表的操作。
HBase hbck --HBCK
HBase HBCK2 --HBCK2
HFile Tool --HFile 工具
WAL Tools --WAL工具
Compression Tool --可能和数据乱码有关。
CopyTable --表拷贝
HashTable/SyncTable --哈希表/同步表
Export
  --bin/hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir> 
Import
  --bin/hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>
ImportTsv --导入tsv格式数据
CompleteBulkLoad --结合ImportTSV工具一起使用,把StoreFiles变为HBase的表
WALPlayer --WAL回放
RowCounter --统计表的所有行工具
CellCounter统计表包括行在内的其他更多信息
mlockall --
Offline Compaction Tool --离线压缩工具
hbase clean --清理Zookeeper或者HDFS中的HBase数据
hbase pe --性能计算工具,用于测试
hbase ltt --加载测试工具的工具,也用于测试
Pre-Upgrade validator --升级前验证工具
Data Block Encoding Tool --数据块加密工具

这里提到了加密工具。目前图计算中碰到HBase数据读取乱码的问题,可能和这个相关。接下来做个测试:

1.数据加密
2.导出数据

其次还有Slow Query Log,默认不开启,需要配置。

hbase.regionserver.slowlog.buffer.enabled=true(默认为false,该为true)
hbase.regionserver.slowlog.ringbuffer.size=256(默认值)
#三个方法都是和慢查询相关。
get_slowlog_responses
get_largelog_responses
clear_slowlog_responses
echo "get_slowlog_responses '*'" | hbase shell > xyz.out 2>&1

最后再介绍一种,表重命名的方式。

hbase shell> disable 'tableName'
hbase shell> snapshot 'tableName', 'tableSnapshot'
hbase shell> clone_snapshot 'tableSnapshot', 'newTableName'
hbase shell> delete_snapshot 'tableSnapshot'
hbase shell> drop 'tableName'

还有其他各种性能。在此就不一一介绍了。

Building and Developing Apache HBase --构建及开发HBase

这章是介绍HBase的编译及发布HBase源码、文档的。暂时不涉及,省略。

Unit Testing HBase Applications --HBase应用单元测试

暂时不涉及,省略。

Protobuf in HBase --HBase Protobuf

Protobuf是Google Protocol Buffers,属于底层协议,以后碰上再来补。

Procedure Framework(Pv2) --程序框架

暂时不涉及,省略。

AMv2 Description for Devs --AWv2对开发者的描述

暂时不涉及,省略。

ZooKeeper --Zookeeper框架

HBase里内置了Zookeeper,同时,一般机器上也会安装Zookeeper。这里就有个问题:

HBase到底用的是哪个Zookeeper?

可以通过jps命令来查看。

HQuorumPeerQuorumPeer。前一个带H表示是HBase内置的,后一个不带H,表示额外安装的。

Community --社区

暂时不涉及,省略。

hbtop --HBase性能监控工具

hbtop命令是HBase的实时监控工具,类似于Linux top命令。

> hbase hbtop

遗憾的是,在本机上没有试验出来。本机HBase版本为1.2,hbtop工具是1.3版本才出来的。

且需要分布式环境才能使用。standalone模式也不行。2.3版本试过了。

Tracing --追踪

暂时不涉及,省略。

Appendix --附录

附录非常多,如下:

image-20210704211600128

可以看到,D区就是关于压缩和加密的说明。这里也记录一下。

HBase支持多种不同类型的压缩算法,可以在一个ColumnFamily上启动。

  • HBase启动压缩与数据块加密

    #块压缩
    none --不压缩
    Snappy --Google开发,非Google组件可能没有,因此需要提前安装。
    LZO --HBase低版本可能由于协议不同,会出现不能用的情况。
    LZ4 --Hadoop Native库就有了。
    GZ --Java就有了。
    #数据块加密
    Prefix --前缀加密。默认加一列,表示前缀。
    Diff --扩展了Prefix加密,默认禁用。
    Fast Diff --类似于Diff,尤其是key很长,column很多的情况,推荐使用。
    Prefix Tree --在HBase2.0.0版本中被废除了。
    
  • 压缩加密如何选择

    image-20210704213857358
    #如上内容大致总结如下:
    1.如果key很长,使用FAST_DIFF压缩。
    2.如果value很大,比如图片,使用数据块压缩。
    3.如果数据经常访问,使用LZO; 如果不被经常访问,使用GZip。
    4.大部分情况下默认都采用LZO或者Snappy压缩。他们性能性能开销低,节省空间。
    5.2011年之前,Snappy还不可用,LZO是默认的压缩方式。但Snappy流行起来后,比LZO性能更好。
    
  • 使用Hadoop Native库

    省略。

  • 压缩配置、安装、使用

    省略。

  • 数据块加密

    使用hbase命令来操作,省略。

同类型的压缩算法,可以在一个ColumnFamily上启动。

  • HBase启动压缩与数据块加密

    #块压缩
    none --不压缩
    Snappy --Google开发,非Google组件可能没有,因此需要提前安装。
    LZO --HBase低版本可能由于协议不同,会出现不能用的情况。
    LZ4 --Hadoop Native库就有了。
    GZ --Java就有了。
    #数据块加密
    Prefix --前缀加密。默认加一列,表示前缀。
    Diff --扩展了Prefix加密,默认禁用。
    Fast Diff --类似于Diff,尤其是key很长,column很多的情况,推荐使用。
    Prefix Tree --在HBase2.0.0版本中被废除了。
    
  • 压缩加密如何选择

    image-20210704213857358
    #如上内容大致总结如下:
    1.如果key很长,使用FAST_DIFF压缩。
    2.如果value很大,比如图片,使用数据块压缩。
    3.如果数据经常访问,使用LZO; 如果不被经常访问,使用GZip。
    4.大部分情况下默认都采用LZO或者Snappy压缩。他们性能性能开销低,节省空间。
    5.2011年之前,Snappy还不可用,LZO是默认的压缩方式。但Snappy流行起来后,比LZO性能更好。
    
  • 使用Hadoop Native库

    省略。

  • 压缩配置、安装、使用

    省略。

  • 数据块加密

    使用hbase命令来操作,省略。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值