大数据组件-Hbase

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 大数据组件-Hbase

 image.gif编辑

👨🏻‍🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟

🌈擅长领域:Java、大数据、运维、电子

🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!

🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!

 


目录

概念

特点

分布式

hbase原理

hbase架构

Hbase Shell操作

基本操作

表的操作

hbase数据结构

HBase原理

数据flush过程

数据合并过程


概念

    • HBase是一个基于HDFS口的非关系型面向列的分布式数据库。这是一个NoSQL开源数据库,其中的数据存储在行和列中。单元格是行和列的交集。
    • 每个单元格值都包含一个"版本”属性,该属性仅是唯一标识该 单元格的时间戳。映射中的每个值都是不间断的字节数组

    特点

      • 海量存储
        • Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正式因为Hbase良好的扩展性,才为海量数据的存储提供了便利
          • 列存储
            • 这里的列式存储其实说的是列族(ColumnFamily)存储,Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定
              • 极易扩展
                • Hbase的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。 通过横向添加RegionSever的机器,进行水平扩展,提升Hbase上层的处理能力,提升Hbsae服务更多Region的能力。
                • 备注:RegionServer的作用是管理region、承接业务的访问,这个后面会详细的介绍通过横向添加Datanode的机器,进行存储层扩容,提升Hbase的数据存储能力和提升后端存储的读写能力。
                  • 高并发
                    • 由于目前大部分使用Hbase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多。能获得高并发、低延迟的服务。
                      • 稀疏
                        • 稀疏主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。

                          分布式

                            • 分布式用户image.gif编辑
                              • 为了解决分布式用户下集群上session类的用户数据进行更好的进程之间通信,减少程序进程之间的通信消耗演变而来的——Spring
                                • 分布式系统image.gif编辑
                                • 客户负载均衡image.gif编辑
                                  • 并发:指的是线程的并发,抢占资源
                                  • s并行:指的是进程的并行,多核cpu,同时进行
                                    • 去中心化,无需负载均衡的引导,都会知道数据的流向,这就是Redies无需负载均衡器中心,结点互相保留了信息
                                      • hbase原理

                                      image.gif编辑

                                      hbase架构

                                      image.gif编辑

                                        • Region:分区
                                        • HLog:预写日志
                                        • Stor:列族
                                        • ZK:zookeeper高可用,检测节点心跳
                                        • HMaster:Hbase的集群master
                                        • Men Store:Cache缓存

                                        Hbase Shell操作


                                        基本操作

                                        1.进入HBase客户端命令行

                                        hbase shell

                                        image.gif

                                          1. 查看帮助命令
                                          hbase(main):001:0> help

                                          image.gif

                                            1. 查看当前数据库中有哪些表
                                            hbase(main):002:0> list

                                            image.gif

                                            表的操作

                                            1.创建表

                                            hbase(main):002:0> create 'student','info'

                                            image.gif

                                            2.插入数据到表

                                            hbase(main):003:0> put 'student','1001','info:sex','male'
                                            hbase(main):004:0> put 'student','1001','info:age','18'
                                            hbase(main):005:0> put 'student','1002','info:name','Janna'
                                            hbase(main):006:0> put 'student','1002','info:sex','female'
                                            hbase(main):007:0> put 'student','1002','info:age','20'

                                            image.gif

                                            3.扫描查看表数据

                                            hbase(main):008:0> scan 'student'
                                            hbase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW => '1001'}
                                            hbase(main):010:0> scan 'student',{STARTROW => '1001'}

                                            image.gif

                                              • {STARTROW => '1001', STOPROW => '1001'}:查看的是startrow(开始行)从1001(包含边界值),到stoprow(不包含边界值),比较的方式一类似ASCII码的逐位比较大小,若没有一位大于stoprow值则视为比其小。

                                              4.查看表结构

                                              hbase(main):011:0> describe 'student'

                                              image.gif

                                              5.更新指定字段的数据

                                              hbase(main):012:0> put 'student','1001','info:name','Nick'
                                              hbase(main):013:0> put 'student','1001','info:age','100'

                                              image.gif

                                                • 覆盖原有的达到更新

                                                6.查看“指定行”或“指定列族:列”的数据

                                                hbase(main):014:0> get 'student','1001'
                                                hbase(main):015:0> get 'student','1001','info:name'

                                                image.gif

                                                7.统计表数据行数

                                                hbase(main):021:0> count 'student'

                                                image.gif

                                                8.删除数据

                                                删除某rowkey的全部数据:

                                                hbase(main):016:0> deleteall 'student','1001'

                                                image.gif

                                                删除某rowkey的某一列数据:

                                                hbase(main):017:0> delete 'student','1002','info:sex'

                                                image.gif

                                                9.清空表数据

                                                hbase(main):018:0> truncate 'student'

                                                image.gif

                                                  • 提示:清空表的操作顺序为先disable,然后再truncate。

                                                  10.删除表

                                                  首先需要先让该表为disable状态:

                                                  hbase(main):019:0> disable 'student'

                                                  image.gif

                                                  然后才能drop这个表:

                                                  hbase(main):020:0> drop 'student'

                                                  image.gif

                                                    • 提示:如果直接drop表,会报错:ERROR: Table student is enabled. Disable it first.

                                                    11.变更表信息

                                                    将info列族中的数据存放3个版本:

                                                    hbase(main):022:0> alter 'student',{NAME=>'info',VERSIONS=>3}
                                                    hbase(main):022:0> get 'student','1001',{COLUMN=>'info:name',VERSIONS=>3}

                                                    image.gif

                                                      • VERSIONS:可以指定保存版本数量,put真正表示的新增,只不过展示数据的只展示最新的那条,想看之前的数据可以通过保存版本数据量之内的数据,结合TimeStamp时间戳进行判断。
                                                      • scan 't1',{RAW ⇒true,VERSION ⇒ 10}可以查看已经删除,但还没有被被真正的删除的隐藏起来找时机删除的信息

                                                      12.查看命名空间列表

                                                      hbase(main):007:0> list_namespace

                                                      image.gif

                                                      13.创建命名空间

                                                      hbase(main):008:0> create_namespace 'infomation'

                                                      image.gif

                                                      14.删除命名空间

                                                      hbase(main):009:0> drop_namespace 'infomation'

                                                      image.gif

                                                      15.往创建的命名空间里添加表

                                                      hbase(main):010:0> create 'infomation:emp','info'

                                                      image.gif

                                                      hbase数据结构

                                                        • RowKeyRowKey用于检索记录的主键,访问HBase table中的行有三种方式:
                                                          1. 通过单个RowKey访问(get)
                                                          2. 通过RowKey的range(正则)(like)
                                                          3. 全表扫描(scan)
                                                            • RowKey行键可以是任意字符串(最大长度64KB,实际长度为10~100byte)RowKey保存为字节数组(字节压缩的能力更大,更好利用空间),存储时按照RowKey(byte order)的字典顺序存储。设计Rowkey时,要充分利用排序存储这个特性,将经常一起读取的行存储到一起(位置相关性)。
                                                            • Column Family
                                                              列族:HBase表中的每个列,都属于某个列族。列族是schema的一部分(列不是),必须在使用表定义之前定义。列名都以列族作为前缀,例如:course:history,course:math属于course这个列族。
                                                            • Cell
                                                              由{rowkey,column Family:column,version}唯一确定的单元。cell中的数据时没有类型的,全是字节码形式存储。(无类型、字节码)
                                                            • Time Stamp
                                                              HBase中通过Rowkey和Columns确定的为一个存储单元称为cell。每个cell都保管着同一份数据的多个版本。
                                                            • Name Space(命名空间)image.gif编辑
                                                              1) Table:表,所有的表都是命名空间的成员,即表必属于某个命名空间,如果没有指定,则在default默认的命名空间中。
                                                              **2) RegionServer group:**一个命名空间包含了默认的RegionServer Group。
                                                              **3) Permission:**权限,命名空间能够让我们来定义访问控制列表ACL(Access Control List)。例如,创建表,读取表,删除,更新等等操作。
                                                              **4) Quota:**限额,可以强制一个命名空间可包含的region的数量。

                                                            HBase原理

                                                              • 读流程image.gif编辑
                                                                1)Client先访问zookeeper,从meta表读取region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息;
                                                                2)根据namespace、表名和rowkey在meta表中找到对应的region信息;
                                                                3)找到这个region对应的regionserver;
                                                                4)查找对应的region;
                                                                5)先从MemStore找数据,如果没有,再到BlockCache里面读;
                                                                6)BlockCache还没有,再到StoreFile(HFile)上读(为了读取的效率);
                                                                7)如果是从StoreFile(HFile)里面读取的数据,不是直接返回给客户端,而是先写入BlockCache,再返回给客户端。
                                                              • 写流程数据flush过程image.gif编辑
                                                                1)Client向HregionServer发送写请求;
                                                                2)HregionServer将数据写到HLog(write ahead log)。为了数据的持久化和恢复;
                                                                3)HregionServer将数据写到内存(MemStore);
                                                                4)反馈Client写成功。
                                                                数据flush过程
                                                                1)当MemStore数据达到阈值(默认是128M,老版本是64M),将数据刷到硬盘,将内存中的数据删除,同时删除HLog(预写日志)中的历史数据;
                                                                2)并将数据存储到HDFS中;
                                                                3)在HLog(预写日志)中做标记点。
                                                                数据合并过程
                                                                1)当数据块达到3块,Hmaster触发合并操作,Region将数据块加载到本地,进行合并;
                                                                2)当合并的数据超过256M,进行拆分,将拆分后的Region分配给不同的HregionServer管理;
                                                                3)当HregionServer宕机后,将HregionServer上的hlog(预写日志)拆分,然后分配给不同的HregionServer加载,修改.META.;
                                                                4)注意:HLog(预写日志)会同步到HDFS。
                                                                image.gif
                                                              相关实践学习
                                                              lindorm多模间数据无缝流转
                                                              展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
                                                              云数据库HBase版使用教程
                                                                相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
                                                              相关文章
                                                              |
                                                              23天前
                                                              |
                                                              Java 大数据 分布式数据库
                                                              Spring Boot 与 HBase 的完美融合:探索高效大数据应用开发的新途径
                                                              【8月更文挑战第29天】Spring Boot是一款广受好评的微服务框架,以其便捷的开发体验著称。HBase则是一个高性能的大数据分布式数据库系统。结合两者,可极大简化HBase应用开发。本文将对比传统方式与Spring Boot集成HBase的区别,展示如何在Spring Boot中优雅实现HBase功能,并提供示例代码。从依赖管理、连接配置、表操作到数据访问,Spring Boot均能显著减少工作量,提升代码可读性和可维护性,使开发者更专注业务逻辑。
                                                              61 1
                                                              |
                                                              1月前
                                                              |
                                                              分布式计算 大数据 分布式数据库
                                                              "揭秘HBase MapReduce高效数据处理秘诀:四步实战攻略,让你轻松玩转大数据分析!"
                                                              【8月更文挑战第17天】大数据时代,HBase以高性能、可扩展性成为关键的数据存储解决方案。结合MapReduce分布式计算框架,能高效处理HBase中的大规模数据。本文通过实例展示如何配置HBase集群、编写Map和Reduce函数,以及运行MapReduce作业来计算HBase某列的平均值。此过程不仅限于简单的统计分析,还可扩展至更复杂的数据处理任务,为企业提供强有力的大数据技术支持。
                                                              40 1
                                                              |
                                                              1月前
                                                              |
                                                              存储 分布式计算 负载均衡
                                                              什么是 HBase?其组件起什么作用?
                                                              【8月更文挑战第12天】
                                                              45 4
                                                              |
                                                              20天前
                                                              |
                                                              前端开发 大数据 数据库
                                                              🔥大数据洪流下的决战:JSF 表格组件如何做到毫秒级响应?揭秘背后的性能魔法!💪
                                                              【8月更文挑战第31天】在 Web 应用中,表格组件常用于展示和操作数据,但在大数据量下性能会成瓶颈。本文介绍在 JavaServer Faces(JSF)中优化表格组件的方法,包括数据处理、分页及懒加载等技术。通过后端分页或懒加载按需加载数据,减少不必要的数据加载和优化数据库查询,并利用缓存机制减少数据库访问次数,从而提高表格组件的响应速度和整体性能。掌握这些最佳实践对开发高性能 JSF 应用至关重要。
                                                              36 0
                                                              |
                                                              21天前
                                                              |
                                                              存储 缓存 分布式数据库
                                                              Apache HBase 的组件有哪些?
                                                              【8月更文挑战第31天】
                                                              28 0
                                                              |
                                                              2月前
                                                              |
                                                              存储 NoSQL 大数据
                                                              大数据存储:HBase与Cassandra的对比
                                                              【7月更文挑战第16天】HBase和Cassandra作为两种流行的分布式NoSQL数据库,在数据模型、一致性模型、数据分布、查询语言和性能等方面各有千秋。HBase适用于需要强一致性和与Hadoop生态系统集成的场景,如大规模数据处理和分析。而Cassandra则更适合需要高可用性和灵活查询能力的场景,如分布式计算、云计算和大数据应用等。在实际应用中,选择哪种数据库取决于具体的需求和场景。希望本文的对比分析能够帮助读者更好地理解这两种数据库,并做出明智的选择。
                                                              |
                                                              2月前
                                                              |
                                                              存储 Java 分布式数据库
                                                              使用Spring Boot和HBase实现大数据存储
                                                              使用Spring Boot和HBase实现大数据存储
                                                              |
                                                              3月前
                                                              |
                                                              存储 分布式计算 大数据
                                                              Hadoop 生态圈中的组件如何协同工作来实现大数据处理的全流程
                                                              Hadoop 生态圈中的组件如何协同工作来实现大数据处理的全流程
                                                              |
                                                              3月前
                                                              |
                                                              Java 大数据 API
                                                              【大数据】HDFS、HBase操作教程(含指令和JAVA API)
                                                              【大数据】HDFS、HBase操作教程(含指令和JAVA API)
                                                              110 0
                                                              【大数据】HDFS、HBase操作教程(含指令和JAVA API)
                                                              |
                                                              3月前
                                                              |
                                                              存储 分布式计算 Hadoop
                                                              【大数据】分布式数据库HBase下载安装教程
                                                              【大数据】分布式数据库HBase下载安装教程
                                                              81 0

                                                              热门文章

                                                              最新文章