亚马逊AWS官方博客

如何在1个小时之内轻松构建一个Serverless 实时数据分析平台

数据分析平台,特别是实时数据分析,正在被越来越广泛的应用于各个行业。 举例来说,游戏公司在发布新游戏之后,需要实时定位用户的留存、增长等情况;快销公司需要精确地记录每一笔订单的情详情,并结合社交媒体,实时分析促销活动引起的用户购买行为与销量等等。基于这些需求, 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亚太地区企业级高端存储产品支持团队,对基于企业存储应用的高可用存储架构和方案有深入的研究。