MapReduce之WordCount案例实操
创始人
2025-05-30 05:47:26

 

目录

前期准备:

本机测试:

mapper阶段:

Reduce阶段:

Driver类:

集群测试:


前期准备:

因为MapReduce中案例比较多,所以需要单独创建一个工程

准备工作   创建工程后先改maven仓库的地址(创建工程后默认为idea自带的仓库**提示 在你打开别的项目后,在你重新打开本项目的时候,maven会改回idea的maven)

让后在   项目的src/main/resources目录下,新建一个文件,命名为“log4j.properties”

(打印INFO级别的日志)

填入:

log4j.rootLogger=INFO, stdout  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n  
log4j.appender.logfile=org.apache.log4j.FileAppender  
log4j.appender.logfile.File=target/spring.log  
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

让后在Java包下创建三级目录  并且创建三个类(对应mapper,reduce,driver)

本机测试:

mapper阶段:

        mapper阶段继承自Mapper

  在类中重写map方法  在map方法外对     Text  和   IntWritable  进行实例化

代码:

package com.tangxiaocong.mapreduce.wordcount2;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/*
VALUEIN,        map阶段的value输入类型   text类型  一行
*/
public class WordCountMapper extends Mapper {//定义属性 实例化 减少内存的消耗  在下边循环中的话  会循环创建 在全局可以多次使用private Text text = new Text();private IntWritable intWritable = new IntWritable(1);//map阶段不需要计算 同1为1@Overrideprotected void map(LongWritable key, Text value, Mapper.Context context) throws IOException, InterruptedException {//获取一行数据  转换成stringString s = value.toString();//切割  切割后的单词存入数组String[] s1 = s.split(" ");//循环写出--输出  写出需要桥梁context这个抽象类for (String s2 : s1) {//数组中是String类型  需要转换成Text//封装text//此set是方法  不是Java中的接口  Java中有接口set 不可重复text.set(s2);//转换后通过context的write写出context.write(text,intWritable);}}
}

Reduce阶段:

        

package com.tangxiaocong.mapreduce.wordcount2;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class WordCountReduce extends Reducer {private IntWritable outv= new IntWritable();/** Iterable values   是一个集合的老祖宗   reduce阶段为会把同类集合化   两个  reduce阶段会先合并成* tangxiaocong,(1,1)* */@Overrideprotected void reduce(Text key, Iterable values, Reducer.Context context) throws IOException, InterruptedException {//Iterable values  里现在是    (1,1)  现在需要把他们求和int sum =0;for (IntWritable value : values) {sum+=value.get();   //get方法是获取他的值}outv.set(sum);context.write(key,outv);}
}

Driver类:

package com.tangxiaocong.mapreduce.wordcount;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;//driver   其实是一个固定的套路
public class WordCountDriver {public static void main(String[] args) throws Exception {//1.获取job//Configuration  是job的配置信息类Configuration entries = new Configuration();Job job = Job.getInstance(entries);//2.设置jar包路径job.setJarByClass(WordCountDriver.class);  //一般通过全类名反射过去jar包的位置//3. 关联mapper和reducerjob.setReducerClass(WordCountReduce.class);job.setMapperClass(WordCountMapper.class);//4.设置map输出的kv类型.job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);//5.设置最终的kv类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);//6.设置输入路径和输出路径FileInputFormat.setInputPaths(job, new Path("D:\\hello.txt"));FileOutputFormat.setOutputPath(job, new Path("D:\\hellocount"));//7.提交jobboolean b = job.waitForCompletion(true);System.exit(b ? 0 : 1);  //退出  成功返回0 失败返回1}
}

本次测试为本机测试,通过maven导入Hadoop的包来进行的   输入输出文件的路径为本地路径,而我们在企业开发中一般是在windows上编写,打包发送到Linux上,如果执行任务较多 后期会编写脚本执行程序。

集群测试:

下边重写driver类:只需要把输入输出的路径改成手动输入    输入输出路径

 

 进行打包

将不带依赖的包进行复制到Linux系统(Hadoop目录下)

使用hadoop jar  命令  执行jar包所在的本地系统中的项目  

(输出目录不能存在)

执行计算的过程中可以通过Hadoop yarn看到计算的资源调度的web页面

相关内容

热门资讯

离谱!高考生OPPO手机闹钟没... 高考当天闹钟没响是什么体验?一位OPPO手机用户就感受了一把!OPPO手机高考闹钟失灵多名网友表示遇...
新华全媒+|物价总体稳定 供需... 新华社北京6月9日电 题:物价总体稳定 供需有所改善——5月份物价数据透视 新华社记者潘洁 国家统计...
北证50指数持续上涨!5只主题... 在触及1500点新高后,北证50成份指数(以下简称“北证50”)走势仍相对强劲。公开数据显示,6月9...
热点轮动加快!沪指冲击3400... 6月9日,市场全天震荡走高,创业板指领涨。截至当日收盘,沪指涨0.43%,深成指涨0.65%,创业板...
深夜!中国资产,大爆发! 昨夜... 中国资产突然爆发。6月9日晚,美股开盘后,中国资产全线爆发,纳斯达克中国金龙指数盘初大涨超2%,两倍...
多股涨停!创新药持续火爆 创新... 2025.06.09本文字数:2444,阅读时长大约4分钟作者 |第一财经 王方然创新药板块再度走强...
收割年轻人的“注册兼职”:刷脸... “线上办理营业执照报酬700元”“亚马逊注册冲量得920元”……近年来,此类“注册兼职”信息在网络上...
亿纬锂能筹划港股上市 (转自:储能与电力市场) 亿纬锂能拟发行H股股票并在香港联合交易所有限公司主板挂牌上市。亿纬锂能将充...
江苏:引导商业银行扩大地方债、... 近日,江苏省人民政府办公厅发布关于印发江苏省实施提振消费专项行动若干措施的通知。若干措施提到,引导商...
*ST中迪:公司股票撤销退市风... 新京报贝壳财经讯 6月9日,*ST中迪公告,公司已向深圳证券交易所提出了撤销公司股票交易退市风险警示...
中美经贸磋商机制首次会议举行,... 北京时间6月9日晚,美股三大指数开盘涨跌不一,道指微跌0.05%,纳指上涨0.14%,标普500指数...
亿纬锂能:筹划发行H股股票并在... 新京报贝壳财经讯 6月9日,亿纬锂能公告,为进一步提高资本实力和综合竞争力,提升国际化品牌形象,满足...
菲林格尔:公司股价已严重偏离基... 6月9日晚间,菲林格尔公告,公司股票自2025年5月30日以来大幅上涨,多次触及股票交易异常波动,公...
港股创新药飙涨!恒生创新药ET... A股三大指数集体上涨,创业板指涨超1%,有超4000只个股上涨。 港股恒生科技指数4月8日以来累计涨...
为什么一只活鸭上百元,一只烤鸭... “鸭子25元一只,每天现做现卖,高峰期一天能卖200多只。”济南街头某烤鸭店的店员向记者介绍道。当地...
医药主题基金再度霸占涨幅榜!年... 6月9日,市场全天震荡走高,创业板指领涨。板块方面,创新药、足球概念、稀土永磁、可控核聚变等板块涨幅...
币圈亿万富翁拟投资胚胎编辑研究... 日前,亿万富翁、加密货币交易所 Coinbase 的首席执行官 Brian Armstrong 表示...
央企入主!A股血制品巨头易主国... 6月9日,派林生物(000403.SZ)公告称,公司控股股东胜帮英豪(下称“胜帮英豪”)与中国生物技...
从“彩电大王”到边缘品牌,长虹... 没想到大名鼎鼎的长虹都开始给小米做代工了。曾经的“中国彩电大王”,发生啥了?点击上方视频立即观看快刀...
CoWoS,劲敌来了 “CoWoS,劲敌来了!CoWoS(Chip on Wafer-on-Substrate)技术以其独...
明起复牌!海光信息换股吸收合并... 6月9日晚,海光信息和中科曙光双双公告披露换股吸收合并预案。根据公告,双方6月6日召开董事会会议,审...
锂电企业赴港IPO再添一员,亿... 亿纬锂能 视觉中国 资料图国内锂电行业赴港上市的队列还在进一步扩大。惠州亿纬锂能股份有限公司(下称...
江天科技:子公司租赁厂房建筑面... 《金证研》南方资本中心 栾栖/作者 肖直 西洲 映蔚/风控2025年以来,截至6月6日,逾40家企业...
年轻人热捧的"音乐神... 这是新消费智库第2649期文章新消费导读这个新物种能否撕下"电子废物"的标签?作者:果子编辑:竺天审...
央行连续7个月增持黄金!券商最... 国家外汇管理局近日公布的数据显示,央行连续7个月增持黄金。 券商中国记者注意到,近日券商分析师纷纷对...
买黄金也有消费补贴了!上海有门... 图片来源:Pexels 提振消费加码,有城市联合当地企业推出“黄金珠宝专项消费补贴”活动。 “去年在...
“恒瑞医药”要发财了? 恒瑞医... 创新药这个领域,这段时间好像挺火。其实医药行业一直都是资本市场的重点领域,因为行业太大了,而且跟我们...
5月全国CPI同比下降0.1%... 6月9日,国家统计局公布了5月全国居民消费价格指数(CPI)数据。数据显示,5月CPI环比下降0.2...
截至一季度末中央汇金持仓市值居... 人民财讯6月9日电,在A股市场上,中央汇金作为最受瞩目的机构投资者,受到各方关注。据证券时报·数据宝...