大数据平台发展及Hudi简要复习

第一代数据仓库——Vertica

最初,Uber使用MySQL作为他们的主要数据存储。然而,随着业务的扩展和数据量的增长,他们开始需要一个更强大的解决方案来进行大规模的数据分析和处理。

因此,Uber选择了Vertica作为他们的第一代数据仓库。Vertica是一个高性能的列式存储数据库,专为分布式大规模数据分析设计,能处理PB级别的数据,并支持SQL和许多BI工具。它为Uber的数据分析提供了更快、更强大的支持。(跟ClickHouse有点像)

目前Vertica国内用的很少,数据格式为JSON是比较低效的


第二代数据仓库——HBase

HBase是一个分布式、可扩展、支持大数据存储的NoSQL数据库,它是Google的BigTable的开源实现,作为Hadoop生态系统的一部分,HBase旨在提供高吞吐量的随机读写操作。HBase的核心特性包括水平可扩展性、列式存储、强一致性等。

在Uber的第二代数据仓库中,HBase被用作主要的数据存储和查询引擎,数据存储在HBase中,应用通过HBase的接口进行读写操作。同时,这个阶段的Uber还利用了Hadoop MapReduce等其他技术来进行数据处理和分析。

第二代底层优化为以HBase为中心,如上图所示,尽管HBase提供了大规模数据的随机读写能力,但是也存在小文件处理、增量更新能力不足的缺点。每次都是和原本的整个数据集做LEFT JOIN,每次都需要耗费几个小时用于更新数据集。

HBase本质上是一个Key-Value存储系统,它的设计并不是为了处理大量小文件,而是为了处理大量的大文件。此外,虽然HBase支持随机写入,但对于大规模的增量更新,特别是在处理大规模数据集的时候,这种更新操作可能需要花费相当长的时间。

特别是,在Uber的场景下,由于其业务的快速增长和对实时性的需求,HBase可能无法满足其所有的需求。这就是为什么Uber开始寻找更好的解决方案,并最终开发了Apache Hudi。


第三代数据仓库——Hudi

Hudi简介

Hudi是一个开源的大数据存储服务,它提供了更高效的增量处理能力,允许快速地更新和插入大数据集,这使得Uber可以更快速地处理数据并提供更实时的服务(通常是分钟级别的实时,而不是秒级的实时。秒级其实Hudi也能实现,但如果算秒的话,资源消耗就太大了)

Uber发现他们需要一个能支持实时和分析混合型工作负载的解决方案。这导致了他们创建Apache Hudi,一个为快速、增量数据管道而构建的分布式数据存储框架。通过使用Apache Hudi,Uber能够以接近实时的速度更新他们的数据仓库,并且提供更快的数据查询性能。其底层的数据集格式是Parquet。


Hudi架构 

  1. 数据流入与集成

    数据首先通过Kafka流入。Kafka是一个分布式流处理平台,它可以实时处理大量的事件数据。当数据事件在源系统中发生时,它们被发送到Kafka中,然后在此处进行缓冲。

  2. 存储与格式

    从Kafka接收的数据被转化并存储为Parquet格式。Parquet是一种列式存储格式,特别适用于分析查询。列式存储可以提供更好的压缩率并提高查询性能。(所以你看,大数据分析中,列式存储是多么常用与重要!)

  3. 实时变更与Hudi

    当新数据进入或现有数据发生变化时,我们不再需要重写整个Parquet文件。这时,Hudi(Apache Hudi)的作用显现出来。Hudi可以快速地将这些变更应用到现有的Parquet文件上,从而确保数据是最新的。Hudi还提供了一种机制,允许用户查询到一个特定时间点的数据版本,这在时间旅行查询或数据回滚中很有用。

  4. Change Log & 原信息

    当数据变更发生时,Hudi通过Change log来记录这些变化。这意味着,即使数据发生了更改,其历史版本的记录仍然可以被检索和访问。

  5. 底层存储

    尽管Hudi和Parquet提供了数据的逻辑视图和格式,但物理数据需要存储在某个地方。在云环境中,数据可以存储在云存储服务中,如Amazon S3或Google Cloud Storage。但在一般的学生项目中,数据直接存储在服务器的HDFS(Hadoop Distributed FileSystem)中,这是一个可扩展和分布式的文件系统,特别设计用于存储大规模数据。

  6. 计算层访问

    一旦数据被处理并存储,上游的计算层(如Spark, Hive或Presto)可以直接读取这些最新的数据,并进行相应的数据分析和处理。


Hudi组件 

总体来说,Hudi底层是支持列式和行式数据存储格式,列式用于优化读操作,行式优化写操作。我们将行式写操作通过compact转化为列式操作,这样就能快速实现查询。如果没有这种区分,就像Delta Lake一样,只有列式数据,我们的写操作就必须将原有的所有parquet数据取出然后再增量添加,这个就是Hudi和其他数据湖的最大的底层差别!

元数据维护数据当时存在的状态!


Hudi表类型 

COW表——写时复制

在新增结果之后,进行写时复制,没有改变的记录值都是从原有的文件中复制过来。这个和Delta Lake一样。

注意下面一行的 Snapshot 快照,一般情况下更改文件记录之后,原有的文件(比如File 0)不会立刻消失,而是作为待处理的文件,用于之后的复制。但是复制过后此时的Snapshot变成新的File0' 1' ,这样就会导致原有的File 0 File1虽然一般还是存在于磁盘中,但是已经无法被读取,File 0'和File 1'作为新的快照用于更新的文件的复制操作。(Incremental就是增量)


MOR表——读时合并 

这个MOR表还蛮有意思的,读时才合并,说明你不用每写一次就合并一次,本质上优化写操作,但是对读操作也有一点影响。从底层来看,就是将所有的更新updates追加到log日志文件中,不会立即更改记录(但是insert/delete确实需要立刻改变原本的File文件,上图中的insert F就能体现)等到最后某一时刻需要读实时信息时,就会将所有的updates与原本的parquet文件合并产生新的文件。虽然在这之前没有产生新的File,但是作者认为它处于时刻准备的阶段,这也就是为什么每次的快照都能同时更新到最新状态。

但是注意,像上面File 2'其实是没有update E'这一个Log的,因为在更改E的同时,F的增加一定会改变File2形成File 2',此时不需要再用Log存储E的改变,直接随着F的增加而更改到文件中也比较方便。

对于最后一行的Read optimized,在没有读操作的时候Read optimized为ABCDE,表示还没有合并当有读操作的时候(最右侧一列),此时读到的文件就是快照,而且完全转化为了列存的格式,就是这个意思。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode第369周赛

2917. 找出数组中的 K-or 值 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 nums 中的 K-or 是一个满足以下条件的非负整数: 只有在 nums 中,至少存在 k 个元素的第 i 位值为 1 ,那么 K-or 中的第 i 位的值才是 1 。 返回 nums …

2.数据结构-链表

概述 目标 链表的存储结构和特点链表的几种分类及各自的存储结构链表和数组的差异刷题(反转链表) 概念及存储结构 先来看一下动态数组 ArrayList 存在哪些弊端 插入,删除时间复杂度高需要一块连续的存储空间,对内存要求比较高,比如要申请…

NUXT前端服务端渲染技术框架

服务端渲染又称SSR(Server Side Render)实在服务端完成页面的内容,而不是在客户端通过AJAX获取数据 优势:更好的SEO,由于搜索引擎爬虫抓取工具可以直接查看完全渲染的页面 Nuxt.js是一个基于Vue.js的轻量级应用框架&a…

【WSL 2】Windows10 安装 WSL 2,并配合 Windows Terminal 和 VSCode 使用

【WSL 2】Windows10 安装 WSL 2,并配合 Windows Terminal 和 VSCode 使用 1 安装 Windows Terminal2 安装 WSL 23 在 Windows 文件资源管理器中打开 WSL 项目4 在 VSCode 中使用 WSL 24.1 必要准备4.2 从 VSCode 中 Connect WSL4.3 从 Linux 中打开 VSCode 1 安装 W…

计算机网络第3章-TCP协议(2)

TCP拥塞控制 TCP拥塞控制的三种方式: 慢启动、拥塞避免、快速恢复 慢启动 当一条TCP连接开始时,cwnd的值是一个很小的MSS值,这使得初始发送速率大约为MSS/RTT。 在慢启动状态,cwnd的值以1个MSS开始并且每当传输的报文段首次被…

塔望食观察丨从“一药难求”看国内退烧药品牌是怎样炼成的

随着新冠疫情防疫的全面放开,感染患者不断增多,市民在未知的恐慌中开启了囤药模式,药店中的“四类药”(退烧、止咳、抗病毒、抗生素类药品)被一抢而空,尤其是以退烧类药物更为短缺,以解热镇痛的…

贪心算法总结(未完结)

贪心的定义(摘自百度百科) 贪心算法(greedy algorithm,又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的…

4.2 SSAO算法 屏幕空间环境光遮蔽

一、SSAO介绍 AO 环境光遮蔽,全程Ambient Occlustion,是计算机图形学中的一种着色和渲染技术,模拟光线到达物体能力的粗略的全局方法,描述光线到达物体表面的能力。 SSAO 屏幕空间环境光遮蔽,全程 Screen Space Amb…

掌握组件缓存:解开Vue.js中<keep-alive>的奥秘

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【C++】搜索二叉树

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、搜索二叉树概念二、搜索二叉树的操作1.插入2. 查找3. 中序遍历4. 删除 三、默认成员函数1.析构函数2.拷贝构造3. 赋值运算符重载 四、完整代码 一、搜索二叉树概…

「实用技巧」后端如何使用 Eolink Apikit 快速调试接口?

程序员最讨厌的两件事: 写文档 别人不写文档 写文档、维护文档比较麻烦,而且费时,还会经常出现 API 更新了,但文档还是旧的,各种同步不一致的情况,从而耽搁彼此的时间,大多数开发人员不愿意写…

抽奖之星软件,可用作随机分组分班、比赛顺序抽签摇号

抽奖之星软件简介 抽奖之星,极品晚会抽奖软件,大气美观,功能全面,请安装试用或咨询客服。支持作弊内定、指定中奖人、名单分组、中奖几率。(www.wsgsoft.com/plds/) 比赛顺序抽签设置 奖项设置:只一个奖项即可&…

分享一下怎么做一个商城小程序

如何制作一个商城小程序:功能解析、设计思路与实现方法 一、引言 随着移动设备的普及和微信小程序的兴起,越来越多的消费者选择在商城小程序上进行购物。商城小程序具有便捷、高效、即用即走等特点,为企业提供了新的销售渠道和推广方式。本…

Kubernetes Taint(污点) 和 Toleration(容忍)

Author:rab 目录 前言一、Taint(污点)1.1 概述1.2 查看节点 Taint1.3 标记节点 Taint1.4 删除节点 Taint 二、Toleration(容忍) 前言 Kubernetes 中的污点(Taint)和容忍(Toleration…

学习笔记|正态分布|图形法|偏度和峰度|非参数检验法|《小白爱上SPSS》课程:SPSS第三讲 | 正态分布怎么检验?看这篇文章就够了

目录 学习目的软件版本原始文档为什么要假设它服从正态分布呢?t检验一、图形法1、频数分布直方图解读 2、正态Q-Q图操作解读 3、正态P-P图SPSS实战操作解读 二、偏度和峰度解读: 三、非参数检验法注意事项 四、规范表达五、小结划重点 学习目的 SPSS第三讲 | 正态…

Shopee流量和销量不佳?或许你没有掌握正确的引流方法

很多卖家做了很久,但是发现流量和销量都没怎么增长,今天陈哥就分享一下如何正确的引流。 以下是一些有效的引流策略: 1. 站内引流:选择高性价比的潮流商品,根据目标客户群和重点品类进行选品。优化商品名称和描述&am…

Power BI 傻瓜入门 18. 让您的数据熠熠生辉

本章内容包括: 配置Power BI以使数据增量刷新发现使用Power BI Desktop and Services保护数据集的方法在不影响性能和完整性的情况下管理海量数据集 如果有更新的、更相关的数据可用,旧数据对组织没有好处。而且,老实说,如果数据…

设计模式_观察者模式

观察者模式 介绍 设计模式定义案例问题堆积在哪里解决办法观察者是行为型设计模式 多个对象 观察 1个对象小强考试完 成绩公布了 家长/同学得知成绩后 做出不同反应一个一个通知很麻烦 先通知谁 也有讲究的 信息发布方 抽象出一个信息管理类 负责管理监听者 类图 代码 Obse…

学习视频剪辑:如何从指定时段快速抽出视频图片!高效技巧分享

随着数字媒体的普及,越来越多的人开始接触视频剪辑。在视频剪辑过程中,有时候我们需要从指定时段快速抽出视频图片。这不仅可以帮助我们提高剪辑效率,还可以让我们的视频更加丰富多彩。本文将分享一些高效技巧,帮助你轻松实现从指…

尚未解决:use_python()和use_virtualenv()的使用

reticulate包为Python和R之间的互操作性提供了一套全面的工具。该包包含以下功能: 以多种方式从R调用Python,包括RMarkdown、获取Python脚本、导入Python模块以及在R会话中交互使用Python。 R和Python对象之间的转换(例如,R和Pan…