零 ,基础知识 :

1 ,目的 :

用 emr 处理 s3 中的数据。

2 ,适用场景 :

  1. 适合 : 学习使用
  2. 为什么这篇文章的内容只适合学习用 : 没有详细配置
  3. 为什么不适合生产,我们还要看这篇文章呢 : 因为这篇文章讲解的是开发流程,先懂流程,才能看以后的细节。

3 ,5 大步骤 :

  1. 步骤 1:设置先决条件
  2. 步骤 2:启动集群
  3. 步骤 3:允许 SSH 访问
  4. 步骤 4:运行 Hive 脚本以处理数据
  5. 步骤 5:清理资源

4 ,什么是 Amazon EMR ?

  1. Amazon EMR 是一个托管集群平台。
  2. 可简化在 AWS 上运行大数据框架(如 Apache Hadoop 和 Apache Spark)。
  3. 可以处理和分析海量数据。
  4. 可以处理 s3 中的数据。

一 ,步骤 1 :设置示例集群的先决条件 (s3 + ec2)

1 ,创建一个 aws 账户

2 ,创建 Amazon S3 存储桶

  1. s3 桶和文件夹的名字的限制 :
    1 ,它们只能包含小写字母、数字、句点 (.) 和连字符 (-)。
    2 ,它们不能以数字结尾。
  2. 保存结果的文件夹必须为空的

3 ,创建存储桶,文件夹 :

  1. 登录 s3 :
    https://console.amazonaws.cn/s3/home?region=cn-northwest-1#
  2. 创建桶 :
    1 ,名称 : sflbucket
    2 ,权限 : 公共
  3. 创建文件夹 : hiveres
  4. 成功的标志 :

4 ,创建 Amazon EC2 密钥对 : 官网提供

  1. 我创建的是 linux 实例,所以采用 linux 操作系统的方式生成密钥对。
  2. 官方提供的教程网址 :
    https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ec2-key-pairs.html#having-ec2-create-your-key-pair

5 ,创建 Amazon EC2 密钥对 : 操作

  1. 进入 ec2 控制台 :
    https://cn-northwest-1.console.amazonaws.cn/ec2/home?region=cn-northwest-1#Home:
  2. 一顿操作,得到两个文件 :

6 ,启动 ec2 实例 : ( 我已经启动了,所以看到提示 )

hadoop中rm是什么意思 hadoop emr_bc

7 ,连接这个 linux 实例 : ( 我使用 crt 来连接 )

hadoop中rm是什么意思 hadoop emr_aws_02

8 ,简单运维 :

  1. 磁盘使用情况 : df -h
  2. 内存使用情况 :top
  3. cpu 个数 :
    cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l
  4. cpu 核心数 :
    cat /proc/cpuinfo| grep “cpu cores”| uniq
  5. 逻辑 cpu 个数 :
    cat /proc/cpuinfo| grep “processor”| wc -l
  6. 总线程数量 :
    grep ‘processor’ /proc/cpuinfo | sort -u | wc -l
  7. cpu 详细信息 :
    cat /proc/cpuinfo
  8. CPU占用最多的前10个进程
    ps auxw|head -1;ps auxw|sort -rn -k3|head -10
  9. 内存消耗最多的前10个进程
    ps auxw|head -1;ps auxw|sort -rn -k4|head -10
  10. 虚拟内存使用最多的前10个进程
    ps auxw|head -1;ps auxw|sort -rn -k5|head -10
  11. cpu 使用情况 :

二 ,步骤 2:启动实例 Amazon EMR 集群

1 ,目的 :

  1. 目的 : 快速启动
  2. 详细信息 : 下一篇文章讲解详细配置

2 ,进入 emr 控制台 :

https://cn-northwest-1.console.amazonaws.cn/elasticmapreduce/home?region=cn-northwest-1#

3 ,创建集群 :

  1. 创建集群 :
  2. 快速选项 : 简单配置 ( 我们下一篇再介绍复杂配置 )
  3. 集群名称 : 纯英文
  4. s3 创建日志文件夹 :
  5. 集群的日志自动复制到 s3 :
  6. 需求 : 我们需要的软件
    1 , zookeeper
    2 ,hadoop
    3 ,yarn
    4 ,hive
  7. 版本选择 : 需要包含我们需要的那些软件
    1 ,版本对照表 :
    https://docs.amazonaws.cn/emr/latest/ReleaseGuide/images/emr-releases-5x.png 2 ,我们选择的版本 :
  8. 选择我们创建的 ec2
  9. 分配角色 :

    10.创建集群 :
  10. 正在启动 :
  11. 正在运行 : 成功的标志

4 ,查看我们的集群 :

hadoop中rm是什么意思 hadoop emr_aws_03

5 ,点进去看看我们的集群信息 :

hadoop中rm是什么意思 hadoop emr_数据_04

三 ,步骤 3:允许从客户端到集群的 SSH 连接

1 ,目的 :

用 crt 连接集群的主节点 。

2 ,删除入站规则 : 此规则允许将 SSH 用于 ElasticMapReduce-master 安全组来进行公共访问

  1. 进入 emr 控制台,一顿操作

  2. 看到 :
  3. 删除 : 如果看到以下配置,就点击 X 删除掉
    1 ,类型 : SSH
    2 ,端口 : 22
    3 ,源 : 自定义 0.0.0.0/0

3 ,添加规则 :

  1. 添加规则 :
  2. 添加我们的本地的电脑的信息 :
  3. 在公司 :
    IP 地址是动态分配的,因此您可能需要定期编辑安全组规则以更新可信客户端的 IP 地址。
  4. 保存 :

4 ,连接 :

  1. IP : ec2-52-82-5-152.cn-northwest-1.compute.amazonaws.com.cn
  2. 用户名 : ec2-user
  3. 用 ert 连接 :
  4. 成功的标志 :

四 ,步骤 4:运行 Hive 脚本 ,处理数据,读 s3 数据

1 ,目的 :

通过以步骤形式运行 Hive 脚本来处理数据

2 ,示例数据 : jia.csv

  1. 造数据 : ( 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
  1. 文件名 : jia.csv
  2. 存储地址 : s3

3 ,hive 操作需求 :

  1. 创建名为 jia 的 Hive 表架构。
  2. 针对 jia 表运行 HiveQL 查询并将查询结果写入指定的 S3 输出位置。

4 ,进入 hive 命令行 :

  1. 切换 root 用户 :
    sudo -i
  2. 进入 beeline :
    beeline
  3. 连接 beeline 客户端 :
    !connect jdbc:hive2://localhost:10000
  4. 用户名 / 密码 : ( 象征性的 )
    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 ,查询数据 :

  1. sql :
select * from jia;
  1. 成功的标志 :

五 ,运行官方提供的 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. 数据的意义 :
    某网站的访问日志文件
  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 ,查看一共多少条 :

  1. sql
select count(1) from cloudfront_logs;
  1. 结果 :

4 ,浏览方式查询 :结果导出到 s3

  1. 需求 :
    1 ,将查询结果导出到 s3 。
    2 ,查询时间范围 : 2014-07-05 --> 2014-08-05
    3 ,分组 : 用浏览方式分组 ( 浏览器类型 )
    4 ,得到了什么 : 每种浏览方式一共多少条数据
  2. 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;
  1. 正确的结果 :

六 ,将 s3 中的脚本放到 emr 运行 :

1 ,添加步骤 :

hadoop中rm是什么意思 hadoop emr_.net_05

2 ,步骤设置 :

hadoop中rm是什么意思 hadoop emr_bc_06

七 ,清理资源 :

1 ,关闭掉保护 :

  1. 保护的作用 : 防止意外关闭
  2. 关闭掉保护 :

2 ,终止 :

hadoop中rm是什么意思 hadoop emr_hadoop中rm是什么意思_07