【自学笔记】Hbase基础知识点总览-持续更新

发布于:2025-03-27 ⋅ 阅读:(34) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


HBase基础知识点总览

1. HBase简介

  • 定义:HBase是一个分布式、可扩展的大数据存储系统,基于Google的Bigtable模型构建,并使用Hadoop的HDFS作为其底层存储。
  • 主要特点
    • 高可靠性:数据底层存储在HDFS上,保证数据的高可靠性。
    • 高性能:基于列存储,适合处理大量数据读写。
    • 可扩展性:能够水平扩展,支持PB级别的数据存储。

2. HBase架构

  • Master节点:负责处理元数据(如表和列族的信息)的管理。
  • RegionServer节点:负责处理数据的读写请求,存储和管理实际的表数据。
  • Zookeeper:负责HBase集群的状态管理和协调。

3. 数据模型

  • 表(Table):存储数据的逻辑单元,类似于关系数据库中的表。
  • 行(Row):表中的一行数据,由行键(Row Key)唯一标识。
  • 列族(Column Family):一组列(Column)的集合,物理上存储在一起。
  • 列(Column):列族中的具体字段,由列族前缀和列限定符(Qualifier)组成。
  • 单元格(Cell):表中存储数据的最小单元,由行键、列族、列限定符和时间戳唯一标识。

4. 基础操作

创建表

import org.apache.hadoop.hbase.HBaseConfiguration;
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.client.TableDescriptor;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;

public class CreateTableExample {
    public static void main(String[] args) throws Exception {
        Connection connection = ConnectionFactory.createConnection(HBaseConfiguration.create());
        Admin admin = connection.getAdmin();

        TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(TableName.valueOf("my_table"))
                .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder("my_cf").build())
                .build();

        admin.createTable(tableDescriptor);

        admin.close();
        connection.close();
    }
}

插入数据

import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class InsertDataExample {
    public static void main(String[] args) throws Exception {
        Connection connection = ConnectionFactory.createConnection(HBaseConfiguration.create());
        Table table = connection.getTable(TableName.valueOf("my_table"));

        Put put = new Put(Bytes.toBytes("row1"));
        put.addColumn(Bytes.toBytes("my_cf"), Bytes.toBytes("col1"), Bytes.toBytes("value1"));

        table.put(put);

        table.close();
        connection.close();
    }
}

查询数据

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class GetDataExample {
    public static void main(String[] args) throws Exception {
        Connection connection = ConnectionFactory.createConnection(HBaseConfiguration.create());
        Table table = connection.getTable(TableName.valueOf("my_table"));

        Get get = new Get(Bytes.toBytes("row1"));
        get.addColumn(Bytes.toBytes("my_cf"), Bytes.toBytes("col1"));

        Result result = table.get(get);
        Cell cell = result.getColumnLatestCell(Bytes.toBytes("my_cf"), Bytes.toBytes("col1"));

        String value = Bytes.toString(CellUtil.cloneValue(cell));
        System.out.println("Value: " + value);

        table.close();
        connection.close();
    }
}

5. 其他重要概念

  • Region:HBase表被水平分割成多个Region,每个Region维护一部分数据。
  • RegionServer:负责管理和存储一个或多个Region。
  • WAL(Write-Ahead Log):在数据写入HDFS之前,先写入WAL,以保证数据的持久性。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,自学记录Hbase基础知识点总览。