亚马逊AWS官方博客

Category: 分析

巧用Amazon EMR节省数据分析成本

Amazon EMR是云上的数据分析平台,通过Amazon EMR的图形化或命令行接口,用户可以快速搭建和部署基于Amazon EC2实例的数据分析系统,并能动态扩展集群。Amazon EMR也可以读写其他AWS数据存储服务,例如Amazon S3和Amazon DynamoDB。 最新版本的Amazon EMR涵盖的服务包括:Hadoop、Zeppelin、Tez、Ganglia、HBase、Pig、Hive、Presto、ZooKeeper、Sqoop、Mahout、Hue、Phoenix、Oozie、Spark、Flink、Hcatalog。利用以上Amazon EMR包含的众多服务,用户能够实现日志文件分析、流式数据分析、机器学习、工作流管理等任务。本文就用户最常用的日志文件分析任务,巧用Amazon EMR以节省数据分析成本。 三个关键点 第一,使用Amazon S3存储待分析数据。使用Amazon S3存储数据主要有以下几方面优势。 节约成本:相比使用HDFS集群,Amazon S3是单纯的存储服务,用户在存储数据文件的时候,只需要为使用的存储容量付费,无需为服务器及硬盘付费,而用机器搭建HDFS集群,这部分投入是必须的。 数据持久性高:旨在提供99.999999999%的数据持久性,最大化地降低了数据丢失的可能。 计算和存储分离:使用Amazon S3存储数据,实际上是实现了计算和存储的分离,这一点很关键,它使得Amazon EMR集群能够随时扩容、缩容、删除,降低了数据丢失的可能。 无需修改程序代码:与HDFS存储相比,用户并不需要修改程序的代码。以Hive建表语句为例,只需要将Location的位置改为Amazon S3的目录即可,即LOCATION‘s3://sampledata/userrecord/’ 第二,定时运行Amazon EMR集群。 日志文件分析这种批量数据处理的任务,并不是每时每刻都需要运行任务,可以每天定时运行Amazon EMR集群进行分析,分析完成后再将集群删除。与用户自己搭建数据分析集群相比,Amazon EMR让集群的创建非常容易,只需要一条命令即可搭建所需集群,这也让随时删除、随时创建集群具备可行性,如果没有Amazon EMR,相信用户不会将自己辛苦搭建起来的集群随便地删除。 定时运行集群与云计算的按需计费模式相结合,带来的最大优势就是节省成本。如果某个任务只需要1个小时就能得出分析结果,那么,与全天候运行的集群相比,定时运行的集群所节约的成本是非常可观的。 第三,利用外部存储。 元数据:本文所提供的方案中使用的是Hive表结构数据,将其存储在外部的数据库中是因为Amazon EMR集群是定时运行的,因此,其元数据不要存储在本地,否则Amazon EMR集群关闭后,元数据也将被删除。 计算结果:Amazon EMR定时运行产生的结果需要存储在外部,如Amazon S3中,或者存储在数据库中。 系统的架构 图1为一个典型架构,这里主要使用了Amazon EMR中的Hive、Presto及Sqoop服务,并利用Amazon RDS MySQL存储Hive元数据和查询结果数据。 在此架构中,Hive用来创建表,并维护表结构元数据,这些元数据被存储在Amazon RDS MySQL中。Presto用来执行查询,Presto利用Hive已经定义的表结构。Sqoop用来将Presto产生的结果数据转存到Amazon RDS的MySQL中。 以上这些步骤需要按照顺序在Amazon EMR每次启动的时候执行,实现这个顺序执行的功能,需要用到Amazon EMR的Step。在每一个Step中,用户可以自定义需要运行的任务,例如以上提到的Hive任务、Presto查询、数据转存等都可以放在Step中运行。 用户可以创建Amazon EMR集群,以及Amazon EMR集群创建成功后需要执行的Step,在一条AWS命令中事先写好,例如下面是一条简化过的命令,它创建了一个名为Loganaly的Amazon EMR集群,包含了Hive、Presto和Sqoop服务。Auto-terminate参数说明这个集群中所有的Step执行完成后,集群自动被删除。Configuration参数的内容指定了存储Hive元数据的数据库信息,例如IP、用户名等。Steps参数定义了所需要执行的任务。而在Instance-groups中定义了集群中机器的数量和配置。 aws–region cn-north-1 […]

Read More

利用Amazon Redshift构建新一代数据分析BI系统

本文主要介绍了Amazon Redshift新一代企业级云平台数据仓库服务,并结合实际的客户使用案例与场景描述了如何基于Amazon Redshift构建高可靠,性能优化,并且成本节约的数据仓库系统。因为Amazon Redshift优异的计算效率与性能,基于Amazon Redshift的BI系统被广泛地应用于互联网数据分析类场景,例如电商中产品维度报表的计算生成,社交类应用中用户画像计算与分析,或者用于替代传统的数据仓库的解决方案。 Amazon Redshift是性能优异并且完全托管的PB级别数据仓库服务。Amazon Redshift提供了标准SQL数据库访问接口,并且可以十分方便地与现有的主流商业智能数据分析工具整合,构建企业级数据仓库。 Amazon Redshift高性能硬件架构 Amazon Redshift底层硬件是基于高度定制化的高性能硬件节点,整个集群是由头节点(leader node,又称领导节点)与计算节点(compute node)的架构组成,如图1所示。其中,头节点负责与所有的客户端程序(标准SQL兼容的客户端,或者通过JDBC/ODBC访问的客户端应用)进行通信,并把对应的SQL命令进行编译后分发给底层的计算节点。同时,头节点还负责存储所有的数据仓库元数据(metadata)。需要注意的是,所有的计算节点同时也是存储节点(单个节点最大支持2TB的存储量)。每个计算节点上配置有定制化的高性能CPU、内存及直接连接硬盘的存储介质。当用户数据仓库的数据量增加的时候,可以通过动态地增加计算节点的数目,以及升级对应计算节点的硬件配置提升集群的存储容量与计算能力。同时,节点与节点的通信是基于AWS定制化的高速内网带宽,减少了因为数据传输带来的时延,提高了计算效率。 图1 Amazon Redshift架构示意图 目前,Amazon Redshift主要支持两大类计算节点类型——DS1/DS2与DC1。其中DS类型节点是为大数据量的工作复杂优化而设计,而且DS2是DS1的硬件升级版本。DC1主要应用于数据计算要求相对更高但是数据总量相对较小的场景。 从应用的角度结合上述架构看,Amazon Redshift的头节点负责基本的SQL编译,查询计划的优化,以及数据仓库原数据的存储。所有的用户数据会以列式存储的方式存放与计算节点之上。因为大部分数据仓库的应用计算围绕于具体的属性列做查询筛选,所以列式存储的计算方式大大提高了数据仓库的计算效率。同时,以MPP的架构组织数据为例,Amazon Redshift也从表设计的角度为用户提供了数据在计算节点的存放方式,用户可以根据具体的SQL表中的键值做分布式存放,或者对某些常用维度表做所有计算节点的全分布存放,从而大大减少数据在节点之间的传输,以提高整体的计算效率。从图1还可以看到,计算节点以MPP的方式并行的从Amazon S3、Amazon DynamoDB、SSH及Amazon EMR并发的实现数据快速加载。另外,Amazon Redshift的整体设计实现了数据的多份冗余存放(对用户使用量透明)——计算节点之间冗余存放,同时定期对数据以增量快照的方式存放于高持久度的Amazon S3之上。 基于Amazon Redshift的BI大数据分析架构 Amazon Redshift针对数据仓库提供了优异的计算与存储效率,利用Amazon Redshift托管服务可以十分方便地构建智能数据仓库系统。同时,因为AWS云计算平台提供了一整套完整的数据分析套件与工具,利用这些组件与Amazon Redshift相结合,可以十分轻松地实现性能优化、成本经济、可靠性强、安全度高的大数据分析架构。图2为一个典型的数据分析平台的基础数据架构。 图2 基于AWS数据分析组件的数据架构 图2中的架构是基于AWS的典型的实时与批量叠加的大数据分析架构。其中Amazon Kinesis是托管的高速实时流分析服务,可以从前端的应用服务器(例如Web服务器)或者移动的客户端(手机等移动设备或者IoT设备)直接注入流式数据,数据可以通过EMR进行流式处理和计算(例如基于Spark Stream的EMR计算框架),并将数据存储于Amazon DynamoDB或者对象存储S3之上。其中,Amazon DynamoDB是托管的高性能NoSQL数据库,可以承载100TB数据量级别而响应时间低于10毫秒。S3作为高可靠(11个9的持久度)的对象存储,在大量的AWS应用场景中,被作为典型的数据湖(data lake)的应用。利用Amazon EMR对S3上的原始数据进行基本的ETL或者结构化操作之后,可以直接从S3以SQL的“copy”命令复制到Amazon Redshift数据仓库中进行SQL的维度计算。另外,可以利用AWS集成的BI分析工具(Quick Sight)或者已有的商业套件直接实现对Amazon Redshift上的数据进行分析与展示。 在实际的业务场景中,数据库的来源包含Amazon DynamoDB或者Amazon RDS这类业务数据库,以及用户活动日志或者行为日志等Web前端日志。这些数据需要以增量的方式汇聚于AWS S3及ETL之后进入到Amazon Redshift之中。常用的做法,可以利用AWS的Data Pipeline服务直接定义对应的原端数据源及对应的后端数据目标,自定义采集周期,一次性配置之后就可以直接进行数据通路的增量拷贝。 小红书电商基于Amazon Redshift的用户数据分析 小红书是新一代的社区电商,它将海外购物分享社区与跨境电商相结合,精准捕捉85后和90后的消费升级需求,迅速发展成为极具影响力的全球购物分享社区。目前小红书的注册用户数量已超过1800万,其中近90%是女性、超过50%是90后。作为新一代消费人群,这些用户有着共同的价值观,更注重感觉和体验,对优质商品和生活充满向往。“社区+电商”的模式推动了小红书的快速发展,在电商平台成立的半年内,其销售额就达到7亿人民币。 与小红书自身高速发展的业务模式一样,小红书的数据架构与数据分析团队也经历了从基本日志服务器脚本分析到目前利用Amazon […]

Read More

如何在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。具体的代码如下: […]

Read More

Amazon QuickSight全面上线——更快更易用的大数据商务分析服务

经过超过1500家企业级客户(包括初创企业及全球化大公司)的预览之后,我兴奋地向大家宣布,Amazon QuickSight目前已经正式上线!在去年发给大家的预览版本邀请当中,我曾经写道: 过去,商务智能一直是一项需要投入巨大时间与精力之后才能实现的工作。大家需要承担相关成本,设置并运行基础设施及软件,管理规模化体系(而用户往往因此受到负面影响)并投入大量资金招聘顾问以进行数据模拟。即便如此,您的用户仍然要在复杂的用户界面中挣扎,而且渴望能能在移动设备上探索数据却无法被满足。打算访问NoSQL与流数据?只能说祝大家好运了! Amazon QuickSighthttps://quicksight.aws/能够为大家提供速度可观、易于使用的云支持型商业分析方案,且其实现成本仅为传统内部解决方案的十分之一。QuickSight允许大家在数分钟之内开始操作。您只需要进行登录、指定数据源,而后即可对数据进行可视化处理。在场景之下,SPICE(即超高速、并行、内存内计算引擎)将以迅如闪电的速度运行您的查询请求,并提供极为出色的数据可视化成果。 深入挖掘数据 在与客户的交流当中我们深切感受到:每位客户都表示希望能从其存储的数据当中获取更多价值。他们意识到,如今蕴含于数据当中的潜在价值正愈发显露。但同时,他们又失望地得知:发现并提取这些价值,需要高昂成本且实现难度极大。内部商业分析工具的使用许可会带来大量开销,同时给现有基础设施造成沉重的负载压力。许可成本与工具复杂性制约着用户群体,事实上只有少数专家能够顺畅使用这些方案。综合来讲,上述因素共同导致大多数企业认为:自己尚没有准备好投资构建一套真正的商业分析功能组合。 QuickSight的构建目标正在于此!它能够以“服务”形式运行,并将商业分析能力交付至任意规模与形式的企业客户手中。其速度极快且易于使用,不会给现有基础设施带来额外运行负担,同时可以每用户9美元的低廉价格,按月进行付费。 上手之后,大家会发现QuickSight允许大家对存储在多种不同服务及位置的数据进行处理。大家可以直接使用来自Amazon Redshift数据仓库、Amazon关系型数据库服务(简称RDS)中各关系数据库以及S3内的普通文件。大家亦能够使用一系列连接器以访问存储于内部MySQL、PostgreSQL以及SQL Server数据库、微软Excel电子表格、Salesforce乃至其它服务中的数据。 QuickSight在设计当中亦充分考虑到客户的扩展需求。大家可以随时添加更多用户、数据源以及数据集,同时无需购买任何长期许可或者向数据中心内添加更多硬件设备。 马上开始 下面我们将展开一番QuickSight游历。由于已经得到管理员的许可,所以我可以直接登录QuickSight并开始操作。以下为QuickSight的主界面: 我首先选择从Redshift集群当中提取数据。这里点击Manage data并查看我的现有数据集: 我没有看到我所需要的数据集,所以点击New data set并查看相关选项: 而后点击Redshift(手动连接)并输入登录凭证,这样即可访问我的数据仓库(如果该Redshift集群运行在我的当前AWS账户之内,则可自动发现此来源): QuickSight会查询该数据仓库并显示相关模式(表组)以及当前可用的表。这里我选择public模式以及all_flights表作为示例: 现在我拥有两个选项。我可以将表提取至SPICE进行快速分析,亦可直接对其进行查询。这里我选择将其提取至SPICE: 这里还是两个选项。我可以点击Edit/Preview data(编辑/查看数据)并选择需要导入的行及列,亦可点击Visualize(可视化)导入全部数据并对其加以处理。这里我选择Edit/Preview。可以看到各字段(图片左侧),而后我可以利用勾选框仅选定自己感兴趣的部分: 另外,我也可以点击New Filter(新过滤器),从弹出菜单内选定一个字段,而后创建一套过滤机制: 两个选择(选择字段以及按行过滤)都允许我控制需要提取至SPICE的具体数据。通过这种方式,我可以控制需要进行可视化处理的数据,亦能帮助我更为高效地利用内存资源。在做好处理准备之后,我点击Prepare data & visualize(准备数据&可视化)。这时,数据会被加载至SPICE当中,而我则可随时对其进行可视化处理。我简单选择了一个字段作为演示。举例来说,我可以选择origin_state_abbr字段并查看各州拥有多少航班: 右侧的缩短视图能够为我提供一些额外上下文信息。我可以上下滚动或者选定需要显示的值区间。我也可以点击次级字段以了解更多信息。这里我点击flights,将排序设置为descending(降序),而后滚动至顶部。现在,我可以查看数据中由每个州起飞的具体航班了: QuickSight的AutoGraph功能会自动根据所选定的数据生成一份对应的可视化图表。举例来说,如果我添加fl_date字段,则会得到一份以时间为轴的各州航班数量图表: 根据我的查询、数据类型以及数据属性,QuickSight还能够提供其它可视化选项: 我还能够自行选择多种视觉类型,包括纵向&横向条形图、线图、透视图、树状图、饼状图以及热度图等: 在完成可视化图表的创建之后,我可以捕捉图表内容并利用结果故事板构建对应的数据驱动型故事: 我亦能够将自己的可视化成果共享给其他同事: 最后,我的可视化成果可通过自己的移动设备进行查看: 价格与SPICE容量 QuickSight永久提供一个免费用户与1 GB免费SPICE容量。这意味着每一位AWS用户都能够在无需承担任何成本的前提下分析数据并获取商业洞察结论。Amazon QuickSight的标准版起步价格为每月9美元,其中包含10 GB SPICE容量(请参阅QuickSight Pricing页面以了解更多细节信息)。 SPICE容量管理工作非常轻松易行。我只需要在菜单当中点击Manage QuickSight即可(当然,必须具备ADMIN角色方可执行修改): 而后我可以看到自己的当前容量状态: 我可以点击Purchase more capacity(购买更多容量): 我也可以点击Release unused purchased capacity(释放未使用的已购容量),从而削减我当前拥有的SPICE容量: 已经全面上线 […]

Read More

手把手教你使用Amazon EMR进行交互式数据查询

本文将带您一步步完成一个利用Amazon EMR进行交互式数据查询的实例,过程包括数据的注入、数据的分析、结果的转存、以及将整个过程自动化的方法。其中涉及的EMR组件主要包括: Hive, Hadoop, presto, sqoop。除EMR外,涉及到的其他服务包括:S3, RDS. 本文所使用的数据源是cloudfront产生的日志。 在按照本文档进行操作之前,读者需了解S3,RDS并能够进行基本的S3,RDS的操作,读者需了解EMR的基本概念。以下是参考资料: 什么是EMR: Amazon Elastic MapReduce (Amazon EMR) 是一种托管数据分析服务的框架,提升企业、研究人员、数据分析师和开发人员轻松、经济高效掌控海量数据的能力。其当前版本中托管的服务包括:Hadoop, Zeppelin, Tez, Ganglia, HBase, Pig, Hive, Presto, ZooKeeper, Sqoop, Mahout, Hue, Phoenix, Oozie, Spark, Hcatalog. EMR让您专注于数据分析,无需担心费时的集群设置、管理或调整,也无需担心所需要的计算能力。 具体参考: https://aws.amazon.com/cn/documentation/elastic-mapreduce/ 什么是S3: Amazon Simple Storage Service (Amazon S3) 为开发人员和 IT 团队提供安全、耐用且高度可扩展的对象存储。S3 可为EMR提供文件存储服务。 具体参考:https://aws.amazon.com/cn/documentation/s3/ 什么是RDS: Amazon Relational Database Service (Amazon RDS) 是一种可让用户在云中轻松设置、操作和扩展关系数据库的 Web […]

Read More

AWS Kinesis的Javascript交互方法

一.介绍 Amazon Kinesis 是一种托管的弹性可扩展服务,能实时处理大规模的流数据。在该服务收集大数据记录流后,可用多种数据处理应用程序实时处理该数据流。Amazon Kinesis Streams 每小时可从数十万种来源中连续捕获和存储数 TB 数据,如网站点击流、财务交易、社交媒体源、IT 日志和定位追踪事件。Amazon Kinesis Streams 数据流的吞吐量每小时可从数 MB 扩展到数 TB,PUT 记录每秒钟可从数千次扩展到数百万。您可以随时根据您的输入数据量动态调节数据流的吞吐量。 AWS为旗下的服务提供了多种开发工具包,支持包括Java、PHP、Python、Ruby、浏览器端等语言或平台。对于Amazon Kinesis,我们除了使用上述的Stream API进行开发外,AWS还提供了Amazon Kinesis Client Library (KCL) 开发适用于 Amazon Kinesis Streams 的使用器应用程序。在本文当中,我们展示如何使用Javascript在浏览器端与Amazon Kinesis进行交互,包括把记录Put到Kinesis,和从Kinesis读取记录。 二.基本概念与限制 在阐述如何AWS Kinesis的Javascript交互方法前,我们有必要对Kinesis Stream当中的关键概念——“分片”和“数据记录”作初步的了解。 分片 分片Share是流中数据记录的唯一标识组。一个流由一个或多个分片组成,每个分片提供一个固定的容量单位。流的总容量是其分片容量的总和。每个分片对应提供 1 MB/s 的写入容量和 2 MB/s 的读取容量。需要注意的是,每个分片可支持最多1000条记录/s的写入,和5个事务/s的读取。用户需要根据上述的容量和数目的限制,为流添加足够多的分片数目,以满足自身需求。 数据记录 数据记录是存储在 Amazon Kinesis Stream中的数据单位。数据记录由序列号、分区键和数据 Blob 组成。 每个数据记录都有一个唯一的序列号。当应用程序对Amazon Kinesis Stream进行写入记录时,Streams将自动为其分配序列号。同一分区键的序列号通常会随时间变化增加;写入请求之间的时间段越长,序列号则越大。但需要注意的是,序列号不能用作相同流中的数据集的索引。用户如果需要在逻辑上分隔数据集,请使用分区键或为每个数据集创建单独的流。 分区键Partition Key用于按分片对流中的数据进行分组。Streams 服务使用与每条数据记录关联的分区键将属于流的数据记录分为多个分片,以便确定给定的数据记录所属的分片。分区键是最大长度限制为 […]

Read More