提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
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基础知识点总览。