开发者学堂课程【DataWorks一站式大数据开发治理平台精品课程:10.EMR-MR 节点 WordCount 案例演示】与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/81/detail/1247
10.EMR-MR 节点 WordCount 案例演示
内容介绍
一、需求准备
二、IDE开发MR作业
三、OSS
四、Dataworks
五、实操
内容简介:
实现:基于 EMR 在 DataWorks 上使用 MR 节点实现分布式单词个数统计(以存储在OSS上为例)。实操一共分为4个步骤,第一步是需求准备,配置好 Dataworks EMR引擎,准备原始数据以及预期结果。第二步是在ide上面开发mr的作业,添加 poem 依赖,编写代码打jar包。第三步在oss上面新建存储路径以及上传原始数据。第四步在 Dataworks 上提交资源,提交资源,新建 emr-mr 的任务,执行任务,最后查看结果。
一、需求准备
1、原始数据
Input01.txt
1 hadoop emr hadoop dw
2 hive hadoop
3 dw emr
2、预期结果
1 wordcount
2 dw2
3 hadoop 3
4 emr2
5 hive 1
准备了一个 Input01.tx 的文件,里面一共是三行数据,8个单词预期的结果是统计出每1个单词的个数。
二、IDE开发MR作业
1、添加pom依赖
hadoop 依赖可以在 EMR 管控台查看集群版本。添加的是2.8.5的版本,因为 emr集群用的是2.8.5的。
2、编写程序,打jar包
要在 MapReduce 中读写 OSS ,需要配置如下的参数。
3、WordCount代码:
JAVA 代码为例,将 Hadoop 官网 WordCount 例子做如下修改。对该实例的修改只是在代码中添加了 AccessKey ID 和 AccessKey Secret 的配置,以便作业有权限访问OSS 文件。
三、OSS
原始数据上传至OSS
在 OSS bucket 中建/emr/datas/wordcount02/inputs目录,存入原始数据。顺便新建一个/emr/jars 目录 ,等下存放 jar 资源。里面存储的是 input01.txt 数据。
四、Dataworks
1、提交jar资源
(1)依赖在业务流程 EMR 引擎下,新建 EMR jar 资源,存储在 oss bucket的/emr/jars目录下(首次使用需要一键授权) , 提交。
(2)先新建一个业务流程,在业务流程下面有一个 EMr 的模块,模块下面找到资源,新建以后直接上传刚刚打好的jar包,路径是选择 oss,如果是首次使用,需要点一键授权,那路径就是新建的 emr jars 路径。注意,新建完后需要点提交,这样才可以提交到oss上面。是新建MR的review的任务,那在同样是业务流程下面找到数据开发,新建节点一m二m二点,使用已编辑代码内容,是以使用了引用资源的方式,找到刚刚那个新建的加资源,右键引用资源,那就会出现两行代码。
2、新建MR任务
(1)在业务流程EMR引擎下,新建 EMR MR 节点。
(2)用引用资源的方法调用jar包。
(3)编辑,执行EMR-MR命令。##@resource_reference{"onaliyun_mr_wordcount-1.0-SNAPSHOT.jar"}
onaliyun_mr__wordcount 1.0-SNAPSHOT.jar cn.apache.hadoop.onaliyun.examples.EmrWordCount oss://onaliyun-bucket-2/emr/datas/wordcount02/inputs oss://onaliyun-bucket 2/emr/datas/wordcount02/outputs
那补充后面的主路径以及输入路径和输出路径,输入是 input,输出是 output,要保证 output 在 oss 上面是不存在的,编辑完以后就可以直接点运行来执行,执行成功以后可以查看结果。
3、查看结果
返回 OSS 控制台,就会有一个 output 的目录,点开以后就会有三个 part 可以下载下来看结果,为了方便查看可以在 dataworks 上面建 hive 的外表,先建一个:新建 EMR HIVE 节点,建挂载在 OSS 上的 hive 外表,读取表数据。可以看到代码:
CREATE EXTERNAL TABLE IF NOT EXISTS wordcounte2_ result_ tb
(
‘word' STRING COMMENT '
单词
' ,
‘cout’STRING COMMENT '
技数'
)
ROW FORMAT delimited fields terminated by’ \t ‘
location'oss://onaliyun-bucket-2/emr/datas/wordcounte02/0utputs/';
SELECT * FROM wordcount02_ result_ tb;
得到结果集。
五、实操
1、新建一个项目,onaliyun emr wordcount03。
2、配置 poem 的依赖,依赖可以去官方文档上找,可以进入 emr 的官方文档,EMr的官方文档下面有个mapreduce开发手册,复制以下代码:
<dependency>
<groupId>org . apache . hadoop</groupId>
<artifactId>hadoop- mapreduce-cl ient -common</arti factId>
<version>2.6.0</version>
</ dependency>
<dependency>
<groupId>org . apache . hadoop</groupId>
<artifactId>hadoop- common</artifactId>
<version>2.6. 0</version>
</dependency>
3、版本用的是2.8.5,可以到那个 emr 的集群上面看一下。所以把版本改成2.8.5。4、因为要打jar包,所以还要加一个依赖,加一个插件,插件可以随便网上找一个,编写程序,建一个Java class文件路径复制,代码也去Emr的官方文档上面找,它有详细的解释,可以把直接复制下来,先导入一下。
5、ac信息需要改成自己的,endpoint也要改成自己的信息,oss的控制台上可以直接查看,主要看是在哪个region上对应的,就使用哪个endpoint就可以。onaliyun emr_wordcount03-1.0- SNAPSHOT,jar这个是准备要上传的jar包,如果没有可以创建一个bucket,如果有就用原来那个,路径是放在这的,可以新建目录。wordcount03/datas/inputsl
6、在这个路径下面上传原始数据,可以先看一下原始数据,原始数据如下:
hadoop emr hadoop dw
hive hadoop
dw emr
7、上传成功,返回到datas的目录下面,新建一个放jar包的。
8、 oss准备好了,登录 Dadestudio,也是上海瑞金的,项目已经配置好了emr的引擎,检查一下,主要使用的是zn_demo集群,需要先新建一个业务流程。aaa emr_wordcount。
9、打开业务流程下面有个Emr的模块,因为项目有两个引擎,所以会有两个引擎的信息,主要使用的是emr_ onallyun emr_ clus这个。新建资源emrjar,点击上传jar包,之前演示的没有配置ak,所以用已经准备好了的jar包,这个已经配置了ak信息。
8、因为需要全局,所以加一个没有的名字,选择引擎实例,存储在oss上,如果是第一次使用,点一键授权,已经授权过了,所以直接选择 bucketcount03,新建。
9、原始数据还不在oss上面,提交上去,可以看到已经存在了。
10、数据开发,新建emr任务,demo wordcount03。
11、引擎还是选择原来的那个,使用引用资源的方式,右键引用资源,它就会多出这两行代码,补齐代码,输入和输出的路径。检查没有问题后执行。显示执行成功,回到oss看一下,可以下载一个看一下。Dit2,为了方便查看,新建emrhive节点,复制语句。
DROP TABLE IF EXISTS wordcount03 result_ tb;
CREATE EXTERNAL TABLE IF NOT EXISTS wordcount03_ result_ tb
(
' word' STRING COMMENT‘
单词
',
’cout‘ STRING COMMENT '
计数
'
)
ROW FORMAT delimited fields terminated by 'lt '
location'oss://onaliyun-bucket-2/emr/wordcount03/datas/outputs/';
SELECT * FROM wordcount03 result tb;
12、执行,得到的结果和预期的相似。