Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

步骤 3:准备示例数据和脚本

此教程已为您提供了示例数据和示例脚本。但是,本步骤仍将介绍它们,以帮助您理解它们在使用 Amazon EMR 分析数据的整个过程中所起的作用。

示例数据概述

示例数据是一系列 Amazon CloudFront Web 分配日志文件。数据存储在 Amazon S3 中:s3://region.elasticmapreduce.samples,其中,region 是您的区域。

CloudFront 日志文件中的每个条目都采用以下格式提供有关单个用户请求的详细信息:

2014-07-05 20:00:00 LHR3 4260 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-1.jpeg 200 - Mozilla/5.0%20(MacOS;%20U;%20Windows%20NT%205.1;%20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9

示例 Hive 脚本概述

此示例脚本计算指定时间段内每个操作系统的请求总数。脚本使用 HiveQL (一种类似 SQL 的脚本语言) 实现数据仓库和分析。脚本存储在 Amazon S3 中:s3://region.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q,其中,region 是您的区域。

此示例 Hive 脚本执行以下操作:

  • 创建名为 cloudfront_logs 的 Hive 表。

  • 使用 EMRFS 从 Amazon S3 读取 CloudFront 日志文件并使用正则表达式序列化程序/反序列化程序 (RegEx SerDe) 分析 CloudFront 日志文件。

  • 将分析结果写入 Hive 表 cloudfront_logs

  • 针对数据提交 HiveQL 查询以检索每个操作系统在给定时间范围内的总请求数。

  • 将查询结果写入您的 Amazon S3 输出存储桶。

创建表的 Hive 代码如下所示:

CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( DateObject Date, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, OS String, Browser String, BrowserVersion String )

使用 RegEx SerDe 分析日志文件的 Hive 代码如下所示:

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION '${INPUT}/cloudfront/data/';

HiveQL 查询如下所示:

INSERT OVERWRITE DIRECTORY '${OUTPUT}/os_requests/' SELECT os, COUNT(*) count FROM cloudfront_logs WHERE dateobject BETWEEN '2014-07-05' AND '2014-08-05' GROUP BY os;