大数据 - HBase《一》- Hbase基本概念

目录

1.1. Hbase简介

1.2 Hbase,Hive, Mysql对比

1.3 Hbase数据模型

🥙region(区域)

🥙rowkey(行键)

🥙列族(column family)

🥙列(column Qualifier)

🥙版本(version)-默认按时间戳去区分版本

🥙cell(存储单元)

🥙Store

Hbase定位如何定位一条数据?

1.4 Hbase架构模型

🥙zookeeper作用

🥙HMaster作用

🥙HRegionServer作用

Region 

HLog

HDFS

1.5 Hbase百亿数据秒级查询的秘密


1.1. Hbase简介

H-Hadoop,base-database,故名思意Hbase就是Hadoop的数据库

HBase是一种NoSQL(非关系)型的数据库,面向列进行存储。利用HDFS作为文件存储系统

1.2 Hbase,Hive, Mysql对比

  • Hive是计算框架,不是数据库

  • Mysql是数据库,它的数据是落在磁盘上的,并不适用于海量数据的存储

  • Hbase的数据是存在hdfs上的,如果把数据落在磁盘上,那他就和mysql差不多

1.3 Hbase数据模型

Hbase是非关系型数据库,所以并没有事务、索引等机制。

🥙region(区域)

HBase 中的数据存储被划分为多个 Region,每个 Region 负责存储一定范围的数据。当数据量增加时,Region 会自动切分为更小的 Region,以便保持数据的均衡分布和高效访问。

🥙rowkey(行键)

在 HBase 中,每一行数据都由一个唯一的 Rowkey 来标识。Rowkey 是一个字节数组,通常用于按照字典顺序对数据进行排序和存储,以便快速查找和访问数据。

🥙列族(column family)

HBase是列式存储,就是以列族(Column Family)为基本单位进行数据的存储。每个列族包含多个列(Column Qualifier),它们共享相同的前缀。列族在创建表时需要预先定义,并且在表的生命周期内不能更改。

在存储时,一个store对应于一个列族在磁盘上的存储结构,所以一般把数据相关性大的归为一个列族,一般数据划分三四个列族就够了

🥙列(column Qualifier)

列(Column Qualifier)是 HBase 表中的基本数据单元,它包含在列族(Column Family)中。每个列都与一个值相关联,可以存储任意类型的数据。列的名称是一个字节数组,通常用于表示属性或特征。

列族下有任意列,每行的列都可以不相同。但是在企业中列族下面有哪些列都是提前约定好的

🥙版本(version)-默认按时间戳去区分版本

HBase 中的数据是按照版本进行存储的。每次写入数据时,都会附加一个时间戳作为版本标识。默认情况下,HBase 使用时间戳来区分不同版本的数据。可以在读取数据时指定版本号,以获取特定版本的数据。

Hbase里面的数据是多版本的,比如zs前两年用的手机号是一个版本,后续换了一个手机号

🥙cell(存储单元)

在 HBase 中,每个单元格(Cell)存储一个特定的数据项,它由行键、列族、列标识和时间戳组成。每个单元格可以包含多个版本的数据,版本之间通过时间戳进行区分。

🥙Store

Store 是 HBase 中存储数据的物理存储单元,对应于一个列族(Column Family)在磁盘上的存储结构。每个列族包含一个或多个 Store,每个 Store 包含一个或多个 HFile 文件,用于存储数据。

Store属于region,一个region里面有多个store

 

Hbase 名称空间-->表-->region-->row(row_key column_family(cell(qualifier-value)))

Hbase定位如何定位一条数据?

一行数据有一个行键叫做rowkey,可以有若干个列族,每一个列族下面有若干个列,每个列中的数据存储支持多个版本(version)

所以,在Hbase中定位一条数据需要通过:Rowkey->Column Family->Column Qualifier->Version

1.4 Hbase架构模型

 

HBase集群主要由HMaster、RegionServer和Zookeeper组成

🥙zookeeper作用

HBase通过Zookeeper来完成集群内各种机制的协调工作。主要工作职责如下:

  • 选举HMaster:保证任何时候,集群中只有一个Master.实现HMaster主从节点的failover.

  • 监控HRegionServer:实时监控HRegionServer的状态,将HRegionServer的上下线实时报告给HMaster.

  • 维护元数据和集群配置:存放整个HBase集群的元数据以及集群的状态信息,包括:

    • 存储所有HRegion的寻址入口,存储所有的元数据信息

    • 存储HBase的Schema,包括有哪些Table,每个Table有哪些Column Family.

 

🥙HMaster作用

(分配数据到底存储在哪个Region server中)

  • 管理和分配Region, 比如在Region split时分配新的region,在RegionServer退出时迁移其内的Region到其他RegionServer上。

  • 负责管理Region server,实现负载均衡

  • 发现失效的Regionserver并通过拆分LOG重新分配其上的region

  • 管理用户对table定义的各类DDL操作

 

🥙HRegionServer作用

  • 管理master为其分配的Region

  • 处理来自客户端的读写请求

  • 负责和底层HDFS的交互,存储数据到HDFS

  • 负责Region变大以后的拆分

  • 负责Storefile的合并工作(StoreFile是抽象的,文件的引用形式)

  • 负载均衡的事情

  • 管理表的片段数据(region)

 

Region 

一个HRegionServer包含了多个HRegion。HBase将表中的数据基于RowKey的不同范围划分到不同的HRegion上,每个HRegion都负责一定范围的数据存储和访问。

HRegion是HBase中分布式存储和负载均衡的最小单元,不同的HRegion可以分布在不同的HRegionServer上。每个表一开始只有一个HRegion,随着数据不断插入表,HRegion不断增大,当增大到指定阈值(10G)的时候,HRegion就会等分成两个HRegion,切分后其中一个HRegion会被转移到其他的HRegionServer上,实现负载均衡。

当Table中的行不断增多,就会有越来越多的Region.为了防止前期数据的处理都集中在一个HRegionServer,我们可以根据自己的业务进行预分区。

这样即使有一张百亿条数据的表,由于数据被划分到不同的HRegion上,每个HRegion都可以独立地进行读写,HBase读写数据的时候还可以与多HRegion分布式并发操作,所以访问速度并不会太大的降低。

 

HLog

一个HRegionServer只有一个HLog文件。负责记录数据的操作日志,当HBase出现故障的时候可以进行日志重放、故障恢复。例如磁盘掉电导致MemStore中的数据没有持久化存储到StoreFile,这时就可以通过HLog日志重放来恢复数据。

HDFS

HDFS为HBase提供底层数据存储服务,同时为HBase提供高可用支持。HBase将HLog存储在HDFS上,当服务器发生异常宕机时,可以重放HLog来恢复数据。

比如:MySQL数据直接落入磁盘,HBase数据落入HDFS,HDFS数据落入磁盘。

1.5 Hbase百亿数据秒级查询的秘密

假设我们有100亿数据,大约10T,我们创建表时采用预分区的手段,假设有2000HRegion,一个HRegion 5G,我们只需要找这5G数据就可以找到user-1.

一个HRegion有多个store,一个store对应一个列族,我们要查询的列肯定在一个列族中。假设我们这张表被我们分了3个列族,一个store差不多是1.7G,我们只需要找这1.7G数据就可以找到user-1.

一个store分为0个或多个storeFile(HFile),一个StoreFile是100M,大约20个,为了公平20/2=10.我们只需要找这1G数据就可以找到user-1.

storeFile中文又是KV映射的数据,按照1:20的比例。我们只需要找这80M数据就可以找到user-1.

机械键盘差不多是100M/s,固态更不用说了,所以这就是HBase百亿数据秒级查询的秘密。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/453633.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Sui与数据平台ZettaBlock达成合作,为其公测提供数据

Sui一向以闪电般的速度、无限水平扩展著称,现已迅速成为DeFi活动的重要场所。近期,数据平台ZettaBlock宣布在其开创性的Web3数据平台发布中,选择Sui作为基础集成合作伙伴之一。在ZettaBlock的开放测试版发布之际,构建者和开发者将…

【node】初识node以及fs操作,path操作以及http操作(一)

1、不同浏览器使用不同的javaScript引擎 chrome > v8 Firefox > OdinMonkey(奥丁猴) safri > JSCore IE浏览器>Chakra(查克拉) 2、node是一个基于chrome v8引擎的javaScript运行环境 浏览器是JavaScript的前端运行环境,…

AcrelEMS-MED医院综合能效管理平台在医院电力中的应用

彭姝麟 Acrelpsl 0引言 全医院是公共服务组织,其机构的特殊性决定了医院在提供医疗服务的同时,也需要发挥榜样作用,通过进行能源管理系统的应用,为医院的电力使用和能源消耗进行好的管理,从而减少电能消耗&#xff0…

Web端3D图形引擎HOOPS Commuicator如何实现BIM轻量化?

面对建筑信息模型(BIM)中复杂大型模型的挑战,如何实现轻量化,并使其能在Web端流畅运行是我们需要解决的问题。而HOOPS Communicator正可凭借其出色的Web端3D模型敏捷解决性,为我们提供强有力的支撑。 HOOPS Communica…

【四】【算法分析与设计】贪心算法的初见

455. 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有…

阿里云数据盘挂载目录

1、先登录服务器创建新目录aaa 2、云盘都快照备份下。后续操作完核实无误了,您根据您需求删除快照就行, 然后登录服务器内执行: fdisk -l lsblk blkid ll /aaa 3、执行:(以下命令是进行数据盘做ext4文件系统并挂载到…

tigramite教程(五)使用TIGRAMITE 进行自助聚合和链接置信度量化

使用TIGRAMITE 进行自助聚合和链接置信度量化 自助聚合(Bagging)和置信度估计例子数据生成模型基本的PCMCIBagged-PCMCI使用优化后的pc_alpha进行自举聚合使用优化的pc_alpha进行CMIknn的自举聚合 TIGRAMITE是一个用于时间序列分析的Python模块。它基于P…

Elastic Stack--04--ES中的检索方式、Query DSL

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.ES中的检索方式第一种方式GET bank/_search # 检索bank下的所有信息,包括 type 和 docsGET bank/_search?q*&sortaccount_number:asc 第二种方式…

Redis经典面试题-卷2

前言 继续上一篇《Redis经典面试题-卷1》,今天整理一下关于redis的第2卷面试题。废话不多说,直接看干货 热Key问题 如果单单从工作的角度的话,面试官一般会问下面两个内容: 什么是热Key问题?如何解决热key问题&…

Android 摄像头等比例缩放 摄像头画面比例

在拍摄照片的时候我们往往会在后期进行二次构图,在裁剪的时候有不同的相片长宽比供我们选择,不同的长宽比带给观众的感受也不一样。这里为大家介绍一下照片拍摄中常用到长宽比例。 3:2(6:4) 这张照片是用Canon 50D拍摄的&#xf…

收藏贴!6个谈薪小技巧,助你拿到满意薪资

Salesforce的就业市场一直在迅猛发展,对Salesforce专业人士的需求持续不断,对优秀人才的需求更大。 本篇文章总结了6个谈薪小技巧,可以帮助SF从业者、求职者拿到满意的薪资。 01 了解市场价格 首先,需要了解当前就业市场的情况…

【Linux】进程控制与进程调度

Linux进程介绍 进程的基本概念 Linux是多用户、多任务的操作系统。在这样的环境中,各种计算机资源的分配和管理都是以进程为单位进行的。 Linux操作系统包括三种不同类型的进程: 1)交互进程:一种由Shell启动的进程。交互进程既可…

十、软考-系统架构设计师笔记-软件架构演化和维护

1、软件架构演化 软件架构的演化和维护的目的是为了使软件能够适应环境的变化而进行的纠错性修改和完善性修改。软件架构的演化和维护过程是一个不断迭代的过程,通过演化和维护,软件架构逐步得到完善,以满足用户需求。软件架构的演化就是软件…

JavaScript---VConsole插件配置使用,一步到位简单实用!

1. 寻找到自己需要的VConsole插件js文件 个人喜欢BootCDN这个平台(直接在线引用或者下载本地引入均可~) vConsole (v3.15.1) - A lightweight, extendable front-end developer tool for mobile web page. | BootCDN - Bootstrap 中文网开源项目免费 C…

浏览器的工作原理

从输入一个url到页面加载完成,中间都发生了什么? 参考原文地址 首先在浏览器地址栏输入一个地址并回车之后, 1. DNS查找 浏览器会进行DNS查找,把域名https://example.com转化为真实的IP地址10.29.33.xx,根据IP地址找…

探索C++中的动态数组:实现自己的Vector容器

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…

Android Studio下运行java main 方法

方法一 修改项目的.idea中的gradle.xml文件&#xff0c;在GradleProjectSettings标签下添加一行代码 <option name"delegatedBuild" value"false" />方法二 main方法上右键选择Run ‘xxx’ with Coverage

视觉图像处理和FPGA实现第三次作业--实现一个加法器模块

一、adder模块 module adder(ina, inb, outa); input [5:0] ina ; input [5:0] inb ; output [6:0] outa ;assign outa ina inb; endmodule二、add模块 module add(a,b,c,d,e); input [5:0] a ; input [5:0] b ; input [5:…

1.1计算机系统构成及硬件系统知识(上)

基础知识部分----chap01 主要议题&#xff1a; 数制转换&#xff1a;一般会涉及存取的计算&#xff1b;ip地址中变长子网掩码的计算题&#xff1b;&#xff08;难度较大&#xff09; 数的表示&#xff1a;二进制、十六进制&#xff1b; 计算机的组成&#xff1a;考察的较为深入…

30天学会QT(进阶)--------------第二天(创建项目)

1、如何规范的创建一个项目 由于本人也是从其他的项目上学来的&#xff0c;所以也不算是业界规范&#xff0c;每个公司或者个人都有自己的方式去创建项目&#xff0c;项目的创建是本着简洁&#xff0c;明了&#xff0c;方便而言的&#xff0c;所以对于我来说&#xff0c;不繁琐…