详细下载地址以及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 的版本号。

8、添加类 MyReducer,其实现的功能与单纯的 wordcount 有一定的区别。他除了将单个的同组单词组合起来写入内存中之外,还添加了一个判断的功能。在获取了参数 N 之后,如果内存空间 topN 中不满 N 个元素的话,可以直接往里面添加新的 key;如果 key 值有相同的,reducer 负责合并;如果有>=N 个不同的key,先放进去一个,然后删除掉一个。由于使用了 treeMap,一个按照 key 进行排序排序的 map,所以可以始终保证删去最后一个后仅仅剩下 TopN 个。
9、添加 clean up 函数,可以拷贝 wordcount 的代码。
11、设置好刚刚编写的 map 类与 reduce 类,传入对应的 job.set()中,并且设置好用户传入的输入位置与输出位置,这个可以参考 wordcount 代码。这里考虑了多输入情况,使得 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。

被折叠的 条评论
为什么被折叠?



