【图解大数据技术】Hive、HBase
【图解大数据技术】Hive、HBase
- Hive
- 数据仓库
- Hive的执行流程
- Hive架构
- 数据导入Hive
- HBase
- HBase简介
- HBase架构
- HBase的列式存储
- HBase建表流程
- HBase数据写入流程
- HBase数据读取流程
Hive
Hive是基于Hadoop的一个数据仓库工具,Hive的数据存储在HDFS上,底层基于MapReduce进行数据计算。Hive将HDFS中结构化的数据文件映射成一张表,然后提供类SQL的查询功能,然后将SQL翻译成MapReduce并执行,可以解决海量结构化日志的统计查询。

数据仓库
数据仓库的作用是存储大量的历史数据,然后给各种BI报表、其他图形化界面或生成各种报告的系统提供数据分析统计的功能。

数据仓库的数据来源一般是各种业务系统的日志文件或者数据库的历史数据等,经过数据清洗后到导入到数据仓库。然后使用BI报表等各种非实时性的统计分析应用对数据仓库中的数据做统计分析。
数据仓库本质也是数据库,但是它和传统的关系型数据库还是有区别的。关系型数据库一般给业务系统对数据进行CRUD等OLTP操作,而数据仓库则更多的是给分析型应用进行OLAP操作。

而且关系型数据库一般不会存储大量的历史数据,而是存储近期某个时间范围内的业务数据;而数据仓库则会存储大量的历史数据。

Hive的执行流程

Hive内部封装了各种MapReduce模板,每个MapReduce都与一种SQL类型相对于。当客户端提交sql到hive执行时,hive会根据sql匹配出对应的MapReduce类型,然后执行MapReduce程序,获取返回结果,然后把返回结果返回给客户端。
Hive架构

大体架构和MySQL还是有几分相似。
- Client:客户端工具,比如CLI命令行工具,JDBC等。
- Metastore:存储Hive的元数据信息,比如表信息,表的列信息,还有表对应的数据在HDFS中的目录。
- 解析器:解析器解析sql为抽象语法树AST。
- 编译器:根据AST生成执行计划。
- 优化器:对执行计划进行优化。
- 执行器:根据执行计划生成相应的MapReduce并执行。
数据导入Hive

我们需要把数据导入到Hive中,使其在Hive中映射为表,才能通过Hive对数据进行统计分析。
导入的方式有好几种,可以是本地文件,HDFS文件,或者通过sqoop等类似的工具从其他数据源导入。

其中Sqoop是Hadoop和关系型数据库间的传输工具,比如可以把Mysql中的数据导入到Hive中。

HBase
HBase简介

HBase是一个用于存储海量非结构化或半结构化数据的列示存储数据库,支持高性能写入,准实时查询。
- HBase底层基于HDFS实现了PB级别的海量数据存储。
- 通过缓存和预写日志技术实现了高性能写入和低延迟查询。
- 通过Zookeeper的监控通知HMaster故障转移实现了高可靠性。
- 通HMaster接收RegionServer注册以及HMaster的RegionServer集群负载均衡能力实现高扩展性。
HBase架构
HBase的架构与组件间的关系如下图:

大体由Client、Zookeeper、HMaster、HRegionServer四个角色组成,加上HDFS就是五个。
Client会通过zk读取meta表Region所在的位置,然后请求对应该Region所在RegionServer获取元数据信息,然后通过元数据得知目标Region所在位置,再对目标Region所在RegionServer发起读写操作。
HRegionServer负责数据的存储和处理客户端的读写请求。HRegionServer中有多个HRegion,每个Region对应一个表的一个分片,Region中又有多个Store,每个Stroe对应表中一个列族。然后Stroe中有一个MemStore是Store的缓存,会缓存客户端读写的数据。StoreFile封装了HFile,HFile通过HDFS客户端工具把具有一定格式的文件数据写入到HDFS中。HLog是预写日志,当HRegionServer接收到客户端的写请求时,把数据存储到MemStore中,然后在HLog中记录日志,由于HLog是顺序写,速度很快。
HRegionServer启动时向HMaster注册,HMaster接收HRegionServer的注册并进行HRegionServer的数据存储的负载均衡;HMaster接收到Zookeeper发来的某个HRegionServer故障的通知后,负责HRegionServer的故障转移;HMaster接收到Client的建表请求后,写入元数据到meta表对应的Region,然后记录Region所在位置的HRegionServer到Zookeeper。
Zookeeper负责监控HMaster和HRegionServer,保证它们的高可用;当HRegionServer故障时会通知HMaster;Zookeeper还存储meta表Region的位置,Client可以通过Zookeeper得知meta表Region所在的HRegionServer。
HBase的列式存储

- RowKey:相当于是MySQL中的主键,表中的数据根据RowKey进行排序;我们可以通过RowKey查询指定的某一行或进行范围查询。
- ColumnFamily:列族,在建表的时候需要预先声明列族,一个列族对应一个物理文件。
- Column:列,列无需在建表的时候预先指定,可以随意增加;并且查询的时候可以指定列名进行查询。
timestamp:时间戳,同一个RowKey的不同版本的数据。
HBase建表流程

- Client通过rpc调用HMaster进行表创建。
- HMaster根据集群存储情况确定一个RegionServer存储新建表的数据,然后通知该RegionServer创建Region。
- HMaster把表的元数据信息写入meta表对应的Region中;同时如果该Region是新建的话,会在zk中更新meta表所在位置的信息。
HBase数据写入流程

- Client通过ZK得知meta表所在位置。
- Client访问meta表对应的Region,获取目标用户表的元数据,得知该表数据存储在哪个Region上。
- Client访问目标Region写入数据。
- 数据写入MemStore并记录HLog日志,当MemStore达到阈值后才会flush到StoreFile中,StoreFile通过HFile把数据写入到HDFS。
HBase数据读取流程

- Client通过ZK得知meta表所在位置。
- Client访问meta表对应的Region,获取目标用户表的元数据,得知该表数据存储在哪个Region上。
- Client访问目标Region读取数据,先尝试从MemStore中读取要查询的数据,如果没有再从BlockCache中读取(BlockCache存储了之前查询返回的数据),还是没有那就要通过HFile从HDFS中取了。
相关文章:
【图解大数据技术】Hive、HBase
【图解大数据技术】Hive、HBase Hive数据仓库Hive的执行流程Hive架构数据导入Hive HBaseHBase简介HBase架构HBase的列式存储HBase建表流程HBase数据写入流程HBase数据读取流程 Hive Hive是基于Hadoop的一个数据仓库工具,Hive的数据存储在HDFS上,底层基于…...
composables 目录下的文件(web前端)
composables 目录通常用于存放可组合的函数或逻辑,这些函数或逻辑可以在不同的组件中复用。具体来说,composables 目录下的文件通常包含以下内容: 组合式函数 (Composable Functions): 这些函数利用 Vue 3 的组合式 API࿰…...
使用Python绘制堆积柱形图
使用Python绘制堆积柱形图 堆积柱形图效果代码 堆积柱形图 堆积柱形图(Stacked Bar Chart)是一种数据可视化图表,用于显示不同类别的数值在某一变量上的累积情况。每一个柱状条显示多个子类别的数值,子类别的数值在柱状条上堆积在…...
DP:二维费用背包问题
文章目录 🎵二维费用背包问题🎶引言🎶问题定义🎶动态规划思想🎶状态定义和状态转移方程🎶初始条件和边界情况 🎵例题🎶1.一和零🎶2.盈利计划 🎵总结 …...
C语言标准库中的函数
由于C语言标准库中的函数非常多,我将按类别列出一些常见函数及其作用。请注意,这里不可能列出所有函数,但我会尽量覆盖主要的类别和函数。 ### 标准输入输出 - printf: 格式化输出到标准输出(通常是屏幕)。 - scanf: …...
Qt5.9.9 关于界面拖动导致QModbusRTU(QModbusTCP没有测试过)离线的问题
问题锁定 参考网友的思路: Qt5.9 Modbus request timeout 0x5异常解决 网友认为是Qt的bug, 我也认同;网友认为可以更新模块, 我也认同, 我也编译了Qt5.15.0的code并成功安装到Qt5.9.9中进行使用,界面拖…...
API的定义理解
前言 在程序员的日常工作中,“API”这个词在程序员的口中重复的次数,绝对是名列前茅的。 但是对刚开始工作的新人来说,API这个概念还是比较模糊。 确实,API这个概念是随着语义环境而不一样的,所以会让人迷惑。 下面…...
启航IT之旅:高考假期预习指南
标题:启航IT之旅:高考假期预习指南 随着高考的落幕,许多有志于IT领域的学子们即将踏上新的学习旅程。这个假期,是他们探索IT世界的黄金时期。本文将为准IT新生们提供一份全面的预习指南,帮助他们为未来的学习和职业生…...
HarmonyOS开发:循环渲染ForEach
需求: 创建多个列表组件,并实现点赞功能 语言: ArkTS 平台: DevEco Studio ForEach 接口描述 ForEach( arr: Array, itemGenerator: (item: Object, index: number) > void, keyGenerator?: (item: Object, index: number) &…...
构建工程化:多种不同的工程体系如何编写MakeFile
源码分析 核心MakeFile 这个 Makefile 是一个复杂的构建脚本,用于管理和构建一个大型项目。它包括多个目标、条件判断和递归调用 make 命令来处理多个子项目和子目录。让我们逐部分进行详细解析。 伪目标和变量定义 .PHONY: all clean install build test init.…...
聚焦从业人员疏散逃生避险意识能力提升,推动生产经营单位每年至少组织开展(疏散逃生演练,让全体从业人员熟知逃生通道、安全出口及应急处置要求,形成常态化机制。
聚焦从业人员疏散逃生避险意识能力提升,推动生产经营单位每年至少组织开展(疏散逃生演练,让全体从业人员熟知逃生通道、安全出口及应急处置要求,形成常态化机制。完整试题答案查看 A.三次B.两次C.一次 综合运用“四不两直”、明察暗访、 ()、…...
【手机取证】如何使用360加固助手给apk加固
文章关键词:手机取证、电子数据取证、数据恢复 一、前言 APP加固是对APP代码逻辑的一种保护。原理是将应用文件进行某种形式的转换,包括不限于隐藏,混淆,加密等操作,进一步保护软件的利益不受损坏,下面给…...
Vue的介绍
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
MySql数据库常用指令合集
MySql数据库常用指令合集 一、创建数据库db11.创建表 字段---表头 student_no,username,sex2.新增单条插入多条插入3.删除4.更新5.查询5.1.查询该表全部信息5.2.查询该表中username,并且要求名字为zhangsan性别女,还可以用(or) 6.…...
ArcGIS Pro SDK (七)编辑 13 注解
ArcGIS Pro SDK (七)编辑 13 注解 文章目录 ArcGIS Pro SDK (七)编辑 13 注解1 注释构建工具2 以编程方式启动编辑批注3 更新批注文本4 修改批注形状5 修改批注文本图形6 接地到网格 环境:Visual Studio 2022 .NET6 …...
模拟面试001-Java开发工程师+简历+问题+回答
模拟面试001-Java开发工程师简历问题回答 目录 模拟面试001-Java开发工程师简历问题回答面试简历面试官题问求职者回答1. 关于Java编程和技术栈2. 关于XX在线购物平台项目3. 关于XX企业资源规划系统项目4. 团队协作与项目管理5. 个人发展与职业规划 参考资料 面试简历 **个人信…...
微信小程序 ——入门介绍及简单的小程序编写
目录 一、小程序入门 1.1 什么是小程序 1.2 小程序的优点 1.3 小程序注册 1.4 安装开发工具 1.5 创建第一个小程序 二、小程序目录结构及入门案例 2.1 目录结构 2.2 入门案例 2.2.1 创建界面 2.2.2 设置标题 2.2.3 编写WXML文件 2.2.4 编写JS文件 2.2.5 编写WXSS…...
ubuntu20.04安装lio-sam
1、依赖功能包安装 sudo apt install ros-noetic-robot-state-publisher sudo apt-get install ros-noetic-robot-localization libmetis-dev 2、boost版本 boost版本查看:cat /usr/include/boost/version.hpp | grep "BOOST_LIB_VERSION" boost版本为1.…...
Kafka系列之Kafka知识超强总结
一、Kafka简介 Kafka是什么 Kafka是一种高吞吐量的分布式发布订阅消息系统(消息引擎系统),它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览, 搜索和其他用户的行动)是在现代网络上的许多社…...
第32讲:K8S集群与Cephfs文件系统集成
文章目录 1.在K8S环境下RBD与Cephfs的使用对比2.Cephfs环境介绍3.在Ceph集群中为K8S创建单独Cephfs文件系统和认证用户3.1.创建一个K8S使用的Cephfs文件系统3.2.将创建的Cephfs文件系统挂载到本地路径3.3.创建K8S连接Ceph集群使用的认证用户 4.K8S PV存储卷使用Cephfs文件系统4…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
