零 ,基础知识 :
1 ,目的 :
用 emr 处理 s3 中的数据。
2 ,适用场景 :
- 适合 : 学习使用
- 为什么这篇文章的内容只适合学习用 : 没有详细配置
- 为什么不适合生产,我们还要看这篇文章呢 : 因为这篇文章讲解的是开发流程,先懂流程,才能看以后的细节。
3 ,5 大步骤 :
- 步骤 1:设置先决条件
- 步骤 2:启动集群
- 步骤 3:允许 SSH 访问
- 步骤 4:运行 Hive 脚本以处理数据
- 步骤 5:清理资源
4 ,什么是 Amazon EMR ?
- Amazon EMR 是一个托管集群平台。
- 可简化在 AWS 上运行大数据框架(如 Apache Hadoop 和 Apache Spark)。
- 可以处理和分析海量数据。
- 可以处理 s3 中的数据。
一 ,步骤 1 :设置示例集群的先决条件 (s3 + ec2)
1 ,创建一个 aws 账户
2 ,创建 Amazon S3 存储桶
- s3 桶和文件夹的名字的限制 :
1 ,它们只能包含小写字母、数字、句点 (.) 和连字符 (-)。
2 ,它们不能以数字结尾。 - 保存结果的文件夹必须为空的
3 ,创建存储桶,文件夹 :
- 登录 s3 :
https://console.amazonaws.cn/s3/home?region=cn-northwest-1# - 创建桶 :
1 ,名称 : sflbucket
2 ,权限 : 公共 - 创建文件夹 : hiveres
- 成功的标志 :
4 ,创建 Amazon EC2 密钥对 : 官网提供
- 我创建的是 linux 实例,所以采用 linux 操作系统的方式生成密钥对。
- 官方提供的教程网址 :
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ec2-key-pairs.html#having-ec2-create-your-key-pair
5 ,创建 Amazon EC2 密钥对 : 操作
- 进入 ec2 控制台 :
https://cn-northwest-1.console.amazonaws.cn/ec2/home?region=cn-northwest-1#Home: - 一顿操作,得到两个文件 :
6 ,启动 ec2 实例 : ( 我已经启动了,所以看到提示 )
7 ,连接这个 linux 实例 : ( 我使用 crt 来连接 )
8 ,简单运维 :
- 磁盘使用情况 : df -h
- 内存使用情况 :top
- cpu 个数 :
cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l - cpu 核心数 :
cat /proc/cpuinfo| grep “cpu cores”| uniq - 逻辑 cpu 个数 :
cat /proc/cpuinfo| grep “processor”| wc -l - 总线程数量 :
grep ‘processor’ /proc/cpuinfo | sort -u | wc -l - cpu 详细信息 :
cat /proc/cpuinfo - CPU占用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k3|head -10 - 内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10 - 虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10 - cpu 使用情况 :
二 ,步骤 2:启动实例 Amazon EMR 集群
1 ,目的 :
- 目的 : 快速启动
- 详细信息 : 下一篇文章讲解详细配置
2 ,进入 emr 控制台 :
https://cn-northwest-1.console.amazonaws.cn/elasticmapreduce/home?region=cn-northwest-1#
3 ,创建集群 :
- 创建集群 :
- 快速选项 : 简单配置 ( 我们下一篇再介绍复杂配置 )
- 集群名称 : 纯英文
- s3 创建日志文件夹 :
- 集群的日志自动复制到 s3 :
- 需求 : 我们需要的软件
1 , zookeeper
2 ,hadoop
3 ,yarn
4 ,hive - 版本选择 : 需要包含我们需要的那些软件
1 ,版本对照表 :
https://docs.amazonaws.cn/emr/latest/ReleaseGuide/images/emr-releases-5x.png 2 ,我们选择的版本 : - 选择我们创建的 ec2
- 分配角色 :
10.创建集群 : - 正在启动 :
- 正在运行 : 成功的标志
4 ,查看我们的集群 :
5 ,点进去看看我们的集群信息 :
三 ,步骤 3:允许从客户端到集群的 SSH 连接
1 ,目的 :
用 crt 连接集群的主节点 。
2 ,删除入站规则 : 此规则允许将 SSH 用于 ElasticMapReduce-master 安全组来进行公共访问
- 进入 emr 控制台,一顿操作
- 看到 :
- 删除 : 如果看到以下配置,就点击 X 删除掉
1 ,类型 : SSH
2 ,端口 : 22
3 ,源 : 自定义 0.0.0.0/0
3 ,添加规则 :
- 添加规则 :
- 添加我们的本地的电脑的信息 :
- 在公司 :
IP 地址是动态分配的,因此您可能需要定期编辑安全组规则以更新可信客户端的 IP 地址。 - 保存 :
4 ,连接 :
- IP : ec2-52-82-5-152.cn-northwest-1.compute.amazonaws.com.cn
- 用户名 : ec2-user
- 用 ert 连接 :
- 成功的标志 :
四 ,步骤 4:运行 Hive 脚本 ,处理数据,读 s3 数据
1 ,目的 :
通过以步骤形式运行 Hive 脚本来处理数据
2 ,示例数据 : jia.csv
- 造数据 : ( id , name , sex , age , hobby )
1 sfl m 31 basketball
2 wtt f 27 ui
3 sswen m 3 falv
4 sswu m 4 army
5 sjw w 5 mishu
6 sjy w 6 kuaguozongcai
- 文件名 : jia.csv
- 存储地址 : s3
3 ,hive 操作需求 :
- 创建名为 jia 的 Hive 表架构。
- 针对 jia 表运行 HiveQL 查询并将查询结果写入指定的 S3 输出位置。
4 ,进入 hive 命令行 :
- 切换 root 用户 :
sudo -i - 进入 beeline :
beeline - 连接 beeline 客户端 :
!connect jdbc:hive2://localhost:10000 - 用户名 / 密码 : ( 象征性的 )
root
123456
5 ,建外部表,指定分隔符,从 s3 拉取数据 :
CREATE EXTERNAL TABLE IF NOT EXISTS jia(id int,name string,sex string,age int,hobby string) row format delimited fields terminated by '\t' LOCATION 's3://sflbucket/test';
6 ,查询数据 :
- sql :
select * from jia;
- 成功的标志 :
五 ,运行官方提供的 sql :读取官方数据
1 ,运行官方 sql :
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
)
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 's3://cn-northwest-1.elasticmapreduce.samples/cloudfront/data';
2 ,官方数据格式 :
- 数据的意义 :
某网站的访问日志文件 - 数据的样式 :
1 ,元数据
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
sql 查询到的数据 :
| 2014-08-05 | 14:59:52 | SFO4 | 4261 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-2.jpeg | 200 | - | Android | Opera | 3.0.9 |
| 2014-08-05 | 14:59:52 | LHR3 | 4252 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-1.jpeg | 200 | - | Linux | Lynx | 3.0.9 |
| 2014-08-05 | 14:59:52 | EWR2 | 4260 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-3.jpeg | 200 | - | Linux | Lynx | 3.0.9 |
| 2014-08-05 | 14:59:53 | SEA4 | 4260 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-2.jpeg | 200 | - | Android | Safari | 3.0.9 |
| 2014-08-05 | 14:59:53 | DUB2 | 4252 | 10.0.0.16 | GET | eabcd12345678.cloudfront.net | /test-image-1.jpeg | 200 | - | iOS | Firefox | 3.0.9 |
| 2014-08-05 | 14:59:54 | DUB2 | 4261 | 10.0.0.16 | GET | eabcd12345678.cloudfront.net | /test-image-1.jpeg | 200 | - | iOS | IE | 3.0.9 |
| 2014-08-05 | 14:59:54 | LAX1 | 4257 | 10.0.0.10 | GET | eabcd12345678.cloudfront.net | /test-image-1.jpeg | 200 | - | Linux | Lynx | 3.0.9 |
| 2014-08-05 | 14:59:54 | DFW3 | 4252 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-1.jpeg | 200 | - | iOS | Firefox | 3.0.9 |
| 2014-08-05 | 14:59:54 | DFW3 | 4251 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-3.jpeg | 200 | - | Android | Firefox | 3.0.9 |
| 2014-08-05 | 14:59:55 | HKG1 | 1 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-3.jpeg | 304 | - | iOS | Safari | 3.0.9 |
| 2014-08-05 | 14:59:55 | SEA4 | 4252 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-3.jpeg | 200 | - | Windows | IE | 3.0.9 |
| 2014-08-05 | 14:59:55 | SEA4 | 4260 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-2.jpeg | 200 | - | MacOS | Opera | 3.0.9 |
| 2014-08-05 | 14:59:56 | IAD2 | 4252 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-2.jpeg | 200 | - | Android | Lynx | 3.0.9 |
| 2014-08-05 | 14:59:56 | DUB2 | 4252 | 10.0.0.16 | GET | eabcd12345678.cloudfront.net | /test-image-1.jpeg | 200 | - | Windows | Opera | 3.0.9 |
| 2014-08-05 | 14:59:56 | IAD2 | 4261 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-2.jpeg | 200 | - | Windows | Opera | 3.0.9 |
| 2014-08-05 | 14:59:56 | HKG1 | 4260 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-2.jpeg | 200 | - | Android | Opera | 3.0.9 |
| 2014-08-05 | 14:59:56 | AMS1 | 4252 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-1.jpeg | 200 | - | Windows | Firefox | 3.0.9 |
| 2014-08-05 | 14:59:57 | DUB2 | 9 | 10.0.0.16 | GET | eabcd12345678.cloudfront.net | /test-image-1.jpeg | 304 | - | iOS | Safari | 3.0.9 |
| 2014-08-05 | 14:59:57 | AMS1 | 4260 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-1.jpeg | 200 | - | OSX | Chrome | 3.0.9 |
| 2014-08-05 | 14:59:57 | IAD2 | 4261 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-2.jpeg | 200 | - | Android | Lynx | 3.0.9 |
| 2014-08-05 | 14:59:57 | IAD2 | 4252 | 10.0.0.15 | GET | eabcd12345678.cloudfront.net | /test-image-2.jpeg | 200 | - | Windows | Safari | 3.0.9 |
3 ,查看一共多少条 :
- sql
select count(1) from cloudfront_logs;
- 结果 :
4 ,浏览方式查询 :结果导出到 s3
- 需求 :
1 ,将查询结果导出到 s3 。
2 ,查询时间范围 : 2014-07-05 --> 2014-08-05
3 ,分组 : 用浏览方式分组 ( 浏览器类型 )
4 ,得到了什么 : 每种浏览方式一共多少条数据 - sql :
INSERT OVERWRITE DIRECTORY 's3://sflbucket/res'
SELECT os, COUNT(*) count
FROM cloudfront_logs
WHERE dateobject BETWEEN '2014-07-05' AND '2014-08-05'
GROUP BY os;
- 正确的结果 :
六 ,将 s3 中的脚本放到 emr 运行 :
1 ,添加步骤 :
2 ,步骤设置 :
七 ,清理资源 :
1 ,关闭掉保护 :
- 保护的作用 : 防止意外关闭
- 关闭掉保护 :
2 ,终止 :