热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

企业为什么要用数据湖,华为数据湖架构

写在前面本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和文献引用请见100个问题搞定


我刚才写的这篇文章属于专栏《100个问题搞定大数据理论体系》。 这个专栏是笔者原创的。 引用请注明来源。 不足和错误请在评论区指出。 谢谢你。


本专栏的目录结构和文献引用请参考100个解决问题的大数据理论体系


求解Lambda体系结构作为一种模型,提供了在大型数据集上运行高级可伸缩性和高性能分布式计算的方法,最终为批处理和几乎实时处理提供了一致的数据。 Lambda体系结构定义了水平可扩展体系结构的实现方式和手段,以应对企业中的各种数据负载,延迟预期较低。 Lambda模式模型是通过将整个模式划分为多个功能模块/层(layer )来实现的。 是数据取入层、批处理层、高速处理层、数据存储层、服务层、数据获取层、消息层。 数据湖的功能模块如图所示。


补充数据捕获层是Lambda架构模型中的重要层之一,因为它一个接一个地接收数据以处理和存储高速数据捕获层。 在此级别,必须控制将数据快速传递到Lambda体系结构的工作模型。


重要功能此层必须能够满足各种需求,并具有可根据各种负载情况进行扩展的高可扩展性。 此层需要容错能力、系统可靠性和故障转移功能。 层必须支持多线程和多事件处理。 层必须能够将Lambda体系结构处理层所需的导入数据的结构快速转换为目标数据格式。 该层必须确保在下一步中以最纯的形式处理所有提供的数据。 批量级提取数据批量处理的批量级(batch layer )是在Lambda架构中批量处理提取数据以确保系统资源的最佳使用的级别,同时将长时间执行的操作应用于数据,从而输出数据输出数据也称为“模型数据”。


将原始数据转换为模型数据是批处理层的主要作用,包括Lambda架构的服务层(serving layer )向外部提供数据的数据模型。


重要功能此层必须能够在传入的原始数据上执行数据清理、数据处理和数据建模算法。 此层必须提供重新执行特定操作以进行故障恢复的机制。 为了生成高质量的模型数据,该层必须支持在捕获的原始数据上运行机器学习算法或数据科学处理。 在此级别,可能需要执行一些附加操作,以通过删除重复数据、检测错误数据和提供数据序列视图来提高模型数据的整体质量。 高速处理层1对1的接近实时数据处理高速处理层(speed layer )对从数据取入层接收到的数据执行接近实时处理。 由于处理预期几乎是实时的,因此这些数据的处理必须快速高效,支持高并发场景,设计良好,最终生成满足一致要求的输出结果。


关键功能必须支持在特定数据流上的快速操作。 需要能够生成几乎满足实时处理需要的数据模型。 所有需要长时间执行的处理都必须委托给批处理模式。 需要快速访问和存储层支持,并且处理能力要求避免事件堆栈。 必须与数据摄取层的批处理分离。 必须与批处理生成的数据集集成,以生成能够提供更高级企业数据的输出模型。 数据存储层在一个Lambda体系结构模型中存储所有数据,数据存储层(data storage layer )备受关注。 这是为了定义整个解决方案如何对传入事件/数据流作出反应。


从体系结构常识可以看出,一个系统的速度最多与处理链中最慢的子系统相同,因此如果存储层不够快,在接近实时的处理层上执行的操作就会变慢,从而妨碍获得接近实时的效果


在Lambda的整体架构中,对导入的数据几乎有两种主动操作:批处理和实时处理。 批处理和几乎实时处理的数据需求差别很大。


例如,在许多情况下,批处理模式需要执行串行读取和串行写入。 在这种情况下,使用Hadoop存储层就足够了,但如果考虑进行接近实时的处理,需要快速搜索和快速写入,Hadoop存储层可能就不合适了(见下表)。


为了几乎支持实时处理,数据层必须支持特定类型的索引数据存储。


批处理几乎实时处理串行写入和串行读取操作,高速写入的Hadoop存储层不像Hadoop存储层那么重要,它支持串行读取和随机读取。 根据用户使用情况提供适当的分层解决方案。 支持在批量模式或实时模式下处理大容量数据。 以灵活、可扩展的方式支持多种数据结构的存储。 服务层的每一个数据分发和导出Lambda体系结构也强调了为消费者计划提供数据传输服务的重要性。


众所周知,数据可以通过多种方式在系统之间传递。 其中最重要的方法之一是通过服务(service )传递。 在数据湖背景下,传输数据是主要功能,因此这些服务被称为数据服务(data service )。


另一种数据传输方法是数据提取(export )。 最后,数据可以导出为多种格式,包括消息、文件和数据备份,导出的数据将被其他系统占用。


数据传输/服务侧重于如何将数据转换为预期格式。 该格式可以在数据服务对外提供服务时被强制约定为数据合约。


但是,在执行数据传输操作时,将批量处理和几乎实时处理生成的数据结合起来很重要。 因为这些数据可能包含与组织相关的重要信息。


数据服务层必须确保数据和数据合同(与消费者计划的约定)的一致性。


主要功能有多种支持

机制为消费者程序提供数据服务。每种支持数据服务的机制,必须与消费者程序的数据契约兼容。支持批量处理及近实时处理数据视图的合并。为消费者程序提供可扩展、快速响应的数据服务。

因为数据服务层的核心职责是向数据湖以外的消费者提供数据服务,出于增强数据表现的考虑,该层可能会选择性地进行数据合并。

数据获取层一一从源系统获取数据

企业中数据格式多种多样,可大致分为结构化数据、半结构化数据和非结构化数据。

结构化数据的常见例子包括关系数据库、XML/JSON、系统间传递的消息等。

企业也非常青睐半结构化数据,尤其是E-Mail、聊天记录、文档等。

非结构化数据的典型例子包括图片、视频、原始文本、音频文件等。

对于这些类型的数据,部分数据可能无法对其定义模式( schema)。需要将数据转换为有意义的信息时,模式是非常重要的。

为结构化数据定义模式的方法非常直接,但是无法为半结构化数据或非结构化数据定义模式。

数据获取层的一个关键作用是将数据转换为在数据湖中可进行后续处理的消息

因此数据获取层必须非常灵活,能适应多种数据模式。同时,它也必须支持快速的连接机制,无缝地推送所有转换过的数据消息到数据湖中去。
数据获取层在数据获取端由多路连接(multi- connector)组件构成,然后将数据推送到特定的目的地。

在数据湖的例子中,目的地指的是消息层。

很多技术框架可以用于构建能支持多种源系统的低延迟的数据获取层。

对于每种源系统类型,数据获取层的连接都需要根据所依赖的底层框架进行特殊配置。

数据获取层会对已获取的数据做少量转换,其目的是最小化传输延迟。

这里的数据转换指的是将已获取的数据转换为消息或事件,它们可以发送给消息层。

如果消息层无法到达(由于网络中断或消息层处于停机期间),则数据获取层还必须提供所需的安全性保障和故障恢复机制。

为了确保该层的安全性,它应该能够支持本地持久化的消息缓冲,这样,如果需要, 并且当消息层再次可用时,消息可以从本地缓冲区中恢复。

该模块还应该支持故障转移如果其中一个数据获取进程失败,另一个进程将无缝接管,如图所示。

消息层一一数据传输的保障

消息层其实就是数据湖架构里的消息中间件(Message Oriented Middleware,MOM), 该层的主要作用是让数据湖各层组件之间解耦,同时保证消息传递的安全性

为了确保消息能被正确传输到目的地,消息将会被持久化到某种存储设备中去。被选用的存储设备需要与消息处理需求匹配(结合消息大小及数量等因素)。

更进一步来看,不论是读操作还是写操作,消息中间件都是按队列(queue)方式来处理的,队列天然适合处理串行存取,机械硬盘足以应付此类I/O操作。

对于那些需要每秒处理百万级的消息的大型应用程序来说,SSD能提供更好的I/O性能。

消息层组件必须能对消息队列进行入队列和出队列操作。对于大多数消息处理框架来说,入队列和出队列操作对应的是消息发布与消息消费。

每个消息处理框架都提供了一系列库函数,用于与消息队列的资源连接(如 topic/queue)。

任意消息中间件都支持两类与队列通信的方式以及topic消息结构:

点对点模型:队列通常用于点对点(point-to-point)通信,每个消息应该只被某个消费者消费一次。发布订阅模型:topic概念经常出现于发布/订阅机制中,在这里,一个消息被发布一次,但是被多个订阅者(消费者)消费。一条消息会被多次消费,但是每个消费者消费一次。在消息系统内部, topic基于队列来构建;消息引擎(message engine)对这些队列进行差异化管理,以实现一个发布/订阅机制。

队列与topic都可以根据需要配置为持久化或非持久化。出于保障数据发布安全的目的,强烈建议将队列配置为持久化,这样消息将不会丢失。

从较高的层次来看,消息中间件可以抽象为由消息代理(message broker)、消息存储、topic/queue等组件组成的框架。


推荐阅读
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • 【Linux】CentOS 7 远程连接指南:高效安全的远程管理方法
    在 CentOS 7 中实现高效且安全的远程管理,本文详细介绍了如何检查和安装配置 OpenSSH。首先,通过 `yum list installed` 命令检查系统是否已安装 OpenSSH,若未安装,则使用 `yum install openssh-server` 进行安装。随后,配置 SSH 服务以确保其安全性和稳定性,包括修改默认端口、禁用 root 登录等关键步骤。此外,还提供了常见问题的解决方案,帮助用户顺利进行远程连接。 ... [详细]
  • 为了向用户提供虚拟应用程序,通常会在基础架构中部署StoreFront或Web Interface。为了确保安全的远程访问,通常需要在DMZ中配置Secure Gateway或Access Gateway。本文详细对比了这两种界面工具的功能特性,包括用户管理、安全性、性能优化等方面,为企业选择合适的解决方案提供了全面的参考。 ... [详细]
  • 如何撰写PHP电商项目的实战经验? ... [详细]
  • 2021年7月22日上午9点至中午12点,我专注于Java的学习,重点补充了之前在视频中遗漏的多线程知识。首先,我了解了进程的概念,即程序在内存中运行时形成的一个独立执行单元。其次,学习了线程作为进程的组成部分,是进程中可并发执行的最小单位,负责处理具体的任务。此外,我还深入研究了Runnable接口的使用方法及其在多线程编程中的重要作用。 ... [详细]
  • 如何使用Python高效绘制矩形图形
    本文详细介绍了如何利用Python的Turtle库高效绘制矩形图形,适合初学者快速上手。通过具体示例代码,帮助读者理解Turtle库的基本绘图方法和技巧,同时探讨了在不同应用场景中绘制矩形的实际操作,为后续复杂图形的绘制打下坚实基础。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 深入理解Spark框架:RDD核心概念与操作详解
    RDD是Spark框架的核心计算模型,全称为弹性分布式数据集(Resilient Distributed Dataset)。本文详细解析了RDD的基本概念、特性及其在Spark中的关键操作,包括创建、转换和行动操作等,帮助读者深入理解Spark的工作原理和优化策略。通过具体示例和代码片段,进一步阐述了如何高效利用RDD进行大数据处理。 ... [详细]
  • HTML5大文件传输技术深度解析与实践分享
    本文深入探讨了HTML5在Web前端开发中实现大文件上传的技术细节与实践方法。通过实例分析,详细讲解了如何利用HTML5的相关特性高效、稳定地处理大文件传输问题,并提供了可供参考的代码示例和解决方案。此外,文章还讨论了常见的技术挑战及优化策略,旨在帮助开发者更好地理解和应用HTML5大文件上传技术。 ... [详细]
  • 实现Nginx对ThinkPHP URL重写及PATHINFO支持的详细方法解析【PHP开发】
    在PHP后端开发中,实现Nginx对ThinkPHP的URL重写及PATHINFO支持是一项常见的需求。本文详细解析了经过多次尝试和研究,最终找到的一种有效配置方法,能够确保URL_MODERewrite功能正常运行,并提供稳定的服务。此外,文章还探讨了相关配置项的具体作用及其优化建议,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 深入浅出解读奇异值分解,助你轻松掌握核心概念 ... [详细]
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • 本文深入探讨了 Vue.js 中异步组件的应用与优化策略。首先,文章介绍了异步组件的基本概念及其在现代前端开发中的重要性。为了确保最佳实践,建议使用 Webpack 作为模块打包工具,因为 Browserify 默认不支持异步组件的加载。接着,详细解释了异步组件的使用方法,并提供了官方文档的相关链接以供参考。此外,文章还讨论了多种优化技巧,包括代码分割、懒加载和性能调优,以提升应用的整体性能和用户体验。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 在本文中,我们将探讨如何使用 UniApp 封装小程序 API 请求接口的最佳实践。通过创建 `request.js` 文件,定义基础 URL 并传入后端提供的 URL 作为请求参数。同时,配置请求方法(如 GET、POST)和请求头(例如包含 token 的认证信息),以实现高效、安全的 API 调用。此外,我们还将介绍如何处理请求和响应的错误,以及如何优化请求性能,确保应用在不同平台上的兼容性和稳定性。 ... [详细]
author-avatar
ao吖浩_257
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有