详细下载地址以及example jar包https://github.com/prestyan/Development-of-IOT-environment-and-tools

Linux下载命令:

sudo wget https://github.com/prestyan/Development-of-IOT-environment-and-tools/blob/8335e6bcbbc0ad6a8bdef72e6dcdc5ac3f91cc6b/WordCountTopN_Examples/WordCountTopN-2.jar

1、打开 IDEA,创建一个新的项目,在引导界面左侧选择 maven,java 需要选择


1.8 的版本,而不能选择 jdk14,否则会出现问题。因为需要在 linux 虚拟机中运行,所以需要选择可以与 hadoop 版本兼容的 java。而且 hadoop 命令运行的是一个 jar 包,所以需要使用 maven 将编写好的程序最后根据要求打成 jar 包,然后放到 linux 上面进行调试。

2、之后给项目命名为 WordCountTopN。


3、之后创建的项目当中,在左侧资源栏里面相对应 project 名字文件夹下会产生默认的 pom.xml 文件。将 groupid 与 artifactid 改成想要的名称。资源路径不用改变。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>


<groupId>dblab</groupId>
<artifactId>WordCountTopN</artifactId>
<version>1.0-SNAPSHOT</version>

</project>

4、由于 jar 包使用 hadoop 命令运行,且 IDEA 运行在 windows 环境下没有办法直接使用虚拟机中安装的 hadoop 包,所以需要添加运行 hadoop 命令的一些包,提供给java 程序可以调用的依赖和一些hadoop 方法。否则没有办法使用hadoop分布式计算平台进行数据处理。一种方式是可以直接把虚拟机中的一些文件拷贝过来,作为 libraries 引入,但是比较麻烦。这里选择直接配置 pom 文件,利用IDEA 提供的功能自动import 并解析所需资源与依赖。首先添加代码指明 hadoop版本。

5、添加所需依赖。

 

6、给 pom 文件添加打 jar 包的功能,即 build 选项。选择 java1.8,同时指明使用的编译器 maven-compiler-plugin 的版本号。

7、在 src 中添加 WordCountTopN 类,类中设置主函数。首先添加 MyMapper类,以实现将文章分割成一个个单词的功能,这个类实现功能与 wordcount 中一样,可以拷贝代码。

 

8、添加类 MyReducer,其实现的功能与单纯的 wordcount 有一定的区别。他除了将单个的同组单词组合起来写入内存中之外,还添加了一个判断的功能。在获取了参数 N 之后,如果内存空间 topN 中不满 N 个元素的话,可以直接往里面添加新的 key;如果 key 值有相同的,reducer 负责合并;如果有>=N 个不同的key,先放进去一个,然后删除掉一个。由于使用了 treeMap,一个按照 key 进行排序排序的 map,所以可以始终保证删去最后一个后仅仅剩下 TopN 个。

9、添加 clean up 函数,可以拷贝 wordcount 的代码。

10、在 main 函数中,需要将传递的参数 N 拿出来放入 conf 当中,方便其他函数使用的时候拿取。

11、设置好刚刚编写的 map 类与 reduce 类,传入对应的 job.set()中,并且设置好用户传入的输入位置与输出位置,这个可以参考 wordcount 代码。这里考虑了多输入情况,使得 WordCountTopN 适用于多输入。

12、点击 build,build artifact,然后选择 build,等待提示成功后就可以在 out 文件夹里找到 jar。

13、将 jar 包放入虚拟机,使用 hadoop 命令运行。由于在打包的时候没有设定主类,在运行时需要申明入口类 WordCountTopN。
hadoop jar ~/WordCountTopN.jar WordCountTopN 5 /input/passage /output/test

14、运行成功。

15、查看输出结果,可以看到当 N=5、10 的时候,分别输出了 Top5、Top10 个统计个数,说明 WordCountTopN 达到了目标要求。

hdfs dfs -ls /output/test/part-r-00000

16、改动代码中删除 key 的位置,还可以实现 WordCountBottomN。

我的参考链接:WordCountTopN源码(我的笔记举例Top3)_慕课手记 (imooc.com)

Logo

鸿蒙生态一站式服务平台。

更多推荐