当前位置: 首页 > news >正文

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!

相关文章:

  • 使用vscode开发uniapp项目常用的辅助插件,提升开发效率
  • github使用教程
  • 【Redis】Redis实现分布式锁
  • COCOS2DX3.17.2 Android升级targetSDK30问题解决方案
  • 【技术干货】开源库 Com.Gitusme.Net.Extensiones.Core 的使用
  • c++类和对象
  • 算法与数据结构之链表
  • Web前端—网页制作(以“学成在线”为例)
  • python- 学生信息管理系统
  • Go Gin中间件
  • 什么情况造成互斥锁死锁
  • 3.25每日一题(知线性常系数方程的特解求线性方程)
  • JDBC简单流程
  • Unreal PythonScriptPlugin
  • iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法
  • JS 中的深拷贝与浅拷贝
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • angular2 简述
  • Cookie 在前端中的实践
  • download使用浅析
  • ES6简单总结(搭配简单的讲解和小案例)
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Js基础知识(一) - 变量
  • Mysql5.6主从复制
  • PHP 小技巧
  • web标准化(下)
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 给新手的新浪微博 SDK 集成教程【一】
  • 规范化安全开发 KOA 手脚架
  • 基于遗传算法的优化问题求解
  • 记一次用 NodeJs 实现模拟登录的思路
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端面试之闭包
  • 悄悄地说一个bug
  • 深度学习入门:10门免费线上课程推荐
  • 探索 JS 中的模块化
  • 我的业余项目总结
  • 我建了一个叫Hello World的项目
  • 学习Vue.js的五个小例子
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 整理一些计算机基础知识!
  • ​Linux·i2c驱动架构​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (十一)图像的罗伯特梯度锐化
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。