数据分析是当前比较热门的技术,通过利用云计算的资源,更加快速对数据进行收集、处理并分析。本文将从实践角度阐述 亚马逊云科技 数据湖以及数据分析等产品,是如何帮助企业更加智能的利用数据,从而辅助业务决策。
一、数据湖的由来
很久之前,当时的数据量很少,人们都是把数据记在脑中或者记录在纸张上面,想要查看数据的时候,翻开记录就行。
随着科技的进步,产生了越来越多的数据,人们发现数据记录在笔记中变得繁琐且不高效,而且查询数据也变得困难。于是产生了数据库,数据库可以满足海量数据快速地增删改查等需求。
比如现在的移动支付,用户的每笔消费,后台数据库都会快速记录这笔交易;用户在电商平台下的每个订单,后台数据库同样会快速地记录下来,这就会产生海量的数据,而这也只是海量数据的冰山一角。
时间长了,人们发现库里的数据越来越多了,不光要支持联机业务,还要有分析的价值。但是,传统的数据库需要满足频繁、快速的读写需求,并不适合大量读取数据特征进行分析业务。人们开始寻找其他的方法。
当然人类还是很聪明的,既然不能直接在数据库中进行分析,那我应该可以把需要分析的数据导出来,放到一个专门的数据库中进行分析,在导出的过程中还可以对数据进行一些格式转换,这个过程也就是我们常说的 ETL(Extract-Transform-Load)。
这个专门存放加工后数据的地方,我们称之为数据仓库。数据仓库里面的数据主要用于数据分析,如用于 BI、报表、经营分析、广告投放等。
那么数据库和数据仓库的区别主要在哪里呢?
- 数据库:通常为小数据量高频读写,主要用于联机事务。
- 数据仓库:通常为大数据量读取,主要用于联机分析业务。
虽然应用场景不一样,但数据库和数据仓库都是适用于结构化数据。在相当长的一段时间内,数据库和数据仓库联合,共同满足企业的实时交易型业务和联机分析型的业务。
然而时代在发展,各种各样的数据类型都在产生,如半结构化和非结构化数据,面对多种类型数据分析的需求也越来越复杂。
这个时候,人们又陷入了沉思,该找一个什么样的存储来保存所有的原始数据,并且可以让多个应用进行读取查询。大数据需要使用好所有类型的数据,并不能抛弃这些数据,并且需要近似无限量的存储,这些数据五花八门,又多又杂,该如何存储呢?
索性就挖一个大坑吧,然后把所有的原始格式的数据一股脑地扔进去,这些数据就如同坑中的水,因为数据量巨大,这个坑也就变成了小湖泊。你需要什么数据,直接在湖边挖个沟渠,把数据引入到你的应用上面,这就是我们所说的数据湖的雏形。
什么是数据湖
那么数据湖到底是什么呢?我们查看一下维基百科上面的解释:
数据湖(Data Lake)是一个以原始格式存储数据的存储库或系统。它按原样存储数据,而无需事先对数据进行结构化处理。一个数据湖可以存储结构化数据(如关系型数据库中的表),半结构化数据(如CSV、日志、XML、JSON),非结构化数据(如电子邮件、文档、PDF)和二进制数据(如图形、音频、视频)。
通过数据湖的定义,我们可以从中找出一些数据湖的特点,或者数据湖满足什么条件。
- 数据湖需要能提供足够大的数据存储能力,接近于无限量的存储。
- 数据湖可以存储各种类型的数据,不限于结构化,包括半结构化和非结构化数据。
- 数据湖存储的是原始数据,没有经过加工的,产生的数据是什么样,存储的就是什么样。
- 数据湖需要有完善的数据管理能力,可以管理各类数据的相关要素。
- 数据湖需要具有多样化的分析能力,包括但不限于批处理、流式计算、机器学习等。
- 数据湖需要具有完善的数据生命周期管理能力。
我觉得数据湖就是一个架构体系,通过它我们可以快速地存储、处理、分析海量的数据,同时可以使用多种多样的手段进行分析,所有的操作都是在安全合规的场景下进行;以数据为导向,实现任意来源、任意速度、任意规模、任意类型数据的全量获取、全量存储和全生命周期管理;还可以通过接口和外面的计算资源交互集成,满足各类企业级应用需求。
有了数据湖,企业分析人员不用在不同的数据仓库和文件存储之间进行频繁切换,也不需要重复地写抽取、加载的逻辑,极大提升了分析人员的的工作效率。
二、亚马逊云科技数据湖解决方案
我们上面是介绍了数据湖比较普遍的定义,那么 亚马逊云科技是如何定义数据湖的呢?
亚马逊云科技定义数据湖是一个集中式存储库,允许用户以任意规模存储所有结构化和非结构化数据。在 亚马逊云科技中, Amazon S3 可以实现数据湖的这些功能,因为 Amazon S3 有很多特性可以满足数据湖各式各样的要求,在后面数据存储方面,我们将着重介绍 Amazon S3 的这些特性。
图片来源于亚马逊云科技全球网站截图
上图中的整个方案是基于 Amazon Lake Formation 构建,Amazon Lake Formation 本质上是一个管理性质的组件,与其他亚马逊云科技服务互相配合,来完成整个企业级数据湖的构建。上图从左到右,体现了数据获取、数据存储、数据处理、数据分析四个步骤,下面我们将逐一介绍,阐述 亚马逊云科技 提供的服务是如何帮助我们使用数据湖。
数据获取
数据获取是整个数据湖构建的起始,既然 Amazon S3 是 亚马逊云科技数据湖的存储,那我们该如何把业务数据放入其中呢?
首先,需要判断接入数据的类型,是结构化数据还是非结构化数据,是流式的数据还是批量的数据,然后再选择合适的工具。亚马逊云科技针对不同场景提供了丰富的服务,帮助用户将外部数据导入到数据湖 Amazon S3 中。
为了使数据湖中的数据可以统一进行管理,流入的数据需要包括元数据和实际数据两个部分。元数据流入包括数据源创建、元数据抓取两步,最终会形成数据资源目录,并生成对应的安全设置与访问控制策略。
亚马逊云科技提供了多种数据提取的服务,如:
- Amazon Snowball:提取离线传感器数据、NAS、本地 Hadoop。
- Amazon Kinesis Data Firehose:提取 IoT、传感器数据、点击流数据、社交媒体源、流式处理日志。
- Amazon Direct Connect:提取本地数据湖、EDW、大型数据集合。
- Amazon Database Migration:提取 Oracle、MySQL、MongoDB、DB2、SQL Server、Amazon RDS。
- Amazon Storage Gateway:提取本地 ERP、大型主机、实验室设备、NAS 存储。
这些服务可以把各式各样的数据从外部导入到 Amazon S3 中,具体每个服务的详细功能,Amazon 都做了详细的介绍,用户可以参考官方文档进行配置。
数据存储
数据湖的存储主要是依托于 Amazon S3,Amazon S3 可以理解为数据湖最重要的一部分,这主要也依托于其强大的特性:
- 提供 11 个 9 的数据持久性。
- 业界领先的性能和可扩展性。
- 完善的安全性、满足法律法规要求。
- 对象粒度级别的权限控制。
- 适合各类工作负载的存储类。
- 方便与其他分析服务整合,如 Amazon Athena、Amazon Redshift 和 Amazon EMR。
Amazon 的众多服务都可以和 Amazon S3 无缝结合,为数据湖的数据注入与摄取提供了强大的支持。
数据处理
数据处理这一部分主要是利用 Amazon Glue 来进行处理,Amazon Glue 是 ETL 和数据目录服务,它是无服务器架构,仅为作业实际使用的资源付费,方便易用,威力强大,支持自动 schema 发现,具有可视化 ETL 和代码生成和灵活的任务调度程序,是 亚马逊云科技大数据处理中非常重要的一个组件。
Amazon Glue 主要组件有数据目录、作业编写、作业执行,下面介绍每个组件可以做什么事情:
- 数据目录
- Hive 元存储与增强功能兼容
- 爬网程序自动提取元数据并创建表
- 与 Athena、Amazon Redshift Spectrum 集成
- 作业编写
- 自动生成 ETL 代码
- 在开源框架上构建,语言为 Python 和 Spark
- 以开发人员为中心,包括编辑、调试、共享
- 作业执行
- 在无服务器 Spark 平台运行作业
- 提供灵活时间安排
- 处理依赖关系解析、监控和警报
- 任务触发方式支持手动触发、定时触发、事件触发,可以和 Amazon Lambda 集成
总之,借助 Amazon Glue,我们无需再去考虑数据源是什么格式,是结构化还是非结构化,Amazon Glue 可以自动智能地进行分析,推断出数据架构,数据类型等等。应对底层数据架构不断发生的变化,如果没有 Amazon Glue,在数据源结构发生变化时,用户需要重新去创建数据目录,而这些繁琐的事情现在用户不需要再去关心,Amazon Glue 可以统统搞定,数据分析人员可以把更多的注意力放在业务实现方面。
Amazon Glue 也具备机器学习的能力,可以帮助用户识别不同的数据集中重复的记录,帮助用户进行数据清理和转换,这个功能不需要用户写一行代码,也不需要具备专业机器学习的算法的能力,只需点击几下鼠标即可实现。
数据分析
在企业里面,一般分析作业都是 BI 报表类型,业务部门把想看的指标告诉数据分析人员,数据分析人员编写 SQL 语句,然后运行结果提供给业务部门查看,但是由于需求的多变和不明确性,这样的过程会反反复复。
这是企业中一个非常典型的场景,但是在实际的使用过程中,客户可能还会需要更加复杂的一些分析手段,比如客户想要通过机器查询、通过 K/V 可以快速地在海量数据中查询需要的结果、想要实现全文检索,或者流式快速对数据进行统计等。
面对以上的问题,我们都可以通过 亚马逊云科技提供的服务进行实现。通过 Amazon Redshift 实现交互式查询分析,使用 Amazon EMR 对海量数据进行 ETL 处理和分析,使用 Amazon ElasticSearch 实现全文检索,Amazon Kinesis 实现流式快速数据统计等,借助于 Amazon Athena 可以直接对 Amazon S3 的数据进行 SQL 查询,当下比较流行的机器学习方面也可也借助 Amazon SageMaker 来实现,Amazon SageMaker 可以读取 Amazon S3 中的训练数据,并将训练好的模型回写到 Amazon S3 中。
我们可以看到,在 亚马逊云科技 数据湖上,这些分析都是通过不同的外部工具来实现,计算由外部的组件实现,存储统一由 Amazon S3 提供,这也是 亚马逊云科技数据湖的独特之处,计算与存储分离。
数据展示
数据的采集和生产最终是为了决策,数据的各种分析要求基本已经满足了企业大部分的需求,那这些分析结果如何以可视化的效果展现从而帮助用户决策呢?
在数据展示方面,亚马逊云科技 也为用户提供了一款采用云技术的快速商业智能服务 Amazon QuickSight,企业用户可以更加便捷、快速低成本地分析数据。
Amazon QuickSight 的定位是连接用户与数据,它是整个 亚马逊云科技 生态中离商业决策最近的服务,直接解决大数据应用的 “最后一公里” 问题。它不需要用户有代码能力,可自动识别和整合各种不同的数据源,包括与 Amazon RedShift、Amazon S3、Amazon Athena、Amazon Aurora、Amazon RDS、Amazon IAM、Amazon CloudTrail、Amazon Cloud Directory 等 亚马逊云科技服务的原生集成。提供实时交互式的数据查询方式,并且自动进行数据可视化,最大程度降低了商业决策端用户使用大数据的成本。
权限管理
在企业数字化转型的过程中,势必会有很多数据分散在各个地方,这些数据如何统一管理?亚马逊云科技 给出的答案是需要一个统一的数据目录用来注册和管理数据的元数据信息。在 亚马逊云科技 搭建一个这样的数据目录并不难,使用 Amazon Glue Catalog 可以很方便实现。
但是对于一个集中的数据目录,如何管理权限边界变成了一个问题,亚马逊云科技是如何管理权限边界的呢?
Amazon Glue Catalog 是通过 Amazon IAM 对元数据进行精细化控制的,它可以在整个数据目录级别、数据库级别、表级别对不同的 Amazon IAM 用户进行授权,非常灵活方便。这些权限管理可以通过 Amazon Lake Formation 来实现,Amazon Lake Formation 的权限进一步可以细分为数据资源目录访问权限和底层数据访问权限,分别对应元数据和实际存储的数据。实际存储数据的访问权限又进一步分为数据存取权限和数据存储访问权限。
综上,亚马逊云科技数据湖方案成熟度高,特别是元数据管理、权限管理上考虑充分,打通了异构数据源与各类计算引擎的上下游关系,让数据能够自由 “移动” 。在流计算和机器学习上,亚马逊云科技 的解决方案也比较完善。在流计算方面,亚马逊云科技 推出了专门的流计算组件 Amazon Kinesis,同时 Amazon Kinesis 还可以访问 Amazon Glue 中的元数据,这一点也充分体现了 亚马逊云科技数据湖解决方案在生态上的完备性。
三、在 亚马逊云科技 上构建数据湖
至此,围绕着数据湖 亚马逊云科技 提供整个一套大数据解决方案,那么在每个阶段中,不同的数据类型和不同的分析需求应该如何满足,应如何调度和管理一个数据分析的应用呢?
如果我们在 亚马逊云科技 上面一步步配置的话,那会变得非常困难,毕竟 亚马逊云科技围绕数据库有如此众多的服务,服务之间的关联和权限配置变得很复杂,这时候就需要一个工具来帮助用户把这些问题都搞定,Amazon Lake Formation 可以帮助用户快速地搭建数据湖,并且引入了安全管理机制,真正地帮助用户保护数据湖。
说了这么多,那下面我们使用 Amazon Lake Formation 去构建一个数据湖吧。
图片来源于亚马逊云科技全球网站截图
上图是一个数据湖的架构图,我们将准备两份数据 sales 和 customers,会使用 Amazon Glue 来存取数据的元数据,在使用 Amazon Lake Formation 赋予用户 salesuser 和 customersuser 使用这两个数据表,最终他们将通过 Amazon Athena 来查询需要的数据。
准备数据和用户
我们准备了两个数据文件,下面把他们各自的字段列举一下:
- customers:{CUSTOMERID, CUSTOMERNAME, EMAIL, CITY, COUNTRY, TERRITORY, CONTACTFIRSTNAME, CONTACTLASTNAME}
- sales:{ORDERNUMBER, QUANTITYORDERED, PRICEEACH, ORDERLINENUMBER, SALES, ORDERDATE, STATUS, QTR_ID, MONTH_ID, YEAR_ID, PRODUCTLINE, MSRP, PRODUCTCODE, DEALSIZE, CUSTOMERID}
同样我们也会创建两个用户,分别是 salesuser 和 customersuser,并赋予相应的权限:
- salesuser:可以查看表 sales 的所有列。
- customersuser:只可以查询表 customers 的 CUSTOMERNAME, EMAIL 列。
下面开始让我们创建吧。
创建 Amazon IAM 用户
创建用户这里有几个注意事项,我们创建的用户是需要可以登录 Amazon Console 控制台,用户赋予以下几项权限:
AmazonS3FullAccess, AmazonAthenaFullAccess, CloudWatchLogsReadOnlyAccess, AmazonCloudFormationReadOnlyAccess 和 AmazonGlueConsoleFullAccess。
图片来源于亚马逊云科技全球网站截图
图片来源于亚马逊云科技全球网站截图
创建 Amazon IAM Role
因为 Amazon Glue crawler 需要从 Amazon S3 中爬取元数据,所以需要给 Amazon Glue 创建一个 Role,赋予 PowerUserAccess 的策略。
图片来源于亚马逊云科技全球网站截图
创建 Amazon S3 Bucket
为数据湖创建一个 Amazon S3 Bucket,命名为 wzlinux-datalake,然后把数据上传到上面,因为测试环境,我们手动上传这些数据,生产环境都是自动上传更新数据。
在 Bucket 里面创建两个文件夹 data 和 script,data 这个文件夹主要是存放数据湖数据,script 文件夹后面 Amazon Athena 会使用,作为 Amazon Athena 查询结果输出位置。
图片来源于亚马逊云科技全球网站截图
在 data 目录下面,创建两个文件夹,一个是 sales,一个是 customers ,把各自的 csv 文件传到其中。
图片来源于亚马逊云科技全球网站截图
配置数据湖
打开 Amazon Lake Formation 控制台,赋予使用的 AmazonIAM 用户 administrators 权限。
图片来源于亚马逊云科技全球网站截图
在 Databases 里面,添加刚刚创建的存储桶作为数据库,用作数据目录,后面会用 Amazon Glue 爬取,如下图:
图片来源于亚马逊云科技全球网站截图
下一步来到 Data Lake locations,把创建的 Amazon S3 作为数据湖存储。
图片来源于亚马逊云科技全球网站截图
爬取数据目录
数据湖中的所有数据都需要被数据目录所记录才可以使用,数据目录可以使用 Amazon Glue 来爬取创建,下面我们配置数据目录爬取任务。
选择刚刚创建的数据目录 wzlinux-db,并赋予其爬取 Amazon S3 数据的权限。
图片来源于亚马逊云科技全球网站截图
权限设置如下。
图片来源于亚马逊云科技全球网站截图
然后找到 Crawlers,添加一个 Crawlers。
图片来源于亚马逊云科技全球网站截图
图片来源于亚马逊云科技全球网站截图
添加 Amazon S3 数据存储的目录。
图片来源于亚马逊云科技全球网站截图
选择创建好的角色。
图片来源于亚马逊云科技全球网站截图
选择在 Amazon Lake Formation 创建好的数据库作为输出目录。
图片来源于亚马逊云科技全球网站截图
创建完成之后,运行我们的爬网程序。
图片来源于亚马逊云科技全球网站截图
爬取完成之后,我们就可以去 Amazon Lake Formation 里面去查看数据目录了,可以看到多了两张表。
图片来源于亚马逊云科技全球网站截图
赋予用户权限
目前数据湖的数据目录我们已经创建好了,现在我们分别赋予用户对数据目录的操作权限,以满足我们开始的要求。
- salesuser:可以查看表 sales 的所有列。
- customersuser:只可以查询表 customers 的 CUSTOMERNAME, EMAIL 列。
首先为 salesuser 添加权限,找到 Sales 表,选择 Grant 按钮,添加权限。
图片来源于亚马逊云科技全球网站截图
同样的方式赋予 customersuser 权限。
图片来源于亚马逊云科技全球网站截图
权限授权好了,那我们可以分别登陆这两个用户进行数据查询验证。
数据查询验证
首先我们登陆 salesuser 用户验证测试,我们可以看到所有的表。
图片来源于亚马逊云科技全球网站截图
在查询之前,我们需要做一个设定,配置一下结果输出,这也就是之前创建的 script 目录。
图片来源于亚马逊云科技全球网站截图
然后我们开始查询,结果和我们设定的一样,可以查看所有的列数据。
SELECT * FROM "wzlinux-db"."sales" limit 10;
图片来源于亚马逊云科技全球网站截图
现在我们登陆另外一个用户查看,只可以看到我们分配的两个列。
图片来源于亚马逊云科技全球网站截图
同样的进行数据查询,查看一下结果,和开始的设定也一样。
图片来源于亚马逊云科技全球网站截图
可以看到,所有的测试结果和之前预期的一样,通过整个实验过程,我相信大家对 Amazon Lake Formation 如何规范化数据湖有了一定的了解。
这么好的工具,你现在是否也想体验一下呢,目前 AmazonLake Formation 在中国区的北京区域也已经上线,欢迎大家去使用体验 亚马逊云科技数据湖的方便之处。
四、经验总结
- 我个人觉得 亚马逊云科技在数据湖方面最好的就是计算存储分离,AmazonGlue Data Catalog 维护所有存储/查询系统的元数据,实现计算和存储分开,计算按量付费,节省资源,各种计算模型可以直接从 Amazon S3 中获取数据进行分析,使得计算资源可以动态扩展以响应业务的变化。
- Amazon S3 作为数据的存储,成本较 Amazon EBS 有巨大的优势,同时还获得了更高的数据持久性和可靠性。
- 大数据的最终目的是为了机器学习提供能具备生产力的模型。
- 一个公司中大数据部门真正的价值是产出产品价值,并非一个报表部门自己造轮子。
- 数据的统一化方便进行前期特征处理和分析任务。