Day8 —— 大数据技术之HBase

HBase快速入门系列

HBase的概述

什么是HBase?

HBase 是一个开源的、分布式的、面向列的 NoSQL 数据库,它构建在 Apache Hadoop 之上,提供了高可靠性、高性能和可伸缩性的数据存储解决方案。HBase 的设计灵感来自于 Google 的 Bigtable。

主要特点和功能包括

  1. 面向列的存储: HBase 采用面向列的存储模型,数据按行键(Row Key)和列族(Column Family)存储,可以支持动态列。

  2. 分布式存储: HBase 是基于 Hadoop 的分布式文件系统(如 HDFS)构建的,可以水平扩展以处理大规模数据集。

  3. 高可靠性和高可用性: HBase 提供数据的自动复制和容错机制,确保数据的可靠性和可用性。

  4. 快速读写: HBase 提供了高性能的读写操作,支持随机读写访问,并能够处理大量并发请求。

  5. 强一致性: HBase 提供强一致性的数据访问模型,确保数据的一致性性。

  6. 支持自动分区和负载均衡: HBase 可以自动管理数据的分区和负载均衡,使得数据在集群中分布均匀。

  7. 支持多种操作接口: HBase 提供了多种操作接口,包括 Java API、REST API、Thrift API 等,方便用户进行数据访问和操作。

使用场景

  • 实时数据存储和分析: HBase 适用于需要实时存储和分析大量数据的场景,如日志数据、传感器数据等。

  • 在线交易处理(OLTP): HBase 支持高并发的随机读写操作,适用于在线交易处理系统。

  • 实时推荐系统: HBase 可以作为实时推荐系统的数据存储引擎,支持快速的数据检索和更新。

  • 时序数据存储: HBase 适用于存储时序数据,如传感器数据、日志数据等,支持按时间范围的快速查询。

HBase的架构

  • HMaster:

    HMaster 是 HBase 的主节点,负责管理整个集群的元数据、负载均衡、Region 的分配和调度、故障恢复等工作。HMaster 通过 ZooKeeper 进行协调和通信。

  • RegionServer:

    RegionServer 是 HBase 的工作节点,负责管理存储数据的 Region。

    每个RegionServer 可以管理多个 Region,负责处理读写请求、数据的存储和 检索等操作。

  • Region:

    Region 是 HBase 中数据存储和管理的基本单元,数据按照 Row Key 范围划分为多个 Region,每个 Region 存储一定范围的数据。RegionServer 负责管理和处理特定的 Region。

  • HLog(Write-ahead Log):

    HLog 是 HBase 中的写前日志,用于记录数据的变更操作,确保数据的持久性和一致性。HLog 会先将数据写入日志,然后再写入内存和磁盘中。

  • MemStore:

    MemStore 是位于 RegionServer 中的内存缓存,用于暂时存储写入的数据,当数据量达到一定阈值时,会将数据刷写到磁盘中的 HFile 中。

  • HFile:

    HFile 是 HBase 中数据存储的文件格式,数据按列族存储在 HFile 中,提供快速的数据检索和访问。

  • ZooKeeper:

    ZooKeeper 是 HBase 集群中的协调服务,用于管理集群的状态信息、选举 Master、协调 RegionServer 等。HBase 使用 ZooKeeper 来确保集群的一致性和可靠性。

  • HBase Client:

    HBase Client 是用户与 HBase 集群交互的接口,用户可以通过 HBase Client 发送读写请求、管理数据等操作。

HBase部署与启动

下载、解压缩,在/etc/profile全局配置文件中添加

export HBASE_HOME=/export/servers/hbase-2.4.5

export PATH= PATH:HBASE_HOME/bin

下载、解压缩,在/etc/profile全局配置文件中添加

export HBASE_HOME=/export/servers/hbase-2.4.5

export PATH= PATH:HBASE_HOME/bin

下载、解压缩,在/etc/profile全局配置文件中添加

xml 复制代码
<configuration>
  <!-- hbase数据存放的目录-->
  	<property>
       <name>hbase.rootdir</name>
       <value>hdfs://my2308-host:9000/hbase</value>
    </property>

    <!-- zk的位置 -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>localhost</value>
        <description>my2308-host:2181</description>
    </property>

<!--hbase.cluster.distributed表示是否分布式部署,指定为true-->
    <property>
         <name>hbase.cluster.distributed</name>
         <value>true</value>
    </property>

    <!-- hbase主节点的位置 -->
    <property>
         <name>hbase.master</name>
         <value>my2308-host:60000</value>
     </property>
</configuration>

拷贝zookeeper的conf/zoo.cfg到hbase的conf/下

启动HBase,执行start-hbase.sh脚本

注意:为了方便启动,可在/etc/profile中添加环境变量

export HBASE_HOME=/export/servers/hbase-2.4.5

export PATH= PATH: HBASE_HOME/bin

HBase基本操作

前提条件

数据库操作

进入 hbase 客户端

hbase shell

查看所有库(命名空间)

list_namespace

创建一个名称为'mydb'的库

create_namespace 'mydb'

删除'mydb'库

drop_namespace 'mydb'

进入 hbase 客户端

hbase shell

表操作

查看 'mydb'库下的表

list_namespace_tables 'mydb'

查看所有自己创建的表

list

在'mydb'库下创建名为test的表,并创建'f1'、'f2'两个列族

create 'mydb:test','f1','f2'

注意:创建表时若不指定库名,默认在default库下创建表,创建表要至少指定一个列族

查看表详细信息

describe 'mydb:test' 或 desc 'mydb:test'

增加列族

alter 'mydb:test','f3'

删除列族

alter 'mydb:test','delete'=>'f2'

删除表

disable 'mydb:test'

drop 'mydb:test'

注意:删除表需要先进行disable,再进行drop

数据的CRUD操作

先在 default 库下创建一个名为stu的表,列族名称是 info

create 'stu','info'

插入数据

put 'stu','1001','info:name','linghc'

put 'stu','1001','info:sex','man'

put 'stu','1001','info:age','26'

put 'stu','1002','info:name','renyy'

put 'stu','1002','info:sex','female'

put 'stu','1002','info:age','24'

put 'stu','1003','info:name','yilin'

put 'stu','1003','info:sex','female'

put 'stu','1003','info:age','18'

某一行的列的个数可以不一样

put 'stu','1004','info:name','dongfangb'

put 'stu','1004','info:sex','female'

put 'stu','1004','info:age','28'

put 'stu','1004','info:party','rysj'

根据row key(行键)查询

get 'stu','1004'

根据行键、列名查询

get 'stu','1004','info:name','info:age'

扫描表数据

scan 'stu'

按rowkey范围扫描 {STARTROW => '1001' ,STOPROW => '1003'} :左闭右开,此时只查询到 1002

scan 'stu',{STARTROW => '1001' ,STOPROW => '1003'}

指定STOPROW 后加!,可以实现左闭右闭

scan 'stu',{STARTROW => '1001' ,STOPROW => '1003!'}

修改数据:直接put进行覆盖

put 'stu','1001','info:name','linghc1'

注意:修改数据后,其实只是在原来的基础上增加了一条数据,查询的时候返回了时间戳最新的一个版本,旧版本的数据还在

查寻每个单元格的2个版本数据

scan 'stu',{RAW=>true,VERSIONS=>2}

注意RAW参数必须和VERSIONS一起使用,旧版本的数据在适当的时候会被释放;如果想要保留最新两个版本的数据,可以将某个表的 VERSIONS设置为2

更改表的VERSIONS

alter 'stu',{NAME=>'info',VERSIONS=>2}

注意:创建表时若不指定库名,默认在default库下创建表,创建表要至少指定一个列族

删除数据

delete 'stu','1001','info:sex'

此时查询会发现无数据

get 'stu','1001','info:sex'

再通过版本号查询

scan 'stu',{RAW=>true,VERSIONS=>2}

会发现删除的数据有Delete标注

  • 根据行键和列名删除列

deleteall 'stu','1001','info:sex'

标注为:DeleteColumn

  • 根据行键删除列族

deleteall 'stu','1004'

标注为:DeleteFamily

  • 删除表中所有数据

truncate 'stu'

truncate命令将删除表中的所有数据行,但是保留表的结构和配置信息。

HBase的不足

当涉及到某些特定的应用场景时,HBase并不总是首选解决方案。举例来说,HBase本身并不支持复杂的聚合运算,如Join和GroupBy操作。在这种情况下,可以考虑在HBase之上集成Phoenix或Spark组件。Phoenix适用于小规模聚合的OLTP场景,而Spark则适用于大规模聚合的OLAP场景。

此外,HBase原生不支持二级索引功能,这意味着无法直接进行二级索引查找。不过,有许多第三方解决方案可以为HBase提供二级索引支持,比如Phoenix提供的二级索引功能。

另一个限制是HBase没有实现全局跨行事务,只支持单行事务模型。针对这一点,Phoenix提供了全局事务模型组件,可以弥补HBase在这方面的不足。

尽管如此,HBase作为一个高可靠性、高性能和可伸缩性的分布式NoSQL数据库,在Hadoop生态系统的支持下,通过集成Phoenix、Spark或其他第三方组件,仍然能够满足广泛的大数据存储和处理需求。

相关推荐
GoldenaArcher4 分钟前
GraphQL 工程化篇 III:引入 Prisma 与数据库接入
数据库·后端·graphql
川石课堂软件测试5 分钟前
自动化测试之 Cucumber 工具
数据库·功能测试·网络协议·测试工具·mysql·单元测试·prometheus
阿里云大数据AI技术13 分钟前
云栖实录 | 通义实验室基于MaxCompute进行大模型数据管理及处理
大数据·人工智能
RestCloud19 分钟前
StarRocks 数据分析加速:ETL 如何实现实时同步与高效查询
数据库
野猪亨利6671 小时前
Qt day1
开发语言·数据库·qt
yumgpkpm1 小时前
CMP (类ClouderaCDP7.3(404次编译) )华为鲲鹏Aarch64(ARM)信创环境多个mysql数据库汇聚的操作指南
大数据·hive·hadoop·zookeeper·big data·cloudera
本就一无所有 何惧重新开始1 小时前
Redis技术应用
java·数据库·spring boot·redis·后端·缓存
isaki1372 小时前
qt day1
开发语言·数据库·qt
流星白龙2 小时前
【Qt】4.项目文件解析
开发语言·数据库·qt
小钻风33662 小时前
HTTPS是如何确保安全的
网络·数据库