输入:hello hadoop 
    hello word

下面是map函数

import java.io.IOException;
import java.util.StringTokenizer;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;public class MapperClass extends Mapper<Object,Text, Text, IntWritable>{//四个参数的含义,前两个输入,后两个输出
,类型需一致public Text keytext =new Text("text");//定义一个text对象,用来充当中间变量,存储词public IntWritable intvalue=new IntWritable(1);//词的个数,刚开始都为1,也可以不定义,直接context.write(keytext, 1);@Overrideprotected void map(Object key, Text value,Context context)//key即行偏移量,作用不大,主要是value,根据value进行拆分throws IOException, InterruptedException {//获取值String str =value.toString();//分隔StringTokenizer stringTokenizer=new StringTokenizer(str);//StringTokenizer根据空格等分隔字符串到stringTokenizerwhile (stringTokenizer.hasMoreElements()) {//返回是否还有分隔符,判断是否还有单词keytext.set(stringTokenizer.nextToken());//nextToken():返回从当前位置到下一个分隔符的字符串。context.write(keytext, intvalue);//context.write("hello",1)}}
}

reduce函数

import java.io.IOException;
import java.util.Iterator;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;public class ReducerClass extends Reducer<Text, IntWritable, Text, IntWritable> {// 前两个输入:例:(hello,1),后两个输出(hello,2)public IntWritable intValue = new IntWritable(0);@Overrideprotected void reduce(Text key, Iterable<IntWritable> values,// 这里声明了一个实现Iterator接口的匿名内部类,并返回了内部类的实例Context context)// 它用来与MapReduce系统进行通信,如把map的结果传给reduce处理throws IOException, InterruptedException {// step1int sum = 0;Iterator<IntWritable> itr = values.iterator();// 迭代器,访问容器中的元素,为容器而生while (itr.hasNext()) {sum += itr.next().get();// 如果有,则加入迭代器中的个数}intValue.set(sum);// 对于hello,sum是2context.write(key, intValue);// hello,2}
}

主函数:

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 org.apache.hadoop.util.GenericOptionsParser;public class WordCount {public static void main(String[] args) throws Exception{Configuration conf =new Configuration();//指定作业执行规范String[] otherArgs =new GenericOptionsParser(conf,args).getRemainingArgs();if(otherArgs.length !=2){System.err.println("Usage:wordcount <in> <out>");System.exit(2);}Job job =new Job(conf,"word count");//指定job名称,及运行对象job.setJarByClass(WordCount.class);job.setMapperClass(MapperClass.class);//指定map函数job.setCombinerClass(ReducerClass.class);//是否需要conbiner整合job.setReducerClass(ReducerClass.class);//指定reduce函数job.setOutputKeyClass(Text.class);//输出key格式job.setOutputValueClass(IntWritable.class);//输出value格式FileInputFormat.addInputPath(job, new Path(otherArgs[0]));//处理文件路径FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));//结果输出路径System.exit(job.waitForCompletion(true)?0:1);}
}

小结:Hadoop程序处理流程

(1)将文件拆分为splits,并由MapReduce框架自动完成分割,将每一个split分割为<key,value>对

(2)每一对<key,value>调用一次map函数,处理后生产新的<key,value>对,由Context传递给reduce处理

(3)Mapper对<key,value>对进行按key值进行排序,并执行Combine过程,将key值相同的value进行合并。最后得到Mapper的最终输出结果

(4)reduce处理,处理后将新的<key,value>对输出。

WordCount程序详解相关推荐

  1. wordcount linux java_Java笔记---Hadoop 2.7.1下WordCount程序详解

    一.前言 在之前我们已经在 CenOS6.5 下搭建好了 Hadoop2.x 的开发环境.既然环境已经搭建好了,那么现在我们就应该来干点正事嘛!比如来一个Hadoop世界的HelloWorld,也就是 ...

  2. 从程序详解拒绝服务***

    从程序详解拒绝服务*** 拒绝服务(Denial of Service,  DoS)***是最简单的网络***形式之一,它只阻止对服务或资源的访问,而不是试图窃取信息.DoS***有两种常见的形式:使 ...

  3. 车牌识别与计算机编程,基于MATLAB的车牌识别程序详解.ppt

    基于MATLAB的车牌识别程序详解 自定义一个字符函数,用来从车牌区域中提取出7个字符,其中利用切割函数来进行切割. 程序:function [word,result]=getword(d) word ...

  4. 中断程序_ABB机器人中断程序详解(安川FANUC)

    ABB机器人中断程序详解 1.新建一个中断程序 test001,类型中断 TRAP hanmianshadiaoliao StopMove; SetDO DO04, 0; !Stop; StartMo ...

  5. linux系统设置服务开机启动3种方法,Linux开机启动程序详解

    linux系统设置服务开机启动 方法1:.利用ntsysv伪图形进行设置,利用root登陆 终端命令下输入ntsysv 回车:如下图 方法2:利用命令行chkconfig命令进行设置 简要说明一下ch ...

  6. 非局部相似性 matlab,非局部均值滤波(NLM)和MATLAB程序详解视频教程保持图像细节...

    [内容简介]<非局部均值滤波与应用和MATLAB程序详解视频>共6章28节视频,总学时698分钟,合11.6小时.主要内容包括:非局部均值滤波类算法入门,基于滤波参数自适应的非局部均值滤波 ...

  7. STM32利用SPI读写SD卡的程序详解

    STM32利用SPI读写SD卡的一些程序详解 关于SD卡的基础知识这里不做过多陈述,如果有对这方面感兴趣的朋友可以直接百度一下,有很多讲SD卡的文章,这里主要是针对SD卡的读写程序实现做一些详细说明. ...

  8. Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇

    Oracle11g安装教程.配置实例.监听.客户端程序详解_Windows篇 文章目录 Oracle11g安装教程.配置实例.监听.客户端程序详解_Windows篇 前言 一.数据库的安装前准备,前提 ...

  9. Dede二次开发程序详解(dede爱好者必备)

    Dede二次开发程序详解(dede爱好者必备) 调用说明:推荐会员(带用户头像)  [quote] {dede:sql sql="SELECT mid,mtype,userid,uname, ...

最新文章

  1. NFS服务基本配置及使用
  2. linux 常用命令技巧
  3. docker 配置selenium调用Firefox无界面浏览器
  4. 输入法半角和全角的快捷转换_华宇拼音输入法 一款完全免费的国产输入法_第1页...
  5. SCCM 2007系列教程之四在工作组环境内实现SCCM客户端
  6. vue中使用html2canvas方法,设置背景,字体重叠问题解决方法
  7. 航空三字代码表_航空运输三字代码表
  8. 2021-07-23
  9. macOS安装brew和ffmpeg下载m3u8
  10. 速卖通+奇门+聚石塔+官方场景/自定义场景流程备忘录
  11. Java编程英语单词大全_java编程常用英语单词
  12. 两年工作经验成功面试阿里P6总结(配答案)
  13. 使用Linux搭建IPV6路由器
  14. 文件“无法删除”的处理方法
  15. Golang 操作Excel文件
  16. 《Drools7.0.0.Final规则引擎教程》第4章 global全局变量
  17. ubuntu下好用的视频播放器
  18. nc-服务器间文件传输
  19. GlobalMapper20:10分钟根据CAD、shp等离散高程点生成一份精准边界的地形数据
  20. 2019年考研数学一真题pdf ​​​

热门文章

  1. python按指定概率抽样_python:抽样和抽样方法
  2. 视觉机器人+人体姿态识别项目总结
  3. 人民银行lpr利率最新2020年人民银行lpr利率查询 2020年lpr利率
  4. 最新网络监视工具列表
  5. 关于调用高德地图路径规划清除问题解决方案【js】
  6. 同济大学计算机何良华,同济主持或合作完成的8项目分获教育部高等学校科学研究优秀成果奖一、二等奖...
  7. DVWA系列(二)----DVWA环境搭建
  8. Webpack5 - 常用Plugin(插件)
  9. ASP.NET Core环境Web Audio API+SingalR+微软语音服务实现web实时语音识别
  10. 新库上线 | CnOpenData·IFR工业机器人数据