当前位置:实例文章 » 其他实例» [文章]Hbase基础概念

Hbase基础概念

发布人:shili8 发布时间:2025-03-04 08:08 阅读次数:0

**HBase 基础概念**

HBase 是一个开源的、分布式的、面向列的NoSQL数据库。它基于谷歌BigTable的设计理念,提供高性能、高可扩展性和高可靠性的数据存储服务。下面是 HBase 的基础概念:

###1. HBase 架构HBase 的架构主要包括以下几个组件:

* **RegionServer**:负责存储和管理 Region 数据。
* **Master**:负责分配 RegionServer 和 Region,维护 RegionServer 的状态。
* **ZooKeeper**:用于维护 HBase 集群的配置信息和 RegionServer 的状态。

###2. RegionRegion 是 HBase 中数据的基本存储单位。每个 Region 由一个 RegionServer 来管理,每个 RegionServer 可以管理多个 Region。Region 的大小可以根据实际需求进行调整。

###3. RowKeyRowKey 是 HBase 中用于唯一标识一条记录的字段。RowKey 的长度和值都非常重要,因为它们决定了数据在磁盘上的存储位置和访问顺序。

###4. ColumnFamilyColumnFamily 是 HBase 中用于组织列的逻辑集合。每个表可以有多个 ColumnFamily,每个 ColumnFamily 可以包含多个列。

###5. CellCell 是 HBase 中最小的数据存储单位,代表一行中的一条记录。每个 Cell 由 RowKey、ColumnFamily 和 Timestamp 组成。

###6. PutPut 是 HBase 中用于插入或更新数据的命令。Put 命令可以指定多个列值,并且可以批量执行。

###7. GetGet 是 HBase 中用于获取数据的命令。Get 命令可以根据 RowKey 和 ColumnFamily 来获取特定数据。

###8. DeleteDelete 是 HBase 中用于删除数据的命令。Delete 命令可以根据 RowKey 和 Timestamp 来删除特定数据。

###9. ScanScan 是 HBase 中用于扫描数据的命令。Scan 命令可以根据 RowKey、ColumnFamily 和 Timestamp 来获取指定范围内的数据。

**示例代码**

javaimport org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.mapreduce.TableInputFormat;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.conf.Configuration;

import java.io.IOException;

public class HBaseExample {

 public static void main(String[] args) throws IOException {
 // 创建HBase配置 Configuration conf = HBaseConfiguration.create();

 // 连接到HBase集群 String zookeeperQuorum = "localhost";
 int zookeeperPort =2181;
 conf.set("hbase.zookeeper.quorum", zookeeperQuorum);
 conf.set("hbase.zookeeper.property.clientPort", String.valueOf(zookeeperPort));

 // 创建表 String tableName = "example_table";
 HBaseAdmin hbaseAdmin = new HBaseAdmin(conf);
 if (!hbaseAdmin.tableExists(tableName)) {
 HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName));
 tableDesc.addFamily(new HColumnDescriptor("cf1").setMaxVersions(3));
 hbaseAdmin.createTable(tableDesc);
 }

 // 插入数据 Put put = new Put(Bytes.toBytes("row1"));
 put.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("column1"), Bytes.toBytes("value1"));
 put.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("column2"), Bytes.toBytes("value2"));
 HTable table = new HTable(conf, tableName);
 table.put(put);

 // 获取数据 Get get = new Get(Bytes.toBytes("row1"));
 Result result = table.get(get);
 byte[] value = result.getValue(Bytes.toBytes("cf1"), Bytes.toBytes("column1"));
 System.out.println(Bytes.toString(value));

 // 扫描数据 Scan scan = new Scan();
 TableInputFormat.addDependency(conf, HTable.class);
 Job job = Job.getInstance(conf, "HBaseExample");
 job.setJarByClass(HBaseExample.class);
 job.setInputFormatClass(TableInputFormat.class);
 job.setOutputKeyClass(ImmutableBytesWritable.class);
 job.setOutputValueClass(Result.class);
 TableMapReduceUtil.initTableReducerJob(tableName, null, job);
 job.setMapperClass(ScanMapper.class);
 job.setNumReduceTasks(1);
 System.exit(job.waitForCompletion(true) ?0 :1));
 }
}


**注释**

* `HBaseConfiguration.create()`:创建 HBase 配置。
* `conf.set("hbase.zookeeper.quorum", zookeeperQuorum)`:设置 ZooKeeper 的 Quorum 地址和端口。
* `HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName))`:创建表描述器。
* `tableDesc.addFamily(new HColumnDescriptor("cf1").setMaxVersions(3))`:添加列族。
* `hbaseAdmin.createTable(tableDesc)`:创建表。
* `Put put = new Put(Bytes.toBytes("row1"))`:插入数据。
* `put.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("column1"), Bytes.toBytes("value1"))`:添加列值。
* `table.put(put)`:写入数据。
* `Get get = new Get(Bytes.toBytes("row1"))`:获取数据。
* `Result result = table.get(get)`:读取数据。
* `byte[] value = result.getValue(Bytes.toBytes("cf1"), Bytes.toBytes("column1"))`:获取列值。
* `System.out.println(Bytes.toString(value))`:输出列值。
* `Scan scan = new Scan()`:扫描数据。
* `TableInputFormat.addDependency(conf, HTable.class)`:添加依赖。
* `Job job = Job.getInstance(conf, "HBaseExample")`:创建任务。
* `job.setJarByClass(HBaseExample.class)`:设置 jar 文件。
* `job.setInputFormatClass(TableInputFormat.class)`:设置输入格式。
* `TableMapReduceUtil.initTableReducerJob(tableName, null, job)`:初始化表减少任务。
* `job.setMapperClass(ScanMapper.class)`:设置 mapper 类。
* `job.setNumReduceTasks(1)`:设置 reduce任务数。
* `System.exit(job.waitForCompletion(true) ?0 :1))`:等待完成并退出。

其他信息

其他资源

Top