HBase 是一个基于 Hadoop 的 NoSQL 数据库,提供了分布式存储和处理大规模数据的能力。它适用于需要快速、高可扩展性的实时数据访问和分析。

以下是学习 HBase 的基本用法,包括表结构、数据查询教程:

表结构

hbase 查看表是否disable 命令 hbase 查看表数据_数据

 

HBase 中数据存储在表中,表可以看作是一个多维映射,每行数据都由行键和多个列组成。表中的行是按行键排序的,并且可以根据行键快速访问行数据。

HBase 表由以下组件组成:

  • 表名:唯一标识表的名称。
  • 列族:逻辑上相关联的一组列的集合,通常由相同前缀标识,例如 info:usernameinfo:age 属于同一个列族 info
  • 列:组成数据的基本单元,由列族前缀和列限定符组成,例如 info:username 中的 username 是列限定符。
  • 行:按照行键进行排序的数据记录,每行可以包含一个或多个列族和列的值。
  • 单元格:由行、列族和列限定符组成的数据单元。

HBase 表的结构是在创建表时定义的,表的列族和列限定符必须在创建表之前预定义。表的列族和列限定符一旦定义,就不能再更改。

以下是 HBase 表的创建示例:

$ hbase shell
hbase(main):001:0> create 'user', 'info', 'address'

以上命令创建了一个名为 user 的表,包含两个列族 infoaddress

数据查询

HBase 表的数据查询可以使用 HBase Shell 或 HBase Java API 进行。

使用 HBase Shell 进行数据查询

HBase Shell 提供了一种简单的方式来查询和操作 HBase 表。以下是 HBase Shell 中常用的数据查询命令:

  • scan:扫描表中的所有数据。
  • get:获取指定行的数据。
  • put:插入或更新数据。
  • delete:删除指定行的数据。

以下是使用 HBase Shell 进行数据查询的示例:



shellCopy code

$ hbase shell hbase(main):001:0> scan 'user'

以上命令扫描表 user 中的所有数据。



shellCopy code

hbase(main):002:0> get 'user', 'row1'

以上命令获取表 user 中行键为 row1 的数据。

hbase 查看表是否disable 命令 hbase 查看表数据_数据_02

shellCopy code

hbase(main):003:0> put 'user', 'row1', 'info:username', 'alice'

以上命令向表 user 中的行 row1 的列族 info 中的列 username 插入或更新数据。



shellCopy code

hbase(main):004:0> delete 'user', 'row1', 'info:username'

HBase的数据查询:

HBase使用了一种基于行的存储模型,每个表都由行和列族组成。行键(row key)是表中的唯一标识符,列族(column family)定义了表中的列集合。HBase的查询方式主要包括单行查询、扫描查询和过滤查询。

  1. 单行查询

单行查询就是根据行键查找一行数据,可以使用 Get 操作来实现。例如:

Configuration config = HBaseConfiguration.create();
HTable table = new HTable(config, "table_name");

Get get = new Get(Bytes.toBytes("row_key"));
Result result = table.get(get);

for (Cell cell : result.listCells()) {
    String family = Bytes.toString(CellUtil.cloneFamily(cell));
    String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell));
    String value = Bytes.toString(CellUtil.cloneValue(cell));
    System.out.printf("%s:%s = %s\n", family, qualifier, value);
}

上述代码中,首先创建了一个 Configuration 对象和一个 HTable 对象,然后使用 Get 操作根据行键查询到一行数据,接着遍历 Result 对象中的 Cell 对象,通过 CellUtil 类将字节数组转换成字符串输出。

  1. 扫描查询

hbase 查看表是否disable 命令 hbase 查看表数据_数据查询_03

扫描查询可以获取表中的多行数据,可以使用 Scan 操作来实现。例如

Configuration config = HBaseConfiguration.create();
HTable table = new HTable(config, "table_name");

Scan scan = new Scan(Bytes.toBytes("start_row_key"), Bytes.toBytes("end_row_key"));
ResultScanner scanner = table.getScanner(scan);

for (Result result : scanner) {
    for (Cell cell : result.listCells()) {
        String rowKey = Bytes.toString(result.getRow());
        String family = Bytes.toString(CellUtil.cloneFamily(cell));
        String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell));
        String value = Bytes.toString(CellUtil.cloneValue(cell));
        System.out.printf("%s:%s:%s = %s\n", rowKey, family, qualifier, value);
    }
}

scanner.close();

上述代码中,首先创建了一个 Configuration 对象和一个 HTable 对象,然后使用 Scan 操作查询了从起始行键到结束行键之间的所有行数据,接着遍历 ResultScanner 对象中的 Result 对象和 Cell 对象,分别输出行键、列族、列限定符和值。

  1. 过滤查询

过滤查询可以根据条件对表中的数据进行筛选,可以使用 Filter 操作来实现。例如:

Configuration config = HBaseConfiguration.create();
HTable table = new HTable(config, "table_name");

Filter filter = new SingleColumnValueFilter(Bytes.toBytes("column_family"), Bytes.toBytes("column_qualifier"), CompareOp.EQUAL, Bytes.toBytes("value"));
Scan scan = new Scan().setFilter(filter);
ResultScanner scanner = table.getScanner(scan);

for (Result result : scanner) {
    for (Cell cell : result.listCells()) {
        String rowKey = Bytes.toString(result.getRow());
        String family = Bytes.toString(CellUtil.cloneFamily(cell));
        String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell));

HBase 表结构和数据查询教程:

HBase 中的数据存储在表中,表可以看作是一个由行和列组成的二维数组。表中的每一行都有一个唯一的行键,而列可以有多个列族,每个列族中可以有多个列限定符。每个列限定符都包含一个时间戳和一个值。

HBase 表的创建可以通过 HBase Shell 或 Java API 进行操作。下面是通过 HBase Shell 创建表的示例:

create 'test', 'cf'

这个命令创建了一个名为 "test" 的表,该表只包含一个列族 "cf"。要向表中插入数据,可以使用 put 命令。例如:



shellCopy code

put 'test', 'row1', 'cf:a', 'value1'

这个命令将值 "value1" 插入了 "test" 表的 "cf:a" 列。

要从表中获取数据,可以使用 get 命令。例如:



shellCopy code

get 'test', 'row1'

这个命令获取了 "test" 表中行键为 "row1" 的整行数据。如果要获取特定的列限定符中的值,可以使用以下命令:



shellCopy code

get 'test', 'row1', 'cf:a'

这个命令获取了 "test" 表中行键为 "row1"、列族为 "cf"、列限定符为 "a" 的值。

HBase 还提供了许多其他命令和操作,例如删除数据、删除表等。可以通过 HBase Shell 文档或官方文档详细了解这些命令和操作。

在使用 HBase 时,需要注意以下几点:

  • HBase 表是按行存储的,因此在设计表时应尽量避免表扫描操作,应优先考虑基于行键的查询。
  • HBase 可以自动分片,可以通过调整 Region 的大小来优化读写性能。
  • HBase 的数据存储是稀疏的,因此对于某些列没有值的情况,不需要存储任何数据,这样可以节省空间和资源。

总之,掌握 HBase 的基本用法是理解 Hadoop 生态系统的重要组成部分。熟练使用 HBase 可以帮助用户高效地存储和查询大量的数据。