MapReduce WordCount程序实践(IDEA版)

环境

Linux:Hadoop2.x

Windows:jdk1.8、Maven3、IDEA2021

步骤

编程分析

在这里插入图片描述

编程分析包括:
1.数据过程分析:数据从输入到输出的过程分析。
2.数据类型分析:Map的输入输出类型,Reduce的输入输出类型;
编程分析决定了我们该如何编写代码。

新建Maven工程

打开IDEA–>点击File–>New–>Project在这里插入图片描述

选择Maven–>点击Next
在这里插入图片描述

选择一个空目录作为项目目录,目录名称例如:wordcount,建议目录路径不包含中文和空格,点击Finish

在这里插入图片描述

添加依赖

修改pom.xml,添加如下依赖

    <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.3</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.3</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.3</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-core</artifactId><version>2.7.3</version></dependency></dependencies>

在这里插入图片描述

加载依赖
在这里插入图片描述

新建包

src\main\java目录下,新建包:org.example
在这里插入图片描述

填入org.example,效果如下:
在这里插入图片描述

新建类

org.example包下,新建出三个类,分别为:MyMapperMyReducerMyMain,效果如下:

在这里插入图片描述

编写Map程序

编辑MyMapper类,步骤如下:

1.继承Mapper
2.重写map()方法
3.编写Map逻辑代码:1.v1由Text类型转换为String2.按空格进行分词:split(" ")方法3.输出k2, v2

在这里插入图片描述

编写Reduce程序

编辑MyReducer类,步骤如下:

1.继承Reducer
2.重写reduce()方法
3.编写Reduce逻辑代码:1.k4 = k32.v4 = v3元素的和3.输出k4, v4

在这里插入图片描述

编写Main程序(Driver程序)

编辑MyMain类,步骤如下:

1. 创建一个job和任务入口(指定主类)
2. 指定job的mapper和输出的类型<k2 v2>
3. 指定job的reducer和输出的类型<k4  v4>
4. 指定job的输入和输出路径
5. 执行job

在这里插入图片描述

思考

代码编写完成后,可以先在Windows本地运行吗?

打包

在这里插入图片描述

看到BUILD SUCCESS为打包成功

在这里插入图片描述

打包后得到的jar包,在项目的target目录下

在这里插入图片描述

提交到Hadoop集群运行

1.将上一步打包得到的jar包,上传到linux

在这里插入图片描述

2.启动hadoop集群

start-all.sh

3.运行jar包

从Linux本地上传一个文件到hdfs

hdfs dfs -put 1.txt /input/1.txt

hdfs查看输入数据
在这里插入图片描述

运行jar包

hadoop jar wordcount-1.0-SNAPSHOT.jar org.example.MyMain /input/1.txt /output/wordcount

正常运行过程输出如下:

[hadoop@node1 ~]$ hadoop jar wordcount-1.0-SNAPSHOT.jar org.example.MyMain /input/1.txt /output/wordcount
22/03/29 00:23:59 INFO client.RMProxy: Connecting to ResourceManager at node1/192.168.193.140:8032
22/03/29 00:23:59 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
22/03/29 00:24:00 INFO input.FileInputFormat: Total input paths to process : 1
22/03/29 00:24:00 INFO mapreduce.JobSubmitter: number of splits:1
22/03/29 00:24:01 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1648484275192_0001
22/03/29 00:24:01 INFO impl.YarnClientImpl: Submitted application application_1648484275192_0001
22/03/29 00:24:01 INFO mapreduce.Job: The url to track the job: http://node1:8088/proxy/application_1648484275192_0001/
22/03/29 00:24:01 INFO mapreduce.Job: Running job: job_1648484275192_0001
22/03/29 00:24:08 INFO mapreduce.Job: Job job_1648484275192_0001 running in uber mode : false
22/03/29 00:24:08 INFO mapreduce.Job:  map 0% reduce 0%
22/03/29 00:24:12 INFO mapreduce.Job:  map 100% reduce 0%
22/03/29 00:24:17 INFO mapreduce.Job:  map 100% reduce 100%
22/03/29 00:24:19 INFO mapreduce.Job: Job job_1648484275192_0001 completed successfully
22/03/29 00:24:19 INFO mapreduce.Job: Counters: 49File System CountersFILE: Number of bytes read=55FILE: Number of bytes written=237261FILE: Number of read operations=0FILE: Number of large read operations=0FILE: Number of write operations=0HDFS: Number of bytes read=119HDFS: Number of bytes written=25HDFS: Number of read operations=6HDFS: Number of large read operations=0HDFS: Number of write operations=2Job Counters Launched map tasks=1Launched reduce tasks=1Data-local map tasks=1Total time spent by all maps in occupied slots (ms)=2290Total time spent by all reduces in occupied slots (ms)=2516Total time spent by all map tasks (ms)=2290Total time spent by all reduce tasks (ms)=2516Total vcore-milliseconds taken by all map tasks=2290Total vcore-milliseconds taken by all reduce tasks=2516Total megabyte-milliseconds taken by all map tasks=2344960Total megabyte-milliseconds taken by all reduce tasks=2576384Map-Reduce FrameworkMap input records=2Map output records=4Map output bytes=41Map output materialized bytes=55Input split bytes=94Combine input records=0Combine output records=0Reduce input groups=3Reduce shuffle bytes=55Reduce input records=4Reduce output records=3Spilled Records=8Shuffled Maps =1Failed Shuffles=0Merged Map outputs=1GC time elapsed (ms)=103CPU time spent (ms)=1200Physical memory (bytes) snapshot=425283584Virtual memory (bytes) snapshot=4223356928Total committed heap usage (bytes)=277348352Shuffle ErrorsBAD_ID=0CONNECTION=0IO_ERROR=0WRONG_LENGTH=0WRONG_MAP=0WRONG_REDUCE=0File Input Format Counters Bytes Read=25File Output Format Counters Bytes Written=25
[hadoop@node1 ~]$ 

查看输出结果
在这里插入图片描述

思考

  • 如果运行过程报如下错误,该如何解决?
    在这里插入图片描述

  • 代码还可以优化吗?如何优化?

完成!enjoy it!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/161826.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言----每日五道选择题Day1

1.第一题 1、指出下列代码的缺陷&#xff08; &#xff09;【多选】 float f[10]; // 假设这里有对f进行初始化的代码 for(int i 0; i < 10;) {if(f[i] 0)break; } A: for(int i 0; i < 10;)这一行写错了 B: f是float型数据直接做相等判断有风险 C: f[i]应该是…

[100天算法】-搜索旋转排序数组(day 60)

题目描述 升序排列的整数数组 nums 在预先未知的某个点上进行了旋转&#xff08;例如&#xff0c; [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] &#xff09;。请你在数组中搜索 target &#xff0c;如果数组中存在这个目标值&#xff0c;则返回它的索引&#xff0c;否…

Type-C接口详解

USB接口发展史 USB接口历经Type-A→Type-B→Type-C五次大的更新换代&#xff1b;目前Type-A Standard作为标准USB接口形式&#xff0c;仍然在大范围应用&#xff0c;而Micro-A以及Type-B系列已经慢慢谈出人们的视野&#xff0c;逐渐被新型的Type-C代替。 Type-C接口 24PIN Typ…

xlua源码分析(二)lua Call C#的无wrap实现

xlua源码分析&#xff08;二&#xff09;lua Call C#的无wrap实现 上一节我们主要分析了xlua中C# Call lua的实现思路&#xff0c;本节我们将根据Examples 03_UIEvent&#xff0c;分析lua Call C#的底层实现。例子场景里有一个简单的UI面板&#xff0c;面板中包含一个input fie…

注意,注意,weak_ptr有坑

class Test { public:Test(){cout << "构造函数\n";}~Test(){cout << "析构函数\n";} }; void *operator new(size_t nsize) {void *ptmp std::malloc(nsize);printf("申请内存:%d,%p\n",nsize, ptmp);return ptmp; }void operator…

Maven的总结

先要了解maven是什么&#xff1f; Maven就是一个软件&#xff0c;掌握软件安装、配置、以及基本功能&#xff08;项目构建、依赖管理&#xff09;使用就是本课程的主要目标&#xff01; 最主要的功能是为了方便Java项目jar包的导入 认识Maven maven的GVAP属性 Maven 中的 GAVP…

ssm整合原理与实战

文章目录 前言一、SSM整合原理1.1 什么是SSM整合1.2 SSM整合核心问题1.2.1 第一问&#xff1a;SSM整合需要几个IoC容器&#xff1f;1.2.2 第二问&#xff1a;每个IoC容器对应哪些类型组件&#xff1f;1.2.3 第三问&#xff1a;IoC容器之间关系和调用方向&#xff1f;1.2.4第四问…

详细讲解如何求解「内向基环森林」问题

题目描述 这是 LeetCode 上的 「2876. 有向图访问计数」 &#xff0c;难度为 「困难」。 Tag : 「基环森林」、「内向基环树」、「拓扑排序」、「图」、「BFS」 现有一个有向图&#xff0c;其中包含 n 个节点&#xff0c;节点编号从 0 到 n - 1。此外&#xff0c;该图还包含了 …

JavaEE-博客系统3(功能设计)

本部分内容为&#xff1a;实现登录功能&#xff1b;强制要求用户登录&#xff1b;实现显示用户信息&#xff1b;退出登录&#xff1b;发布博客 该部分的后端代码如下&#xff1a; Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws Ser…

基于鹰栖息算法的无人机航迹规划-附代码

基于鹰栖息算法的无人机航迹规划 文章目录 基于鹰栖息算法的无人机航迹规划1.鹰栖息搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用鹰栖息算法来优化无人机航迹规划。 1.鹰栖息…

【大数据】Apache NiFi 数据同步流程实践

Apache NiFi 数据同步流程实践 1.环境2.Apache NIFI 部署2.1 获取安装包2.2 部署 Apache NIFI 3.NIFI 在手&#xff0c;跟我走&#xff01;3.1 准备表结构和数据3.2 新建一个 Process Group3.3 新建一个 GenerateTableFetch 组件3.4 配置 GenerateTableFetch 组件3.5 配置 DBCP…

Codeforces Round 882 (Div. 2)

目录 A. The Man who became a God 题目分析: B. Hamon Odyssey 题目分析: C. Vampiric Powers, anyone? 题目分析: A. The Man who became a God 题目分析: n个人分成k组&#xff0c;每一组的力量都是这样的&#xff0c;那么如果分成k组那么就会有k-1个力量不被统计…