0. 说明

  MapReduce 实现 Word Count 示意图 && Word Count 代码编写


1. MapReduce 实现 Word Count 示意图

  

  1. Map:预处理阶段,将原始数据映射成每个 K-V,发送给 reduce
  2. Shuffle:混洗(分类),将相同的 Key发送给同一个 reduce
  3. Reduce:聚合阶段,把相同的 Key 进行聚合然后进行输出


2. Word Count 代码编写

  [2.1 WCMapper.java]

package hadoop.mr.wc;

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; /**
* Mapper 程序
*/
public class WCMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
/**
* map 函数,被调用过程是通过 while 循环每行调用一次
*/
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
// 将 value 变为 String 格式
String line = value.toString();
// 将一行文本进行截串
String[] arr = line.split(" "); for (String word : arr) {
context.write(new Text(word), new IntWritable(1));
} }
}

  [2.2 WCReducer.java]

package hadoop.mr.wc;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer; import java.io.IOException; /**
* Reducer 类
*/
public class WCReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
/**
* 通过迭代所有的 key 进行聚合
*/
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0; for (IntWritable value : values) {
sum += value.get();
} context.write(key,new IntWritable(sum));
}
}

  [2.3 WCApp.java]

package hadoop.mr.wc;

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; /**
* Word Count APP
*/
public class WCApp {
public static void main(String[] args) throws Exception {
// 初始化配置文件
Configuration conf = new Configuration(); // 仅在本地开发时使用
// conf.set("fs.defaultFS", "file:///"); // 通过配置文件初始化 job
Job job = Job.getInstance(conf); // 设置 job 名称
job.setJobName("Word Count"); // job 入口函数类
job.setJarByClass(WCApp.class); // 设置 mapper 类
job.setMapperClass(WCMapper.class); // 设置 reducer 类
job.setReducerClass(WCReducer.class); // 设置 map 的输出 K-V 类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class); // 设置 reduce 的输出 K-V 类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class); // 设置输入路径和输出路径
// Path pin = new Path("E:/test/wc/1.txt");
// Path pout = new Path("E:/test/wc/out");
Path pin = new Path(args[0]);
Path pout = new Path(args[1]);
FileInputFormat.addInputPath(job, pin);
FileOutputFormat.setOutputPath(job, pout); // 执行 job
job.waitForCompletion(true);
}
}

[MapReduce_1] 运行 Word Count 示例程序的更多相关文章

  1. Mac下hadoop运行word count的坑

    Mac下hadoop运行word count的坑 Word count体现了Map Reduce的经典思想,是分布式计算中中的hello world.然而博主很幸运地遇到了Mac下特有的问题Mkdir ...

  2. mac上eclipse上运行word count

    1.打开eclipse之后,建立wordcount项目 package wordcount; import java.io.IOException; import java.util.StringTo ...

  3. 【2016.3.22】作业 Word count 小程序

    今天更下word count程序的设计思路及实现方法. 我的程序贴在coding里,这里就先不贴出来了, 我的coding地址:https://coding.net/u/holy_angel/p/wo ...

  4. C++ Word Count 发布程序

    前段时间,模仿 Linux 系统下的 wc 程序,在 Windows 系统环境下使用 C/C++ 实现了一个相似的 WC 程序,只不过有针对性,针对的是 C/C++,Java 等风格的源代码文件. 此 ...

  5. 运行Hadoop的示例程序WordCount-Running Hadoop Example

      In the last post we've installed Hadoop 2.2.0 on Ubuntu. Now we'll see how to launch an example ma ...

  6. CC2650LaunchPad 运行contiki hello-world示例程序

    最近做毕设,开始接触contiki. 下载并运行Instant Contiki 3.0 这是官方制作的虚拟机镜像,直接用vmware等工具就可以运行. 从这里下载. 下载并解压后,用vmware运行. ...

  7. OSG中的示例程序简介

    OSG中的示例程序简介 转自:http://www.cnblogs.com/indif/archive/2011/05/13/2045136.html 1.example_osganimate一)演示 ...

  8. OSG中的示例程序简介(转)

    OSG中的示例程序简介 1.example_osganimate一)演示了路径动画的使用 (AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera ...

  9. 软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序

    软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序 格式:wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数 ...

随机推荐

  1. 《Kubernetes权威指南》——组件原理

    1 API Server 1.1 提供集群管理的API接口 API Server在kubernetes中的进程名为apiserver,运行在Master节点上 apiserver开放两个端口 本地端口 ...

  2. Ubuntu编译安装最新的webkit

    好久都没更新webkit 源码在ubuntu上编译了,网上搜了一下,基本上都是早期编译的webkit版本.可能是大家都去搞高大上的谷歌浏览器了吧. 今天就以ubuntu14.04版本作为编译环境来讲讲 ...

  3. 使用crypt配置Basic Auth登录认证

    简介 Basic Auth用于服务端简单的登录认证,通常使用服务器Nginx.Apache本身即可完成.比如我们要限定某个域名或者页面必须输入用户名.密码才能登录,但又不想使用后端开发语言,此时Bas ...

  4. 字符串replaceAll()方法报错:java.util.regex.PatternSyntaxException:Unclosed group near index...

    Unclosed group near index错误 之前自己写的一个模块在项目上线后最近频频出现tomcat崩掉的情况,从log看出现如下的报错信息: java.util.regex.Patter ...

  5. Kali中装中文输入法小企鹅

    STEP 1. 装fcitx框架,apt-get install fcitx STEP 2. 装googlepinyin输入法,apt-get install fcitx-googlepinyin S ...

  6. Windows系统环境下创建mysql主从数据库方法(双向主从复制)

    创建mysql主从数据库方法(双向主从复制) (一)Windows系统下的MySQL主从复制(单向复制) (1)环境说明: 1,Mysql版本:mysql5.7.20(主从机mysql版本必须一致) ...

  7. 团队作业4——beta阶段冲刺

    Deadline: 2018-12-16 22:00PM,以博客提交至班级博客时间为准 提交: (a) 项目课堂演示: (b) 1篇冲刺准备+5篇冲刺随笔,: (c) 1篇用户使用用报告: (d) 1 ...

  8. C#中Lambda表达式总结

    在C#的语法中有一种比较特殊的写法,叫做Lambda表达式,这种表达式的写法在于你查询数据的时候直接是使用以下箭头的形式来表示查询语句的:=>.例如,我们要查找学生的List<Studen ...

  9. WebForm 【发送邮件】

    C#实现简单的SmtpClient发送邮件 分析 需要什么 发送邮件     --       发送内容         --      接收邮件 流程(各功能都适用) 创建对象    --     ...

  10. Anaconda 安装、使用

    一.下载: 清华镜像:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 二.安装: 默认就行,安装路径最好换一下 三.配置环境变量: 控制面 ...