15分钟

任务3 使用弹性MapReduce执行任务

任务目的

此任务将使用弹性MapReduce搭建Hadoop集群,完成对《水浒传》的词频分析。

任务步骤

1.创建EMR集群

登录弹性MapReduce购买页,如果是第一次购买的学员,会出现以下页面,只需按图示操作即可。

前往访问管理

在角色管理页面点击【同意授权】。

同意授权

回到页面,选择计费模式、地域、可用区、产品版本、以及相应组件。

可用区与软件配置

由于本次创建EMR集群用于实验,所以不勾选【启动高可用】。

不启动高可用

分别选择Master配置与Core配置。

选择硬件配置

Master节点配置:

Master节点配置

Core节点配置:

Core节点配置

配置如图,开启集群Master节点公网,选择集群网络,点击【下一步:基础配置】。

其余配置

在基础配置中输入集群名称,其余按照默认即可,设置密码,点击【购买】。

基础配置
购买

购买后会自动跳转到集群列表页面,这时,集群还在创建中。此时可以点击集群创建中右边的数字,查看创建进度。

查看进度

大概5到15分钟(创建时长与组件配置有关,选择组件越多,创建时间越长),集群就创建完毕了。

集群运行中

这时回到CVM控制台,实例名有master字样的即Master节点,点击Master节点CVM右边的【登录】,输入创建集群时设置的密码,点击【确定】。

Master节点
登录CVM
登录成功

安装pip以及jieba模块(EMR集群中的CVM一般默认安装了pip,如果提示已安装,则直接安装jieba模块)。

pip install jieba -i http://pypi.tuna.tsinghua.edu.cn/simple/  --trusted-host pypi.tuna.tsinghua.edu.cn

2.配置免密码ssh登录

通过ssh-keygen命令创建密钥,敲三次回车。

ssh-keygen

将密钥分发到自身以及两个Core节点上,密码都输入创建集群时设置的密码

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh-copy-id -i .ssh/id_rsa <core1内网IP>
ssh-copy-id -i .ssh/id_rsa <core2内网IP>

内网IP可以在CVM控制台查看。

查看集群内网IP
分发密钥

此时分别通过ssh连接两个Core节点并安装jieba模块,并退出。

ssh <core1内网IP>
pip install jieba
exit
ssh <core2内网IP>
pip install jieba
exit

3.执行命令

切换到hadoop用户,并进入/home/hadoop目录。

su hadoop
cd ~
切换用户,并进入用户目录

创建mapper.py文件与reducer.py文件,内容分别为任务1中的mapper.py文件与reducer.py文件,并添加可执行权限。

vi mapper.py
vi reducer.py
chmod +x mapper.py
chmod +x reducer.py

下载小说。

wget https://course-public-resources-1252758970.cos.ap-chengdu.myqcloud.com/%E5%AE%9E%E6%88%98%E8%AF%BE/%E5%BC%B9%E6%80%A7MapReduce%E5%AF%B9%E5%B0%8F%E8%AF%B4%E5%90%8D%E8%91%97%E8%AF%8D%E9%A2%91%E5%88%86%E6%9E%90/shuihuzhuan.txt

查看目录。

ls

此时可以先测试脚本是否可以正常执行。

cat shuihuzhuan.txt | ./mapper.py |./reducer.py

输出以下结果即为正常执行(可以使用Ctrl+C打断执行),如果无法执行,请检查脚本是否添加可执行权限,或者检查代码复制是否缺少某些部分。

测试脚本
目录结构

创建执行MapReduce作业所需的HDFS目录。

hdfs dfs -mkdir -p /user/hadoop

上传小说到该目录。

hdfs dfs -put shuihuzhuan.txt /user/hadoop

进入Hadoop Streaming的JAR包所在文件夹,查看文件,蓝色框标注的就是我们要使用的JAR包。

cd $HADOOP_HOME/share/hadoop/tools/lib/
ls
hadoop-streaming-2.7.3.jar

执行命令。

hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar\
 -mapper ~/mapper.py -file ~/mapper.py\
 -reducer ~/reducer.py -file ~/reducer.py \
 -input shuihuzhuan.txt -output out

这时我们可以去集群控制台,点击组件管理,点击YARN组件的【原生WebUI访问地址】。

访问YARN webUI地址

选择【高级】->【继续前往】。

有的情况下Chorme浏览器(如MacOS系统等)没有【继续前往...】的选项,则可以直接在当前页面通过键盘输入thisisunsafe字符(切换英文输入法直接输入即可)就能进入页面,或者使用其他浏览器(建议FireFox)。

直接访问

输入root以及创建集群时设置的密码。

输入用户名密码

当看到我们刚才的任务显示SUCCEEDED,则说明任务执行成功。

查看任务状态

回到CVM,我们的执行结果被保存到out文件夹中,所以现在需要将文件拉取到本地,拉取后可以看到本地有out文件夹。

cd ~
hadoop fs -get /user/hadoop/out ~/
ls ~/
输出的文件夹

查看输出的文件。

ls ~/out
输出文件

这时,输出的part-00000就是任务输出的结果,如果输出结果更大,那么也会出现part-00001part-00002等,以此类推。所以我们使用通配符来根据词频进行排序。

cat out/part-* | sort -rnk2,2 > sorted

输出最后一次排序中,每行长度大于等于2的第一个参数(也就是词语),并输出前50行。也就是说,我们输出了除单个字以及字符之外的前50的词频,如下图所示。

cat sorted | awk '{if(length($1)>=2) print $0}' | head -n 50

至此,对《水浒传》的词频分析任务执行完成。

输出结果

4.销毁集群

一般来说,临时型任务完成并保存结果后可以销毁集群节省资源。

销毁集群

点击【开始销毁】,即可销毁集群。

开始销毁