Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
实时方案之数据湖探究调研笔记_创想鸟

实时方案之数据湖探究调研笔记

数据湖是当前备受关注的一个概念,许多企业正在构建或计划构建自己的数据湖。在启动数据湖项目之前,理解数据湖的本质,明确数据湖项目的基本组成,并设计出数据湖的基本架构,对于成功构建数据湖至关重要。关于数据湖的定义,存在多种解释。

维基百科指出,数据湖是一种系统或存储仓库,用于以自然或原始格式存储数据,通常是对象块或文件。这包括原始系统生成的原始数据拷贝以及为各种任务转换而生成的数据,如关系数据库中的结构化数据(行和列)、半结构化数据(如CSV、日志、XML、JSON)、非结构化数据(如电子邮件、文档、PDF等)和二进制数据(如图像、音频、视频)。

AWS定义数据湖为一个集中式的存储库,允许以任意规模存储所有结构化和非结构化数据。

微软的定义较为模糊,并未直接定义数据湖,而是通过描述其功能来定义。数据湖包括所有使得开发者、数据科学家、分析师能够更简单地存储、处理数据的能力。这些能力使得用户能够存储任意规模、任意类型、任意生成速度的数据,并跨平台、跨语言进行各种类型的分析和处理。

关于数据湖的定义虽然众多,但基本上都围绕以下几个特性展开:

数据湖需要提供足够的数据存储能力,保存一个企业/组织的所有数据。数据湖可以存储海量的任意类型的数据,包括结构化、半结构化和非结构化数据。数据湖中的数据是原始数据,是业务数据的完整副本,保持了它们在业务系统中的原始状态。数据湖需要具备完善的数据管理能力(完善的元数据),可以管理数据源、数据格式、连接信息、数据schema、权限管理等要素。数据湖需要具备多样化的分析能力,包括但不限于批处理、流式计算、交互式分析以及机器学习,同时需要提供任务调度和管理能力。数据湖需要具备完善的数据生命周期管理能力,不仅存储原始数据,还能保存各种分析处理的中间结果,并完整记录数据的分析处理过程,帮助用户追溯任意一条数据的产生过程。数据湖需要具备完善的数据获取和数据发布能力,支持各种数据源,获取全量/增量数据,并规范存储,推送分析处理结果到合适的存储引擎,满足不同的应用访问需求。对于大数据的支持,包括超大规模存储以及可扩展的大规模数据处理能力。

综上所述,个人认为数据湖应该是一种不断演进、可扩展的大数据存储、处理、分析的基础设施,以数据为导向,实现任意来源、任意速度、任意规模、任意类型数据的全量获取、全量存储、多模式处理与全生命周期管理,并通过与各类外部异构数据源的交互集成,支持各类企业级应用。

数据湖调研1、Iceberg

Iceberg作为新兴的数据湖框架之一,开创性地抽象出“表格式”(table format)这一中间层,既独立于上层的计算引擎(如Spark和Flink)和查询引擎(如Hive和Presto),也与下层的文件格式(如Parquet,ORC和Avro)解耦。

实时方案之数据湖探究调研笔记

此外,Iceberg还提供了许多额外的能力:

ACID事务时间旅行(time travel),以访问之前版本的数据完备的自定义类型、分区方式和操作的抽象列和分区方式可以进化,而且进化对用户无感,即无需重新组织或变更数据文件隐式分区,使SQL不用针对分区方式特殊优化面向云存储的优化等

Iceberg的架构和实现并未绑定于某一特定引擎,它实现了通用的数据组织格式,利用此格式可以方便地与不同引擎(如Flink、Hive、Spark)对接。因此,Iceberg的架构更加优雅,对于数据格式、类型系统有完备的定义和可进化的设计。

但是,Iceberg缺少行级更新、删除能力,这两大能力是现有数据组织最大的卖点,社区仍在优化中。

2、Hudi

Hudi通常用来将大量数据存储到HDFS/S3,新数据增量写入,而旧数据鲜有改动,特别是在经过数据清洗后放入数据仓库的场景。

在数据仓库如Hive中,对于update的支持非常有限,计算昂贵。

另一方面,若是有仅对某段时间内新增数据进行分析的场景,则Hive、Presto、HBase等也未提供原生方式,而是需要根据时间戳进行过滤分析。

Apache Hudi代表Hadoop Upserts and Incrementals,能够使HDFS数据集在分钟级的时延内支持变更,也支持下游系统对这个数据集的增量处理。

Hudi数据集通过自定义的inputFormat兼容当前Hadoop生态系统,包括Apache Hive,Apache Parquet,Presto和Apache Spark,使得终端用户可以无缝对接。

实时方案之数据湖探究调研笔记

Hudi存储的架构如下图所示:

实时方案之数据湖探究调研笔记

如上图,最下面有一个时间轴,这是Hudi的核心。Hudi会维护一个时间轴,在每次执行操作时(如写入、删除、合并等),均会带有一个时间戳。通过时间轴,可以实现仅查询某个时间点之后成功提交的数据,或是仅查询某个时间点之前的数据。这样可以避免扫描更大的时间范围,并非常高效地只消费更改过的文件(例如在某个时间点提交了更改操作后,仅query某个时间点之前的数据,则仍可以query修改前的数据)。

如上图的左边,Hudi将数据集组织到与Hive表非常相似的基本路径下的目录结构中。数据集分为多个分区,每个分区均由相对于基本路径的分区路径唯一标识。

如上图的中间部分,Hudi以两种不同的存储格式存储所有摄取的数据:

读优化的列存格式(ROFormat):仅使用列式文件(parquet)存储数据。在写入/更新数据时,直接同步合并原文件,生成新版本的基文件(需要重写整个列数据文件,即使只有一个字节的新数据被提交)。此存储类型下,写入数据非常昂贵,而读取的成本没有增加,所以适合频繁读的工作负载,因为数据集的最新版本在列式文件中始终可用,以进行高效的查询。写优化的行存格式(WOFormat):使用列式(parquet)与行式(avro)文件组合,进行数据存储。在更新记录时,更新到增量文件中(avro),然后进行异步(或同步)的compaction,创建列式文件(parquet)的新版本。此存储类型适合频繁写的工作负载,因为新记录是以appending的模式写入增量文件中。但是在读取数据集时,需要将增量文件与旧文件进行合并,生成列式文件。

3、DeltaLake

传统的lambda架构需要同时维护批处理和流处理两套系统,资源消耗大,维护复杂。基于Hive的数仓或者传统的文件存储格式(比如parquet/ORC),都存在一些难以解决的问题:

小文件问题并发读写问题有限的更新支持海量元数据(例如分区)导致metastore不堪重负

实时方案之数据湖探究调研笔记

如上图,Delta Lake是Spark计算框架和存储系统之间带有Schema信息的存储中间层。它有一些重要的特性:

设计了基于HDFS存储的元数据系统,解决metastore不堪重负的问题;支持更多种类的更新模式,比如Merge/Update/Delete等操作,配合流式写入或者读取的支持,让实时数据湖变得水到渠成;流批操作可以共享同一张表;版本概念,可以随时回溯,避免一次误操作或者代码逻辑而无法恢复的灾难性后果。

Delta Lake是基于Parquet的存储层,所有的数据都是使用Parquet来存储,能够利用parquet原生高效的压缩和编码方案。

Delta Lake在多并发写入之间提供ACID事务保证。每次写入都是一个事务,并且在事务日志中记录了写入的序列顺序。事务日志跟踪文件级别的写入并使用乐观并发控制,这非常适合数据湖,因为多次写入/修改相同的文件很少发生。在存在冲突的情况下,Delta Lake会抛出并发修改异常以便用户能够处理它们并重试其作业。

Delta Lake其实只是一个Lib库,不是一个service,不需要单独部署,而是直接依附于计算引擎的,但目前只支持Spark引擎,使用过程中和parquet唯一的区别是把format parquet换成delta即可,可谓是部署和使用成本极低。

4、数据湖技术比较

实时方案之数据湖探究调研笔记实时方案之数据湖探究调研笔记

总结

实时方案之数据湖探究调研笔记实时方案之数据湖探究调研笔记

以上就是实时方案之数据湖探究调研笔记的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/49481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小红书账号封禁了怎么办_小红书账号解封处理方法
上一篇 2025年11月8日 12:20:41
掌握异常处理:最佳实践和常见陷阱
下一篇 2025年11月8日 12:20:45

相关推荐

  • 小说免费阅读网站推荐 全集小说免费在线阅读网官方地址

    为了解决广大书迷寻找免费阅读资源的烦恼,本文精选了几个资源丰富、体验良好的在线小说网站。这些平台提供了海量全集作品,让你无需付费即可轻松追更,畅享阅读的乐趣。 直接观看“☞☞☞☞☞点击小说免费阅读网站首页直达☜☜☜☜☜”; 直接观看“☞☞☞☞☞点击海内外小说、漫画观看APP合集☜☜☜☜☜”; 一、笔…

    2026年9月23日
    000
  • Java ListIterator如何实现双向遍历

    Java中的ListIterator接口支持双向遍历,即可以从前往后,也可以从后往前遍历列表。这与普通的Iterator只能单向向后遍历不同。ListIterator提供了更灵活的操作方式,特别适用于需要反向访问或在遍历过程中修改列表的场景。 1. ListIterator的基本特性 ListIte…

    2026年9月22日
    100
  • 解决TCPDF保存文件权限问题的完整指南

    本文旨在解决使用tcpdf在%ignore_a_1%中生成pdf并保存到服务器(’f’模式)时遇到的“permission denied”错误,尤其是在macos环境下。核心问题通常源于不正确的服务器文件路径或目标文件夹缺乏写入权限。教程将详细阐述如何构建正确的绝对文件路径,…

    2026年9月22日
    200
  • mysql怎么添加前缀索引 mysql创建前缀索引的长度选择

    mysql怎么添加前缀索引 mysql创建前缀索引的长度选择mysql怎么添加前缀索引 mysql创建前缀索引的长度选择mysql怎么添加前缀索引 mysql创建前缀索引的长度选择mysql怎么添加前缀索引 mysql创建前缀索引的长度选择

    在mysql中,为长字符串列添加前缀索引的核心目的是优化查询性能并节省存储空间。1. 前缀索引通过仅索引列值的前n个字符实现这一目标;2. 前缀长度的选择需在区分度与存储效率之间取得平衡,理想长度应确保高区分度(如90%以上)且不过度冗余;3. 可通过执行select count(distinct …

    2026年9月22日 用户投稿
    100
  • 抖音企业号怎么绑定员工号?绑定员工号有哪些好处?

    抖音企业号绑定员工账号是优化团队协作与提升运营效率的重要方式。通过官方流程,企业可将员工的个人抖音号与企业主体进行关联,实现权限分配与协同管理。 一、如何绑定抖音企业号员工号? 准备前提条件:确保企业号已完成企业认证,且员工所使用的抖音账号处于正常使用状态。管理员需准备好营业执照、员工身份资料等信息…

    2026年9月22日
    000
  • PHPRestfulAPI怎么开发_PHP构建高效安全的RestfulAPI教程

    答案:本文介绍如何用PHP构建高效安全的Restful API,涵盖设计规范、项目结构、数据库操作、安全机制、统一响应格式及性能优化。遵循Restful风格使用标准HTTP方法与状态码,通过index.php统一入口路由请求至控制器;采用PDO预处理防止SQL注入,结合JWT实现认证授权,确保输入验…

    2026年9月22日
    100
  • CentOS7搭建个人站点

    CentOS7搭建个人站点CentOS7搭建个人站点CentOS7搭建个人站点CentOS7搭建个人站点

    在本文中,我们将指导您在centos7系统上使用httpd搭建个人网站。httpd是apache http服务器的主程序,设计为一个独立运行的后台进程,负责建立处理请求的子进程或线程池。 首先,我们需要通过rpm命令检查系统中是否已安装httpd: rpm -qa | grep httpd 如果执行…

    2026年9月22日 用户投稿
    200
  • MAC的“自动操作”(Automator)怎么用_macOS自动操作创建快速工作流程

    使用Automator可创建自动化工作流程,通过选择“工作流程”并添加操作实现任务串联,保存为“快速操作”或“应用程序”便于调用,结合日历设置定时执行,并可嵌入Shell脚本扩展功能,提升Mac操作效率。 如果您希望在日常操作中提升效率,可以通过自动化重复性任务来节省时间。MAC的“自动操作”(Au…

    2026年9月22日
    000
  • Java TreeMap如何自定义排序规则

    TreeMap默认按键的自然顺序排序,可通过构造函数传入Comparator自定义排序规则。例如字符串可按长度排序:TreeMap map = new TreeMap((s1, s2) -> s1.length() – s2.length()); 对自定义对象如Person可按年龄…

    2026年9月22日
    000
  • PHP递增操作符在条件语句中的应用_PHP条件判断与递增结合实践

    前置递增(++$i)先加1后返回新值,后置递增($i++)先返回原值再加1,影响条件判断结果;如$i=5时if($i++>5)不成立,因判断用的是5,之后$i变为6;循环中常见$count++控制次数,但复杂表达式如$a++&&$b++虽合法却降低可读性,应拆分以提升维护性;实…

    2026年9月22日
    200
  • 如何在MiniToolMovieMaker中编辑AI视频?免费AI视频剪辑的教程

    如何在MiniToolMovieMaker中编辑AI视频?免费AI视频剪辑的教程如何在MiniToolMovieMaker中编辑AI视频?免费AI视频剪辑的教程如何在MiniToolMovieMaker中编辑AI视频?免费AI视频剪辑的教程如何在MiniToolMovieMaker中编辑AI视频?免费AI视频剪辑的教程

    MiniTool MovieMaker虽无AI生成功能,但可高效编辑AI生成的MP4、MOV等格式视频或图片序列。通过导入素材后,利用其剪辑、过渡、滤镜、文字、音频处理等功能,实现AI片段的精剪、色彩统一、无缝衔接与风格化输出。支持主流视频、图片及音频格式,兼容性好,适合个人创作者进行AI内容后期整…

    2026年9月22日 用户投稿
    600
  • 华为MateView 32对决戴尔U3223QE:专业级显示器的色彩与护眼之战,为谁的眼睛买单更值?

    华为MateView 32侧重生态协同与竖屏效率,戴尔U3223QE强在高对比度面板与扩展性,选择取决于设备生态及工作需求。 华为MateView 32和戴尔U3223QE都是定位高端的专业显示器,但设计思路和侧重点有所不同。选哪款更“值”,关键看你的工作场景、设备生态和对特定功能的重视程度。它们在…

    2026年9月22日
    100
  • 在 Linux 中如何强制停止进程?kill 和 killall 命令有什么区别?

    在日常工作中,您可能会遇到两个用于在 linux 中强制结束程序的命令:kill和killall。虽然许多 linux 用户熟悉kill命令,但使用killall命令的人相对较少。尽管这两个命令名称相似且目的相同(终止进程),但它们在使用方式和效果上有显著区别。 那么,kill和killall之间有…

    2026年9月22日
    200
  • PHP三元运算符复杂条件_PHP三元运算符多条件处理

    三元运算符可通过逻辑运算符或嵌套实现多条件判断,如链式写法 $result = ($a > 5 && $b == 90) ? ‘优秀’ : $score >= 80 ? ‘良好’ : $score >= 60 ? &#…

    2026年9月22日
    100
  • PHP匿名函数怎么用_PHP匿名函数使用场景分析

    PHP匿名函数是无名函数,可作为回调或赋值给变量,常用在数组处理、事件回调、逻辑封装等场景,支持use引入外部变量及fn短语法,结合bindTo可访问对象私有成员。 PHP匿名函数,也叫闭包函数(Closure),是一种没有名称的函数,通常作为回调使用或赋值给变量。它在实际开发中非常灵活,尤其适合用…

    2026年9月22日
    200
  • 中国联通正式获得开展 eSIM 手机运营服务商用试验的批复

    感谢网友 会弹琴的九号、学士 的线索投递! 10月13日,三大运营商官方微信号相继发布消息,宣告eSIM服务进入新阶段。其中,中国联通于当日上午10:00率先发布推文《抢约!联通eSIM来了!》,动作迅速,展现出强烈的市场积极性;中国移动在傍晚19:29发布《中国移动全面上线eSIM手机办理》;而中…

    2026年9月22日
    200
  • mysql怎么使用全文索引 mysql创建全文索引的配置方法

    mysql怎么使用全文索引 mysql创建全文索引的配置方法mysql怎么使用全文索引 mysql创建全文索引的配置方法mysql怎么使用全文索引 mysql创建全文索引的配置方法mysql怎么使用全文索引 mysql创建全文索引的配置方法

    mysql使用全文索引的核心是让数据库像搜索引擎一样理解并高效检索文本内容。1. 创建全文索引:可在建表时或之后通过alter table语句为char、varchar或text字段添加fulltext索引;2. 使用match against查询:支持自然语言模式(自动过滤停用词并按相关性排序)和…

    2026年9月22日 用户投稿
    200
  • 在Java中如何统计List中元素出现次数

    答案是使用Map或Stream API统计List元素频次最高效。通过HashMap手动遍历统计,或用Java 8的Stream结合groupingBy和counting()实现简洁计数,Collections.frequency适用于小数据量但性能较差,推荐Stream方式兼顾性能与可读性。 在J…

    2026年9月22日
    900
  • Java中如何区分逻辑错误和系统异常

    系统异常是程序运行中由JVM抛出的RuntimeException,如空指针、数组越界,会导致程序中断并打印堆栈;逻辑错误是程序语法正确但结果不符预期,如条件写反、循环次数错误,不会崩溃但行为异常。两者区别在于是否抛出异常、是否中断执行及调试方式不同,需通过防御性编程、单元测试和日志调试加以防范。 …

    2026年9月22日
    100
  • PHP一键环境如何设置网站域名解析_本地域名解析配置

    配置本地域名需修改hosts文件并设置Web服务器虚拟主机。1. 在hosts添加“127.0.0.1 myproject.test”实现域名解析;2. Apache中编辑httpd-vhosts.conf添加VirtualHost指向项目目录,确保加载该配置文件后重启服务;3. Nginx中在vh…

    2026年9月22日
    700

发表回复

登录后才能评论
关注微信