当前位置: 首页 > news >正文

Day8 —— 大数据技术之HBase

HBase快速入门系列

    • HBase的概述
      • 什么是HBase?
      • 主要特点和功能包括
      • 使用场景
    • HBase的架构
    • HBase部署与启动
    • HBase基本操作
      • 前提条件
      • 数据库操作
      • 表操作
      • 数据的CRUD操作
    • 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全局配置文件中添加

<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基本操作

前提条件

  • 启动Hadoop集群:sbin/start-all.sh
  • 启动ZooKeeper服务:zkServer.sh start
  • 启动HBase服务:start-hbase.sh

数据库操作

进入 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或其他第三方组件,仍然能够满足广泛的大数据存储和处理需求。

相关文章:

  • CPP-类对象大小的组成
  • Pip换源秘籍:让你的Python包飞行起来!
  • 美团携手HarmonyOS SDK,开启便捷生活新篇章
  • 佳能打印机问题解决
  • 发表在SIGMOD 2024上的高维向量检索/向量数据库/ANNS相关论文
  • LabVIEW火箭发动机试车台程序
  • Android13 WMS窗口层级树
  • 第一章 - 第11节- 因特网概述 - 课后习题
  • MySQL进阶——触发器
  • 【2024德国签证】资金证明详解|从线上开户到签证申请超详细指南!
  • 一天了解23种设计模式
  • k8s容器启动不了,一直重启, 报红提示Not Ready
  • 网络安全,怎么搭建Python防范环境
  • 小白跟做江科大32单片机之定时器
  • opencascade AIS_InteractiveContext源码学习5 immediate mode rendering 即时模式渲染
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Apache的80端口被占用以及访问时报错403
  • interface和setter,getter
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • React系列之 Redux 架构模式
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从setTimeout-setInterval看JS线程
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 算法系列——算法入门之递归分而治之思想的实现
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 网络应用优化——时延与带宽
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 智能合约开发环境搭建及Hello World合约
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • ###STL(标准模板库)
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #Linux(make工具和makefile文件以及makefile语法)
  • #Z2294. 打印树的直径
  • (转)Linux整合apache和tomcat构建Web服务器
  • .apk 成为历史!
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net 验证控件和javaScript的冲突问题
  • @antv/g6 业务场景:流程图
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [8481302]博弈论 斯坦福game theory stanford week 1
  • [AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性
  • [dart学习]第四篇:函数
  • [ESP32] 编码旋钮驱动
  • [github配置] 远程访问仓库以及问题解决
  • [java进阶]——方法引用改写Lambda表达式
  • [JS]JavaScript 简介
  • [JS]JavaScript 注释 输入输出语句
  • [Meachines] [Easy] Admirer Adminer远程Mysql反向+Python三方库函数劫持权限提升
  • [msg_msg] corCTF2021 -- fire_of_salvation