全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

HBase基本操作

最近更新时间:2024-11-19 16:26:58

HBase是一个开源、分布式、版本化的非关系型数据库,是Apache基金会Hadoop项目的一部分,采用Java语言实现。它运行在Hadoop Distributed File System (HDFS)上,是Apache Hadoop的主要组件。HBase提供了存储稀疏数据集的容错方式,适用于许多大数据用例,尤其在实时数据处理和大量数据的随机读写访问方面表现出色。HBase更类似于典型的Apache MapReduce应用程序。HBase支持以Apache Avro、REST和Thrift编写应用程序。


背景

HBase是BigTable的开源Java版本,建立在HDFS上,提供高可靠性、高性能、列存储、可伸缩、实时读写NoSql的数据库系统。介于NoSql和RDBMS之间,仅能通过主键(row key)和主键范围检索数据,仅支持单行事务(可通过Hive支持实现多表join等复杂操作)。主要用于存储结构化和半结构化的松散数据。HBase查询数据功能简单,不支持复杂操作,不支持复杂的事务(行级事务)。


特点

  1. 分布式架构: HBase采用分布式架构,在集群中横向扩展,处理大规模数据。数据分片存储在不同节点上,实现数据的并行处理和高可用性,适用于海量数据处理。

  2. 列式存储: HBase采用列式存储方式,高效读取特定列或列族的数据,适用于需要快速随机读写大量数据的场景。

  3. 高可靠性: 通过数据复制和自动故障恢复提供高可靠性。数据在集群中多个节点之间进行复制,实现数据冗余和容错,自动恢复数据以确保可用性和持久性。

  4. 实时读写: 提供高吞吐量和低延迟的读写操作,支持随机访问和范围扫描,适用于实时响应和处理大量并发请求的应用场景。

  5. 强一致性: 提供强一致性的数据模型,支持原子性的读写操作,确保读取到的是最新写入数据,适用于需要数据一致性和可靠性的应用,如金融交易和在线订单处理。


HBase基础架构

HMaster

  1. 监控RegionServer

  2. 处理RegionServer 故障转移

  3. 处理元数据的变更

  4. 处理region 的分配或移除

  5. 在空闲时间进行数据的负载均衡

  6. 通过 Zookeeper 发布自己的位置给客户

RegionServer

  1. 负责存储 HBase 的实际数据

  2. 处理分配给它的 Region

  3. 刷新缓存到 HDFS

  4. 维护 HLog

  5. 执行压缩

  6. 负责处理 Region 分片

Write-Ahead logs

HBase 的修改记录,当对 HBase 读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

HFile

这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。

Store

HFile 存储在 Store 中,一个 Store 对应 HBase 表中的一个列族。

MemStore

内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在 WAL 中之后,RegsionServer 会在内存中存储键值对。

Region

Hbase 表的分片,HBase 表会根据 RowKey 值被切分成不同的 region 存储在RegionServer 中,在一个 RegionServer 中可以有多个不同的 region。


HBase基础操作

连接HBase

执行hbase shell连接HBase.

成功连接后,控制台打印版本信息和hbase:001:0>提示符。运行help命令查看HBase Shell命令列表。


状态和版本查询

  • 查询服务器状态:status

  • 查询版本号:version

DDL操作

创建表

create 'my_table', 'my_column_family','my_column_family2'

列出所有表

list

获取表的具体描述

describe 'my_table'

删除一个列族

alter 'my_table', {NAME=>'my_column_family',METHOD=>'delete'}

删除一个表

把表设置为disable: disable 'my_table'

删除这个表drop 'my_table'

查询表是否存在

exists 'my_table'

查看表是否可用

is_enabled 'my_table'


DML操作

插入数据:

put命令向指定表写入数据,指定表名、行、列和需要写入的值:

put 'my_table', 'row1', 'my_column_family:column1', 'value1'

put 'my_table', 'row1', 'my_column_family:column2', 'value2'

获取数据:

获取my_table表的row1行的所有数据:get 'my_table', 'row1'

获取 my_table 表的 row1 行 my_column_family列族的所有数据:get 'my_table', 'row1', {COLUMN=>'my_column_family'}

更新记录

更新 my_table 表的 row1 行、my_column_family 列族中 column1 列的值:put 'my_table', 'row1', 'my_column_family:column1', 'new_value'

获取数据

运行get命令获取行或者单元格的数据,例如:

get 'my_table', 'row1', {COLUMN=>'my_column_family:column1'}

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈