一、什么是数据湖方案
数据湖当前在国内外是比较热的方案,MarketsandMarkets市场调研显示预计数据湖市场规模在2024年会从2019年的79亿美金增长到201亿美金。一些企业已经构建了自己的云原生数据湖方案,有效解决了业务痛点;还有很多企业在构建或者计划构建自己的数据湖,Gartner 2020年发布的报告显示目前已经有39%的用户在使用数据湖,34%的用户考虑在1年内使用数据湖。在构建自己的数据湖之前还是需要充分评估什么是数据湖、数据湖方案能够带来什么价值、如何快速构建数据湖。
1.1 什么是数据湖
Wikipedia上说数据湖是一类存储数据自然/原始格式的系统或存储,通常是对象块或者文件,包括原始系统所产生的原始数据拷贝以及为了各类任务而产生的转换数据,包括来自于关系型数据库中的结构化数据(行和列)、半结构化数据(如CSV、日志、XML、JSON)、非结构化数据(如email、文档、PDF等)和二进制数据(如图像、音频、视频)。
从上面可以总结出数据湖具有以下特性:
- 数据来源:原始数据、转换数据
- 数据类型:结构化数据、半结构化数据、非结构化数据、二进制
- 数据湖存储:可扩展的海量数据存储服务
1.2 数据湖方案价值
数据湖的定义可以看出相比较数据库、数据仓库等,数据湖要处理的数据类型更加开放、更加复杂。数据库主要是处理结构化数据的联机事务;数据仓库主要处理大数据量结构化数据的分析。而数据湖主要是对海量的结构化、半结构化、非结构化、二进制数据进行存储,同时还需要对这些数据进行管理和价值挖掘。接下来可以看下云上沉淀的典型数据湖方案:
方案一:一站式端到端数据湖存储、管理、分析&计算方案
- 场景:企业在构建数据湖方案时,期望构建完整、通用、可扩展的解决方案,涉及到数据摄入、数据存储、数据管理、数据价值挖掘全链路,同时需要有上下游工具的支持。
- 方案价值:数据摄入侧支持一键建湖、流式入湖归档数据到OSS存储;数据管理侧支持对Database、文本、流式数据统一到OSS上面构建元数据管理;数据分析及计算侧支持通过Serverless Spark进行ETL及复杂计算、Serverless SQL(兼容 Presto)进行交互式查询。工具对接侧支持对接DMS调度、业务APP、QuickBI来进行管理。
方案二:OSS 大规模数据(自由编程)清洗&机器学习方案
- 场景:企业对存储在OSS上面的大规模数据需要进行多种计算负载处理,比如ETL、机器学习、图计算等,同时利用python、java、scala、R等生态进行自由编程。
- 方案价值:DLA Serverless Spark能够友好的支持该场景。弹性方面Serverless Spark完全弹性,1分钟启动300个节点进行计算;生态方面Serverless Spark的多数据源能力,提供外部数据源批量入库、联邦分析能力;算法及Code方面支持 Python、用户Code、机器学习等原生KPI;离线数仓(复杂分析)方面支持复杂分析,提供天/月级别的报表等。
方案三:不同类型数据源联邦查询分析方案
- 场景:企业的业务系统数据一般存储在数据库比如MySQL、MongoDB等;日志数据因为数据量大的特性会存储在OSS上面。通过数据湖分析方案能够让这两种数据进行联邦查询,释放数据价值。
- 方案价值:DLA Serverless SQL(兼容Presto)支持15种以上的数据源,能够满足95%的联邦分析数据源对接。DLA Serverless SQL支持高效的交互式查询,在读写数据源端做了大量下推优化。DLA Serverless SQL通过JDBC可以对接包括DMS、QuickBI、tableau等系统满足业务开发需求。
二、构建数据湖方案面临的挑战
上面的两个数据湖方案是各大企业在阿里云上面通过实践沉淀下来的。还是有不少企业会问这两个数据湖方案确实很有价值,但是在落地的过程中总是会遇到一些问题,导致方案落地缓慢,比如:
- 如何构建数据的统一管理视图:OSS不像数据库及数据仓库具有元数据管理系统,导致海量数据存储后难以管理。另外各个数据库、数据仓库等系统有自己的元数据,形成了数据孤岛,难以进行统一管理,释放数据联邦分析价值;
- 如何构建多租户的权限管理:如果全域数据都使用数据湖方案管理,企业多部门研发人员共同使用数据湖挖掘价值,但是缺少有效的数据租户及权限隔离,产生数据风险;
- 如何自动化的构建元数据:OSS上面的文件量巨大、且这些数据是动态增长变化的;如果手动创建元数据一方面效率低,同时无法满足动态更新的需求;
- 如何简单的进行数据入湖:为了满足数据写入的实时性,比如日志场景数据的入口是在类似Kafka、Loghub等消息系统,这些数据怎么高效的归档到OSS进行后续的分析?存储在数据库中的数据以前为了节省成本,以及保证稳定性,通常会只保留最近一段时间的数据,在有数据湖方案后,想要把这些数据归档到数据湖做后续的分析,那么如何简单高效的归档到OSS数据湖呢?
结合用户的这些挑战和痛点,阿里云数据湖分析服务DLA的数据湖管理功能可以有效的提高构建数据湖的效率,接下来一起把这些功能玩转起来吧
三、DLA高效的数据湖管理功能
阿里云数据湖分析服务DLA的数据湖管理功能定位为帮助用户构建统一、安全、高效、开放的数据湖解决方案。从下面的数据湖方案整体架构图可以看出:
- 存储对接:数据湖管理向下管理好数据湖存储的数据,包括构建OSS目录的元数据系统以及方便的把流式数据及Database的数据归档到OSS管理起来;
- 分析与计算支持:数据湖管理向上为多种数据湖计算引擎提供统一的元数据系统,目前支持数据湖原生分析与计算引擎DLA Serverless SQL(兼容Presto)、DLA Serverless Spark;部分Hadoop&Spark生态,比如Apache Hudi;AnalyticDB、MaxCompute、EMR等系统也可以对接数据湖管理的元数据系统。
数据湖管理核心功能包括:元数据管理、元数据爬取、数据入湖、实时数据湖。下面一起来看下这些功能是如何高效的帮助构建数据湖的。
3.1 元数据管理
数据湖存储的数据量更加大、数据格式更加丰富,为了对这些数据进行安全的管理和挖掘价值,需要一套同时具备基本管理能力、多租户权限管理能力、扩展能力、开放能力的统一元数据系统。阿里云数据湖分析服务DLA的元数据系统具备这些能力。
3.1.1 DLA元数据管理介绍
下面是数据湖分析服务DLA的元数据管理系统的架构图:
- 存储层:DLA元数据管理系统是一套多租户的服务,管理所有用户元数据,目前是每个regoin部署一套。智能数据路由层,用来做租户元数据的存储管理,能够根据用户元数据量级动态扩展调整;
- 核心服务层:元数据管理系统提供database、table、partition的服务进行库、表、分区、列的管理能力,同时支持使用租户服务、权限服务、生命周期管理,权限粒度可以支持到库、表、列;
- 接入层:统一元数据管理服务为了支持更多计算引擎对接,同时支持通过JDBC、阿里云OpenAPI来使用元数据服务;目前以JDBC为主,阿里云OpenAPI对接进行中。身份认证支持对接阿里云RAM账号体系,以及DLA账号体系。同时会有元数据相关的请求QPS监控。
- 生态层:目前这套元数据管理支持对接云原生的数据湖分析引擎DLA Serverless SQL&Spark;开源Hadoop&Spark,其中Apache 顶级项目Hudi已经原生支持了阿里云数据湖分析元数据HUDI-841;阿里云数据库备份DMS也使用这套元数据作为其备份数据湖分析的元数据系统;AnalyticDB、EMR、MaxCompute等也可以进行对接。
3.1.2 DLA元数据管理上手
- 可视化全局管理视图
如下图可以在阿里云数据湖分析DLA的控制台“元数据管理”进行元数据的操作,比如“创建Schema”、查看库表信息、查询数据等。
-
创建元数据
- 自动化元数据创建:可以参考3.2元数据爬取、3.3数据入湖的详细介绍
- SQL手动创建:支持HIVE风格的DDL语法;
- SQL自动创建:支持create table like mapping语法自动识别数据源文件的列,减少手写很多列及类型的麻烦;支持MSCK REPAIR DATABASE语法自动把Database下面的表创建好;支持MSCK REPAIR TABLE自动把table下面的分区和数据目录创建映射好。
-
权限管理:目前支持通过JDBC进行权限的GRANT和REVOKE,通过阿里云OpenAPI也在研发中
3.2 元数据爬取
用户基于OSS进行数据湖存储时,数据具有规模大、格式丰富、动态变化、非结构化字段多的特点,这种情况下手动创建的可行性及成本会比较高。
3.2.1 DLA元数据爬取介绍
元数据爬取功能可以自动为OSS上面的数据文件创建及更新数据湖元数据,方便分析和计算。具有自动探索文件数据字段及类型、自动映射目录和分区、自动感知新增列及分区、自动对文件进行分组建表的能力。目前主要支持了自动爬取OSS上面的元数据,Database的自动元数据构建在开发中。核心功能包括:
- 自动探索格式:企业存储在OSS上面的数据格式多种多样,比如常见的有json、csv、parquet、orc等,同时不同文件里面的字段数目及类型也是多种多样的。DLA元数据爬取功能具备自动探索这些schema的能力。
- 增量发现:存储在OSS上面的数据是动态变化的,比如用户会向同一个目录下面持续的上传文件,且文件的字段数也会增加、Loghub投递到OSS上面的文件会增量的通过日期目录来写入等。元数据爬取功能能够覆盖这些场景;
- 规模扩展:随着要爬取的OSS上面文件规模的增大,元数据爬取任务可以自动弹性伸缩资源来保证元数据爬取任务端到端的延迟。
3.2.2 DLA元数据爬取10分钟上手
使用DLA的元数据爬取可以通过DLA的控制台,同时元数据爬取开放阿里云OpenAPI也在研发中,同时也会被集成到其他云产品中。下面一起玩转一下元数据爬取功能:
- 创建任务:左侧选择要爬取的具体OSS路径,右侧配置爬取的元数据要存储到DLA元数据系统的Schema名称即可,其他高级选项根据实际需求调整。
- 任务管理:爬取任务会自动周期运行,可以通过这个界面管理任务的运行情况。支持查看任务的运行状态、配置的修改、跳转到DLA的SQL窗口进行快速的数据查询。
3.3 数据入湖
企业并不是所有业务数据直接存储在数据湖OSS中,其他的业务数据存储主要有两类包括消息中间件、Database,而这些数据都有归档存储到数据湖OSS中进行统一计算分析的需求。因此简单易用的数据入湖功能成为普遍的需求。
3.3.1 DLA数据入湖介绍
阿里云数据湖分析DLA的数据入湖支持Database的全量&增量&多库合并建入湖、支持消息中间件数据的实时入湖等能力。
-
Database一键建湖:主要支持全量、增量、多库合并三种模式,其中增量模式正在开发中;核心价值如下:
- 丰富的数据源:包含OLTP的MySQL、SQLServer、POLARDB等,同时支持NoSQL的mongoDB等;
- 自动感知源库结构变化:能够自动识别源库的增表、增加字段等同步更新到OSS数据湖;
- 整库多表建湖:一键建湖能够自动同步数据库的整个Database下面所有表,而不需要每张表都去单独配置;
- 分表&分库合并建湖:有些业务场景为了提高OLTP的查询性能及数据隔离性,经常会进行分库及分表。目前某用户使用该功能支持了8200+ SqlServer库合并到一个DLA的库里面,这样可以对分库的数据进行中心化统一分析。
- 源库影响最小化:数据入湖通过动态调整源库连接数的方式、以及选择业务低峰期归档,最小化对源库的影响。
- 实时数据入湖:对于云kafka、Loghub等消息中间、数据库的CDC数据可以通过“实时数据入湖”方案构建数据湖。
该方案基于DLA Serverless的Spark Streaming以及数据湖增量存储格式Apache HUDI来构建,通过HUDI增量写入OSS的数据,同时自动在DLA的元数据系统构建元数据。详细介绍可以参考文章,核心优势如下:
- 全链路数据延迟可达分钟级别,打造T + 0 数据湖;
- 支持数据增量存储在OSS,支持Upsert/Delete,同时自动构建元数据管理;
- 丰富的数据源,支持阿里云上超过95%数据源;
- 一份数据存储在OSS,通过DLA Meta增量管理,降低存储成本低;
3.3.2 Database一键建湖
使用一键建湖可以通过DLA的控制台,同时可以通过数据管理DMS进行。下面主要介绍DLA控制台的使用,关于DMS使用一键建湖可以参考视频。
- 创建一键建湖:左侧选择数据源,可以包括RDS、PolarDB、MongoDB、ECS自建数据库;右侧配置源库的验证信息,以及在DLA生成的元数据名称即可。
- 任务管理:对于周期运行的建湖任务可以进行全局的管理,以及对建好的湖进行分析。
四、展望与总结
数据湖分析DLA 是 Serverless的架构,支持 【按需与保留】 资源使用,打造最具性价比的数据湖分析平台;
提供一站式的数据湖分析与计算服务,支持 ETL、机器学习、流、交互式分析,可以与OSS、数据库等多种数据源搭配使用;功能包括:数据入湖,元数据管理与自动发现,支持双引擎:【SQL(兼容Presto)分析、Spark计算服务】。其中数据湖管理这块会朝着更易用、更开放、更可靠方向迭代。
注:数据湖管理控制台使用链接,数据湖管理及DLA的帮助文档。