数据分析平台,特别是实时数据分析,正在被越来越广泛的应用于各个行业。 举例来说,游戏公司在发布新游戏之后,需要实时定位用户的留存、增长等情况;快销公司需要精确地记录每一笔订单的情详情,并结合社交媒体,实时分析促销活动引起的用户购买行为与销量等等。基于这些需求, AWS 提供了一整套成熟的解决方案与服务,并且得到了广泛的应用。
图 1 AWS 大数据参考架构示例
上图中,Amazon Kinesis 是实时的流式分析服务,而 Amazon S3 是 AWS 的海量数据存储服务。利用 Kinesis 与 S3,我们可以十分方便的构建一个实时流式信息数据的采集与存储。 值得注意的是,作为 Serverless 计算服务的代表 , 用户只需要编写实现对应的 ETL 逻辑,Amazon Lambda 就可以非常方便地对 Kinesis 流式数据进行抽取与分析而不需要部署任何服务器。另外,用户也可以使用 Kinesis Firehose(Kinsis 服务之一)实现原始数据的直接注入与收集。
随着 Amazon Athena 在 AWS re:Invent 2016 的重磅发布,AWS 的大数据平台又增添了重要的一员!Amazon Athena 是一种交互式查询服务,用户可以使用标准 SQL 分析 Amazon S3 中的数据。因为 Athena 底层是基于 Serverless(无服务器)架构,用户不需要运维底层的服务器,并且查询处理能力会随着用户的数据将进行自适应与扩展,实现秒级别的数据查询与处理。
闲话少说,我们将利用 AWS 提供的三个重要服务——Amazon Kinesis Firehose,、Lambda 和 Athena 在 1 个小时之内实现一套实时分析的 Serverless 数据分析平台!
准备好了吗?Let’s rock
1.数据源。作为测试,我们将对 AWS VPC Flow Logs 进行分析。您可以使用 Kinesis Agent/Flume/Fluentd 或者 Amazon Kinesis SDK 对前端的实时日志进行分析。Amazon VPC Flow Logs 将实时记录 VPC 监控的网络端口的流量与通信日志,并将日志发布于 AWS CloudWatch Logs。详细的配置请参见 https://aws.amazon.com/cn/blogs/aws/vpc-flow-logs-log-and-view-network-traffic-flows/
2.数据 ETL。VPC Flow Logs 进入 CloudWatch Logs 之后,可以利用 Lambda 对实时日志进行订阅处理。订阅之后,Lambda 会在 CloudWatch Logs 更新之后,自动调用执行,进行数据 ETL。
首先,在控制台创建一个 Lambda 函数(利用 Python 实现).为了确保 Lambda 有对应的执行权限,需要赋予 Lambda 函数相应的 Permission Role.在这个示例中,我们只需要服务 Lambda 对应的 CloudWatch Logs 以及 Kinesis Firehose 的权限即可。
其次,Lambda 代码会对进入的 CloudWatch 日志的第一个 Base64 编码的转码并进行 gzip 解压(因为 Cloudwatch Logs 会对送往 Lambda 首先进行 Base64 编码并进行 gzip 压缩)。之后,Lambda 会对具体的日志进行汇聚,以 batch 的方式发送给 Kinesis Firehose。具体的代码如下:
代码中,利用环境变量 DELIVER_STREAM_NAME 传递 Kinesis Firehose Stream,详见步骤 3)。
最后,利用 AWS CloudWatch logs 的订阅功能,就可以实时地把日志发布到 Lambda 函数中了。
aws logs put-subscription-filter \
--log-group-name myLogGroup \
--filter-name demo \
--filter-pattern "" \
--destination-arn arn:aws:lambda:us-east-1:123456789123:function:helloworld\
具体的配置过程可以参考 http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/logs/Subscriptions.html
3.创建 Kinesis Fireshose 实现到 S3 的数据自动存储与汇聚。Kinesis Firehose 提供了自动对数据进行汇聚,目前支持 S3 和 Redshift, ElastiSearh。这里,我们利用控制台,十分简单地创建了如下一个 Firehose Stream:
图 2 Kinesis Firehose 配置过程
4.利用 Amazon Athena 进行数据查询。因为 Athena 底层是基于 Hive Catalog 对 S3 数据进行管理,上层基于 Presto 的方式进行 SQL 查询。因此我们首先需要使用 Hive 对 S3 的 VPC Flow Logs 进行外表 DDL 操作。具体代码如下:
我们在创建表的过程中,创建了 Year,Month, Day 与 Hour 的分区,是因为我们在实现 Firehose 的时候自动进行了时间和日期的前缀设置。同时,利用分区也可以大大提高 hive 的数据查询性能。
到这里,整个 Serverless 处理能力自适应的架构已经构建完成,来测试一下 Athena 的查询结果吧。 Athena 提供了 Web Console 让 BI 用户可以直接对 S3 数据湖进行查询,同时,用户也可以利用 JDBC 直接与第三方的 BI 工具集成实现自动化查询。查询结果也可以利用 CSV 的文件下载的方式直接分享给其他用户。
图 3 利用 Web Console 对 Athena 进行数据分析
作者介绍:
肖凌
AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内和全球的应用和推广,在大规模并发后台架构、跨境电商应用、社交媒体分享 、Hadoop 大数据架构以及数据仓库等方面有着广泛的设计和实践经验。在加入 AWS 之前曾长期从事移动端嵌入式系统开发,IBM 服务器开发工程师。并负责 IBM 亚太地区企业级高端存储产品支持团队,对基于企业存储应用的高可用存储架构和方案有深入的研究。
本文转载自 AWS 技术博客。
原文链接:https://amazonaws-china.com/cn/blogs/china/serverless-anylatics-platform-one-hour/
评论