WordCount程序代码解
package com.bigdata.hadoop.wordcount; import java.io.IOException; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class WordCount {
/**
* 设置Map方法
* @author hxiuz
*
*/
private static class WCMapper extends Mapper<LongWritable, Text, Text, IntWritable>{ private Text mapOutkey = new Text(); //设置输出key的格式
private final static IntWritable mapOutvalue = new IntWritable(1); //设置输出value的格式并赋值1
@Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context)
throws IOException, InterruptedException { //key即行偏移量
String input = value.toString(); //读入value数据
String[] inArr = input.split(" "); //按空格分割
for(String str:inArr) {
mapOutkey.set(str); //给key赋值
context.write(mapOutkey, mapOutvalue); //写入
}
}
} /**
* 设置Reduce方法
* @author hxiuz
*
*/
private static class WCReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
private IntWritable redOutvalue = new IntWritable(); @Override
protected void reduce(Text key, Iterable<IntWritable> values,
Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
int sum = 0; //计数变量
for(IntWritable value:values) {
sum += value.get(); //遍历集合values并将计数累加
} redOutvalue.set(sum); //给输出value赋值为sum
context.write(key, redOutvalue); //写入
}
} /**
* 主方法入口
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
if(args.length!=2) {
System.out.println("Usage:wordcount <in> <out>");
return ;
}
Configuration conf = new Configuration(); //读取配置文件
try {
//新建一个job任务实例 并通过类设置jar
Job job = Job.getInstance(conf, WordCount.class.getSimpleName());
job.setJarByClass(WordCount.class); //设置输入路径
Path inputPath = new Path(args[0]);
FileInputFormat.addInputPath(job, inputPath); //设置map类
job.setMapperClass(WCMapper.class);
//设置map输出的格式
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class); //设置reduce类
job.setReducerClass(WCReducer.class);
//设置reduce输出的格式
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class); //设置输出路径
Path outputPath = new Path(args[1]);
FileOutputFormat.setOutputPath(job, outputPath); //提交任务
boolean jobStatus = job.waitForCompletion(true); //判断程序是否正常退出
System.exit(jobStatus ? 0 : 1); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
WordCount程序代码解的更多相关文章
- 解决在windows的eclipse上面运行WordCount程序出现的一系列问题详解
一.简介 要在Windows下的 Eclipse上调试Hadoop2代码,所以我们在windows下的Eclipse配置hadoop-eclipse-plugin- 2.6.0.jar插件,并在运行H ...
- 大数据之路week07--day03(Hadoop深入理解,JAVA代码编写WordCount程序,以及扩展升级)
什么是MapReduce 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃. MapReduce方法则是: 1.给在座的所有玩家中分配这摞牌 2.让每个玩家数自己手中的牌有几 ...
- Bullet核心类介绍(Bullet 2.82 HelloWorld程序及其详解,附程序代码)
实验平台:win7,VS2010 先上结果截图: 文章最后附有生成该图的程序. 1. 刚体模拟原理 Bullet作为一个物理引擎,其任务就是刚体模拟(还有可变形体模拟).刚体模拟,就是要计算预测物体的 ...
- c语言—栈区,堆区,全局区,文字常量区,程序代码区 详解
转:http://www.cnblogs.com/xiaowenhui/p/4669684.html 一.预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分1.栈区(sta ...
- Eclipse环境搭建并且运行wordcount程序
一.安装Hadoop插件 1. 所需环境 hadoop2.0伪分布式环境平台正常运行 所需压缩包:eclipse-jee-luna-SR2-linux-gtk-x86_64.tar.gz 在Linu ...
- Hadoop集群WordCount运行详解(转)
原文链接:Hadoop集群(第6期)_WordCount运行详解 1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对 ...
- (三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序
配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序 一. 需求部分 在ubuntu上用Eclipse IDE进行hadoop相关的开发,需要在Eclip ...
- 在Pycharm上编写WordCount程序
本篇博客将给大家介绍怎么在PyCharm上编写运行WordCount程序. 第一步 下载安装PyCharm 下载Pycharm PyCharm的下载地址(Linux版本).下载完成后你将得到一个名叫: ...
- 软件工程:Wordcount程序作业
由于时间的关系,急着交作业,加上这一次也不是那么很认真的去做,草草写了“Wordcount程序”几个功能,即是 .txt文件的读取,能计算出文件内容的单词数,文件内容的字符数,及行数. 这次选用C来做 ...
随机推荐
- HDU - 1213 dfs求联通块or并查集
思路:给定一个无向图,判断有几个联通块. AC代码 #include <cstdio> #include <cmath> #include <algorithm> ...
- Ambari安装小记
在Ambari配置过程中,组件的定制与分配很重要
- gitlab启用https
为了防止内网渗透,将gitlab服务的访问添加了ssl,具体步骤如下: 修改配置文件 [xieshuang@VM_177_101_centos gitlab]$ sudo vim /etc/gitla ...
- linux 分布式文件系统
分布式文件系统(DFS) 指文件系统管理的物理存储资源不一定直接连接在本地节点上 而是通过计算机网络与节点相连 分布式文件系统的设计基于客户机/服务器模式 一个典型的网络可能包括多个多个用户访问的服务 ...
- FMECA分析
FMECA是针对产品所有可能的故障,并根据对故障模式的分析,确定每种故障模式对产品工作的影响,找出单点故障,并按故障模式的严重度及其发生概率确定其危害性.所谓单点故障指的是引起产品故障的,且没有冗余或 ...
- 部署Java Web项目报错(一)
今天,我在部署Java Web项目时,出现错误,并且在eclipse新建一个servers,却出现多个项目. 具体错误截图如下: 然后,我又将项目部署到JBoss服务器中,却还是运行不成功 22:12 ...
- MyEclipse提示
MyEclipse提示 1.具体如下图 2.提示原因 3.解决办法
- ASP.net里不让浏览器缓存代码和Session使用注意事项
//不让浏览器缓存 context.Response.Buffer = true; context.Response.ExpiresAbsolute = ...
- HashMap,LinkedHashMap,TreeMap对比
共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...
- 使用everything把一个文件夹里(包含子目录)的所有图片拷贝到另一个文件夹
最近在找数据集,想要预览数据集里面的全部图片,而因为一些数据集的数据存储方式使得图片都分布在若干层后的子文件里,所以就需要一个如题所示的功能. 找了一堆XCOPY命令的使用方法,差点要撸起袖子写代码干 ...