数据湖在大数据场景下应用和实施方案调研笔记(增强版)

点击上方蓝色字体,选择“设为星标”

回复”面试“获取更多惊喜

在读本文前你应该看过这些:

《我看好数据湖的未来,但不看好数据湖的现在》

《数据湖解决方案关键一环,IceBerg会不会脱颖而出?》

本篇一个总结的增强版。

网上目前关于 Flink 集成 Hudi、IceBerg的资料较少,社区建设不够完善。且因为迭代版本原因,代码过期严重。后面我会专门写一篇Flink连接Hudi、IceBerg等的文章。

炒作概念还是未来趋势?

数据湖是目前比较热的一个概念,许多企业都在构建或者计划构建自己的数据湖。但是在计划构建数据湖之前,搞清楚什么是数据湖,明确一个数据湖项目的基本组成,进而设计数据湖的基本架构,对于数据湖的构建至关重要。关于什么是数据湖?有不同的定义。

Wikipedia上说数据湖是一类存储数据自然/原始格式的系统或存储,通常是对象块或者文件,包括原始系统所产生的原始数据拷贝以及为了各类任务而产生的转换数据,包括来自于关系型数据库中的结构化数据(行和列)、半结构化数据(如CSV、日志、XML、JSON)、非结构化数据(如email、文档、PDF等)和二进制数据(如图像、音频、视频)。AWS定义数据湖是一个集中式存储库,允许您以任意规模存储所有结构化和非结构化数据。

微软的定义就更加模糊了,并没有明确给出什么是Data Lake,而是取巧的将数据湖的功能作为定义,数据湖包括一切使得开发者、数据科学家、分析师能更简单的存储、处理数据的能力,这些能力使得用户可以存储任意规模、任意类型、任意产生速度的数据,并且可以跨平台、跨语言的做所有类型的分析和处理。

关于数据湖的定义其实很多,但是基本上都围绕着以下几个特性展开。

1、 数据湖需要提供足够用的数据存储能力,这个存储保存了一个企业/组织中的所有数据。

2、 数据湖可以存储海量的任意类型的数据,包括结构化、半结构化和非结构化数据。

3、 数据湖中的数据是原始数据,是业务数据的完整副本。数据湖中的数据保持了他们在业务系统中原来的样子。

4、 数据湖需要具备完善的数据管理能力(完善的元数据),可以管理各类数据相关的要素,包括数据源、数据格式、连接信息、数据schema、权限管理等。

5、 数据湖需要具备多样化的分析能力,包括但不限于批处理、流式计算、交互式分析以及机器学习;同时,还需要提供一定的任务调度和管理能力。

6、 数据湖需要具备完善的数据生命周期管理能力。不光需要存储原始数据,还需要能够保存各类分析处理的中间结果,并完整的记录数据的分析处理过程,能帮助用户完整详细追溯任意一条数据的产生过程。

7、 数据湖需要具备完善的数据获取和数据发布能力。数据湖需要能支撑各种各样的数据源,并能从相关的数据源中获取全量/增量数据;然后规范存储。数据湖能将数据分析处理的结果推送到合适的存储引擎中,满足不同的应用访问需求。

8、 对于大数据的支持,包括超大规模存储以及可扩展的大规模数据处理能力。

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

不同企业的典型应用

目前在生产上可以用的经验不多,笔者个人在调研技术方案时参考了目前市面上公开的众多资料,供团队在数据架构设计和选型上进行参考。

华为生产场景数据湖平台建设实践

该平台围绕数据分如下三大逻辑模块:

典型数据应用场景按应用场景,对数据流程、处理平台进行的标注:

  • (绿色)结构化数据通过批处理、虚拟镜像到Hive数据,再通过Kylin预处理将数据储存在Cube中,封装成RESTAPI服务,提供高并发亚秒级查询服务,监测物料质量情况;

  • (红色)IoT数据,通过sensor采集上报到MQS,走storm实时分拣到HBase,通过算法模型加工后进行ICT物料预警监测;

  • (黄色)条码数据通过ETLloader到IQ列式数据湖,经过清洗加工后,提供千亿规模条码扫描操作。

非结构化质检图片数据:

通过web前台、数据API服务,进行图片数据的上传及查询,图片需要有唯一ID作为标示,确保可检索。海量图片数据以ID为rowkey,储存于Hbase平台,提供快速储存及查询能力。数据资产上有以下方面的构建:

  • 统一索引描述非结构数据,方便数据检索分析。

  • 增加维护及更新时间作为对象描述字段(图片类型、像素大小、尺寸规格)。非对象方式及数字化属性编目(全文文本、图像、声音、影视、超媒体等信息),自定义元数据。

  • 不同类型的数据可以形成了关联并处理非结构化数据。

实时金融数据湖的应用

在功能上,包括数据源、统一的数据接入、数据存储、数据开发、数据服务和数据应用。

  • 第一,数据源。不仅仅支持结构化数据,也支持半结构化数据和非结构化数据。

  • 第二,统一数据接入。数据通过统一数据接入平台,按数据的不同类型进行智能的数据接入。

  • 第三,数据存储。包括数据仓库和数据湖,实现冷热温智能数据分布。

  • 第四,数据开发。包括任务开发,任务调度,监控运维,可视化编程。

  • 第五,数据服务。包括交互式查询,数据 API,SQL 质量评估,元数据管理,血缘管理。

  • 第六,数据应用。包括数字化营销,数字化风控,数据化运营,客户画像。

在逻辑上,实时金融数据湖的逻辑架构主要有 4 层,包括存储层、计算层、服务层和产品层。

  • 在存储层,有 MPP 数据仓库和基于 OSS/HDFS 的数据湖,可以实现智能存储管理。

  • 在计算层,实现统一的元数据服务。

  • 在服务层,有联邦数据计算和数据服务 API 两种方式。其中,联邦数据计算服务是一个联邦查询引擎,可以实现数据跨库查询,它依赖的就是统一元数据服务,查询的是数据仓库和数据湖中的数据。

  • 在产品层,提供智能服务:包 RPA、证照识别、语言分析、客户画像、智能推荐。商业分析服务:包括自助分析、客户洞察、可视化。数据开发服务:包括数据开发平台,自动化治理。

整个实时场景架构:

数据源被实时接入到 Kafka 之后,Flink 可以实时处理 Kafka 的数据,并将处理的结果写入到数据湖中。数据湖整体基于开源方案搭建,数据的存储是用的 HDFS 和 S3,表格式用的是 Iceberg。Flink 读取完 Kafka 的数据之后进行实时处理,这时候可以把处理的中间结果写入到数据湖中,然后再进行逐步处理,最终得到业务想要的结果。处理的结果可以通过查询引擎对接应用,包括 Flink、Spark、Presto 等。

Soul的Delta Lake数据湖应用实践

数据由各端埋点上报至Kafka,通过Spark任务分钟级以Delta的形式写入HDFS,然后在Hive中自动化创建Delta表的映射表,即可通过Hive MR、Tez、Presto等查询引擎直接进行数据查询及分析。

我们基于Spark,封装了通用化ETL工具,实现了配置化接入,用户无需写代码即可实现源数据到Hive的整体流程接入。并且,为了更加适配业务场景,我们在封装层实现了多种实用功能:

  • 实现了类似Iceberg的hidden partition功能,用户可选择某些列做适当变化形成一个新的列,此列可作为分区列,也可作为新增列,使用SparkSql操作。如:有日期列date,那么可以通过 'substr(date,1,4) as year' 生成新列,并可以作为分区。

  • 为避免脏数据导致分区出错,实现了对动态分区的正则检测功能,比如:Hive中不支持中文分区,用户可以对动态分区加上'\w+'的正则检测,分区字段不符合的脏数据则会被过滤。

  • 实现自定义事件时间字段功能,用户可选数据中的任意时间字段作为事件时间落入对应分区,避免数据漂移问题。

  • 嵌套Json自定义层数解析,我们的日志数据大都为Json格式,其中难免有很多嵌套Json,此功能支持用户选择对嵌套Json的解析层数,嵌套字段也会被以单列的形式落入表中。

  • 实现SQL化自定义配置动态分区的功能,解决埋点数据倾斜导致的实时任务性能问题,优化资源使用,此场景后面会详细介绍。

数据湖方案调研

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 简化的服务架构,分钟级延迟。

  1. 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 即可,可谓是部署和使用成本极低。

数据湖技术比较

总结

八千里路云和月 | 从零到大数据专家学习路径指南

我们在学习Flink的时候,到底在学习什么?

193篇文章暴揍Flink,这个合集你需要关注一下

Flink生产环境TOP难题与优化,阿里巴巴藏经阁YYDS

Flink CDC我吃定了耶稣也留不住他!| Flink CDC线上问题小盘点

我们在学习Spark的时候,到底在学习什么?

在所有Spark模块中,我愿称SparkSQL为最强!

硬刚Hive | 4万字基础调优面试小总结

数据治理方法论和实践小百科全书

标签体系下的用户画像建设小指南

4万字长文 | ClickHouse基础&实践&调优全视角解析

【面试&个人成长】2021年过半,社招和校招的经验之谈

大数据方向另一个十年开启 |《硬刚系列》第一版完结

我写过的关于成长/面试/职场进阶的文章

当我们在学习Hive的时候在学习什么?「硬刚Hive续集」

你好,我是王知无,一个大数据领域的硬核原创作者。

做过后端架构、数据中间件、数据平台&架构、算法工程化。

专注大数据领域实时动态&技术提升&个人成长&职场进阶,欢迎关注。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
大数据项目需求调研大纲 大数据考察的目的: 针对***行业中上游企业进行调研,了解行业的经营现状以及未来发展趋势,总结行业的需求,为大数据平台建设进行摸底,使之更贴合实际市场。 考察单位的要求: 在行业中具有一定影响力,具备代性; 具备一定的可持续发展能力; 不同产品类型的客户; 三、考察单位及人员: 大数据项目调研 大数据项目需求调研全文共3页,当前为第1页。调研日期: 年 月 日 大数据项目需求调研全文共3页,当前为第1页。 公司名称 公司性质 产品类型 所在区域 调研人 岗位职务 销售方面 那些核心的产品?主要区域?区域售价?销售占比?客户的分类? 产品销量?产品销售的方式?(现款发货、货到付款、赊销、寄售、其它) 产品推广的方式有哪几种媒体?(流媒、广告牌、广播、网络、其它) 相对产品营销,对于行业中那些信息是比较关注的? 应收账款问题?占比?账期? 生产、设备 生产量?(年产量)行业中的位置? 生产的模式和生产周期?(以产定销批量生产?以销定产?) 对于生产工艺技术以及改良方面有哪些需求?(人员培训、产品技术升级、)产品多样化方面需求 对于产品售后的需求?(生产设备的故障率?备品备件采购和库存?) 对于生产成本控制方面的一些看法和需求? 基于国家对于环保放方面的重视,对于以后产品的发展方向是否会有调整? 物流、仓储 物流的方式?(自有车队?第三方物流?市场个体车主?) 运输半径?运输成本? 是否存在多品种多场地配送问题? 采购方面 原材料的主要种类?采购量区域?关注原材料的信息? 原材料采购主要区域?供应量如何?采购的方式?(付款方式) 生产设备型备品备件的采购方式及预存量? 如何来控制采购成本?(招标、定采、网上预约采购) 资金方面 融资的方式和需求? 大数据项目需求调研全文共3页,当前为第2页。 大数据项目需求调研全文共3页,当前为第2页。 现有融资的方式长短期占比? 信息化 公司现有的信息化应用状况如何(主要的功能模块和应用领域)? 是否关注行业相关网站?(关注的核心内容有哪些)? 现在公司内部的互联网应用有哪些?(企业微博、公众平台、企业号、网站推广、百度竞价) 基于行业现今的发展态势对于互联网应用大数据应用)有哪些观点和需求呢? 综述 困扰企业发展过程中有那些问题?企业发展过程中给予那些类型的行业信息数据,以便为企业的发展提供帮助。 企业下步转型发展的思路和方向? 时下"互联网+"已经成为国家战略,我们企业本身对于"互联网+"的应用有哪些观点? 同行业(上游) 销售的方式?更需要那方面的信息来源? 行业性的政策、法规、技改方面的需求有哪些? 针对上游配套合作厂家的有哪些需求?以及采购渠道方面的优化建议和想法? 融资的需求? 大数据项目需求调研全文共3页,当前为第3页。 大数据项目需求调研全文共3页,当前为第3页。 大数据项目需求调研
好的,我会尽力回答你关于大数据技术与应用的问题,以下是我的笔记: 1. 什么是大数据大数据是指数据量过大、处理复杂度高、价值密度低的数据。大数据具有“3V”特征:数据量大(Volume)、处理速度快(Velocity)、数据种类多(Variety)。 2. 大数据技术有哪些? 大数据技术主要分为存储、处理、分析三个方面。常用的大数据技术包括:Hadoop、Spark、Hive、HBase、Storm、Kafka等。 3. 大数据应用场景有哪些? 大数据应用场景非常广泛,包括但不限于以下几个方面: - 金融行业:风险控制、反欺诈、客户画像等; - 零售行业:销售预测、商品推荐、库存管理等; - 医疗行业:病人监测、疾病预测、数据分析等; - 交通行业:智能交通、交通拥堵预测、车辆管理等; - 教育行业:学生画像、教育资源管理、教学效果分析等。 4. 大数据的处理流程是什么? 大数据的处理流程可以分为以下几个步骤: - 数据采集:收集原始数据; - 数据存储:将采集到的数据存储到大数据平台中; - 数据清洗:对数据进行清洗,去除脏数据; - 数据处理:使用大数据技术对数据进行处理和分析; - 数据可视化:将处理后的结果以图形方式展现出来。 5. 大数据的挑战有哪些? 大数据的挑战主要包括以下几个方面: - 数据存储:海量数据的存储需要大量的存储空间; - 数据处理:海量数据的处理需要大量的计算资源; - 数据质量:大数据中存在大量的脏数据,需要进行数据清洗; - 数据安全:大数据中包含大量的敏感信息,需要保证数据安全; - 人才短缺:大数据技术需要专业的人才支持,但是目前人才供不应求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王知无(import_bigdata)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值