【大数据学习 | HBASE】habse的表结构
在使用的时候hbase就是一个普通的表,但是hbase是一个列式存储的表结构,与我们常用的mysql等关系型数据库的存储方式不同,mysql中的所有列的数据是按照行级别进行存储的,查询数据要整个一行查询出来,不想要的字段也需要查询出来,hbase是列式存储的方式实现的,它的一个列的所有行都是存储为一份文件,在大数据场景中我们一般一个表的字段都会比较多,那么我们业务很多情况下是不需要查询出来所有的列的,所以列式存储会大大的减少数据查询带来的消耗问题,为我们的查询增加效率。


我们已经知道了hbase是列级别存储的,那么我们看具体的存储结构
a
表中的数据结构rowkey是hbase表自带的主键,每个表中都会存在这样一个主键,它的格式为存储为Byte数组,什么样的数据都可以充当为rowkey进行存储,但是在存储的时候要转换为byte数组进行存储,并且数据是按照rowkey的字典顺序进行排序的。
表中是存在列的,但是这个列以列族进行分类,比如info列族中存在三个列id,name,age 相应的列的存储数据类型也可以是任意的类型,但是都会以byte数组形式存储在hbase中。
我们在使用hbase的表的时候,我们就按照上图的表格显示进行使用就可以了,但是实际的底层存储却不是我们所看到的样子
首先我们先要知道,hbase的表的数据操作分为两个类型,一个是put一个是delete,put是更新或者插入新的数据都使用这个命令它会自己覆盖数据,delete是删除数据,hbase的底层数据存储是hdfs,hdfs中的数据是不允许我们随意的进行操作和修改的,那么我们的所有操作都必须要先放入到自己的内存中然后在将数据写出到hdfs中,和hdfs中的数据进行合并处理,所以我们在hbase中真正存储的数据并不是按照表的样子进行存储的,底层是按照k-v类型存储到hbase中的,并且写出到hdfs中。

我们在上面的表中可以看到数据的存储是按照表格形式存储的,但是表格形式的存储在hbase的底层数据中并不是真正存在的,而是kv类型存储的,其中存储的数据包含以下几个部分,key的组成是[rowkey主键,列族,列,时间戳和操作类型],其中rowkey是唯一性的主键,每个数据都必须和主键相关联,列族和列组成了相对应的存储描述,时间戳用于做数据的修改保存,用于识别最新的数据是什么,而不像是关系型数据库它的每个操作都会直接写出到数据上,我们只能在上层操作,并且操作完毕以后将数据一下写出到hdfs中进行最终保存,所以时间戳是必备项,同于我们识别数据的版本,能够认识到数据的变化流程,找出最新的数据,type类型用户识别操作是什么,从而最后得出数据最新值,value是我们每次操作对应的值
而且因为数据在底层存储是按照kv类型进行存的,那么我们会发现在不同的行的数据可能字段并不相同,并不是像关系型数据库中,列是固定死的,从而我们发现hbase的数据存储中能够固定死的就只有列族信息。
在我们操作和使用hbase之前,先要知道以下几个比较重要的关键词
namespace
命名空间:相当于是关系型数据中的数据库概念。在hbase中可以根据不同的业务声明不同的命名空间,一个命名空间中会存在多个表,类似于数据库表的分类层级
table
hbase数据库中的表,和关系型数据库的表相同,但是这个表中我们只需要声明列族即可,不需要指定相应的列字段,因为不同的行中的数据是按照kv进行存储的,可以动态变化
row
hbase表中的一行内容,一行中会存在一个唯一的rowkey,以及很多用列族和列字段标识的值,hbase的表是列式存储的,那么一行中的不同列族是位于多个文件中的,在查询一整行内容的时候可能会需要用到多个底层存储文件才能获取到。
column family
列族:表中的列的固定部分,其中一个列族中会包含很多个列,每个列并不是真实存在的,只是存储数据时候的一个描述而已,更像是kv数据中的一个简单的描述值,一个列族会单独存储到一个文件中,这个列族中所有的列都是存在一个文件中的。
column
列:在一个列中的下一级的描述关键字。
timestamp
操作时间戳,用于在数据多次操作的时候记录每一次操作的时间,用于标识数据的版本。
cell
单元格:一个由行和列进行定位的数据位置叫做单元格信息,其中包含一个确定的值,这个值其实只是kv存储的一个单独的value值,会根据上面的timestamp时间戳存在多个版本。
相关文章:
【大数据学习 | HBASE】habse的表结构
在使用的时候hbase就是一个普通的表,但是hbase是一个列式存储的表结构,与我们常用的mysql等关系型数据库的存储方式不同,mysql中的所有列的数据是按照行级别进行存储的,查询数据要整个一行查询出来,不想要的字段也需要…...
完成程序《大奖赛评分B》
学习目标: 使用代码完成程序《大奖赛评分B》 题目: 如今许多歌手大奖赛评分时,为了体现公平,在评委给出分数后统计平均得分时,都会去掉最高分和最低分。编写程序,读入评委打分(分数都是大于0的…...
K8S篇(基本介绍)
目录 一、什么是Kubernetes? 二、Kubernetes管理员认证(CKA) 1. 简介 2. 考试难易程度 3. 考试时长 4. 多少分及格 5. 考试费用 三、Kubernetes整体架构 Master Nodes 四、Kubernetes架构及和核心组件 五、Kubernetes各个组件及功…...
linux alsa-lib snd_pcm_open函数源码分析(三)
欢迎直接到博客 linux alsa-lib snd_pcm_open函数源码分析(三) 系列文章其他部分: linux alsa-lib snd_pcm_open函数源码分析(一) linux alsa-lib snd_pcm_open函数源码分析(二) linux alsa-lib snd_pcm_open函数源码分析(四…...
基于ssm的个人健康管理系统
项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…...
Debian下载ISO镜像的方法
步骤 1:访问Debian官方网站 打开你的网络浏览器,在地址栏中输入 https://www.debian.org/ 并回车,这将带你到Debian的官方网站。 步骤 2:导航到下载页面 在Debian官方网站的首页上,找到并点击“Download Debian”或类…...
大厂面试真题-简单说说线程池接到新任务之后的操作流程
线程池在接到新任务后的操作流程通常遵循以下步骤,这些步骤确保了任务的高效管理和执行。 一、判断当前线程状态 线程池首先会判断当前是否存在空闲线程,即没有正在执行任务且未被标记为死亡的线程。 有空闲线程:如果存在空闲线程…...
「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件,鸿蒙应用能够提高代码的可维护性,并简化复杂布局的构建。本篇将介绍如何创建自定义组件,如何向组件传递数据,以及如何在不同页面间复用这些组件。 关键…...
C++关键字:mutable
文章目录 一、mutable1.mutable修饰非静态的成员变量2.mutable用于lambda表达式3.mutable不能修饰的变量:静态变量、const变量 一、mutable 1.mutable修饰非静态的成员变量 1.mutable仅能修饰类中的非静态的成员变量。不能修饰全局变量、局部变量、静态变量、常量…...
Agent 智能体开发框架选型指南
编者按: 本文通过作者的实践对比发现,框架的选择应基于项目具体需求和团队特点,而不是简单追求某个特定框架。不同框架各有优势: 无框架方案实施最为简单直接,代码结构清晰,适合理解智能体原理,…...
基于Zynq FPGA对雷龙SD NAND的测试
一、SD NAND 特征 1.1 SD 卡简介 雷龙的 SD NAND 有很多型号,在测试中使用的是 CSNP4GCR01-AMW 与 CSNP32GCR01-AOW。芯片是基于 NAND FLASH 和 SD 控制器实现的 SD 卡。具有强大的坏块管理和纠错功能,并且在意外掉电的情况下同样能保证数据的安全。 …...
AOSP沙盒android 11
这里介绍一下aosp装系统 什么是aosp AOSP(Android Open Source Project)是Android操作系统的开源版本。 它由Google主导,提供了Android的源代码和相关工具,供开发者使用和修改。 AOSP包含了Android的核心组件和API,使…...
【JWT】Asp.Net Core中JWT刷新Token解决方案
Asp.Net Core中JWT刷新Token解决方案 前言方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status === 401,说明我们的token已经过期了。方案二:实现用户无感知的刷新token值,我们希望当响应返回的数据是401身份过期时,响应阻拦器自动帮我…...
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和工作学习方法 AJ-Report是一个基于Java的开源报表工具,它集成了ECharts、Ant Design Vue等前端技术,致力于为企业提供一站式的数据可视化解决方案…...
stm32不小心把SWD和JTAG都给关了,程序下载不进去,怎么办?
因为想用STM32F103的PA15引脚,调试程序的时候不小心把SWD和JTAD接口都给关了,先看下罪魁祸首 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关掉JTAG,不关SWGPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//关掉SW&am…...
【UE5】在材质中实现球形法线技术,常用于改善植物等表面的渲染效果
在材质中实现球形法线,这种技术常用于植被渲染等场景。通过应用球形法线可以显著提升植物再低几何体情况下的光照效果。 三二一上截图! 当然也可以用于任何你希望模型圆润的地方,下图中做了一个Cube倒角...
【MATLAB源码-第210期】基于matlab的OFDM电力线系统仿真,不同梳状导频间隔对比。三种信道估计,三种插值误码率对比
操作环境: MATLAB 2022a 1、算法描述 OFDM电力线通信系统(PLC)是一种通过电力线传输数据的通信技术,利用了OFDM(Orthogonal Frequency Division Multiplexing,正交频分复用)技术的优势来提高…...
基于SpringBoot的城镇保障性住房管理策略
3系统分析 3.1可行性分析 通过对本城镇保障性住房管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本城镇保障性住房管理系统采用SSM框架,JA…...
支持高性能结构化数据提取的 Embedding 模型——NuExtract-v1.5
NuExtract 是一个用户友好型模型,设计用于从长文档中提取信息。它可以处理长达 20,000 个标记的输入,是合同、报告和其他商业通信的理想选择。NuExtract 的与众不同之处在于它能够处理和理解文档的整个上下文。这意味着它可以捕捉到可能分散在长文本不同…...
【C#】设计一个选购计算机配置的应用程序
文章目录 1. 创建新的 Windows Forms 应用程序项目2. 设计界面2.1 添加控件和设置属性 3. 编写事件处理代码4. 运行和测试应用程序 1. 创建新的 Windows Forms 应用程序项目 打开 Visual Studio。选择“创建新项目”。在项目类型中选择“Windows Forms 应用程序”(…...
Python金融数据工程:构建高可靠股票数据管道的3种架构方案
Python金融数据工程:构建高可靠股票数据管道的3种架构方案 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在量化投资和金融数据分析领域,获取稳定、实时的股票数据是每个技…...
90% LVGL 新手踩大坑!分不清「父子控件」和「Python 子类」
上面我们说到了 LVGL 采用父子对象模型:所有 UI 元素都是 lv.obj 的子类,通过父子关系构建界面层级(屏幕 → 按钮 → 标签),这是新手最容易混淆的两个「父子 / 子类」概念。 首先要明确:LVGL 里的「父子对…...
JavaScript金融计算中的精度陷阱与高精度解决方案
1. 金融计算中的精度灾难:从0.10.2≠0.3说起 如果你在Chrome控制台输入0.1 0.2,得到的不是预期的0.3,而是0.30000000000000004这个诡异的数字。我第一次在支付系统对接时遇到这个问题,差点因为几分钱的差额导致整个对账流程崩溃。…...
Figma进阶协作与组件化实战
要系统掌握 Figma 的进阶功能,需要从协作、组件化、交互、变量化和设计系统等多个维度深入学习。这些功能共同构成了高效、专业设计工作流的核心。以下将结合具体操作和案例,详细解析关键进阶功能的使用方法。 一、高效协作与文件管理 Figma 的核心优势…...
腾讯云/阿里云服务器上,用娃娃一键端30分钟搞定DNF私服(附端口安全组避坑指南)
腾讯云/阿里云30分钟极速部署DNF私服全攻略:从安全组配置到五国启动 最近在游戏开发者社区里,不少朋友都在讨论如何在云服务器上快速搭建DNF私服体验服。作为一名长期混迹于各类游戏私服搭建的老玩家,我发现大多数教程要么过于专业化…...
BetterGI 0.38.1版本安装失败终极解决方案:从诊断到修复的完整指南
BetterGI 0.38.1版本安装失败终极解决方案:从诊断到修复的完整指南 【免费下载链接】better-genshin-impact 🍨BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动派遣 | 一键强化 - UI Automation Testi…...
RexUniNLU镜像免配置:预置中文分词增强模块,提升未登录词与新词识别率
RexUniNLU镜像免配置:预置中文分词增强模块,提升未登录词与新词识别率 1. 什么是RexUniNLU? RexUniNLU是一款基于Siamese-UIE架构的轻量级自然语言理解框架。它最大的特点是零样本学习能力——你不需要准备任何标注数据,只需要定…...
Jupyter Notebook内核崩溃?别急着重装!试试这个Anaconda环境修复方案
Jupyter Notebook内核崩溃?别急着重装!Anaconda环境修复全指南 当你正专注地编写代码,突然看到"内核似乎挂掉了,它很快将自动重启"的提示,那种挫败感我深有体会。作为数据科学工作者,Jupyter Not…...
open_clip技术解构:从核心原理到产业级应用
open_clip技术解构:从核心原理到产业级应用 【免费下载链接】open_clip An open source implementation of CLIP. 项目地址: https://gitcode.com/GitHub_Trending/op/open_clip 一、价值定位:重新定义多模态AI开发范式 核心问题:为什…...
让 Launchpad Designer 也拥有一致的 Fiori 登录体验:从 SICF 配置到版本差异的完整实战解析
在 SAP Fiori 项目里,很多团队把注意力都放在 Launchpad 本身的主题、磁贴、目录、目标映射和角色分配上,却很容易忽略一个看起来不起眼、实际上会直接影响运维效率和管理员体验的细节:Launchpad Designer 的登录页。官方文档明确说明,SAP Fiori 的登录页本质上是对标准 AB…...
