对单词个数统计的MapReduce的案例

Mapper类:

package main.java.worldClient;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper; /**
* <KEYIN,VALUEIN,KEYOUT,VALUEOUT>
* 分别对应map输入和输出的key和value对应的数据类型
* 默认map的输入,key是改行在文件中的偏移量,value是文件中一行的内容
* @author Lenovo
*
*/ public class WCMapper extends Mapper<LongWritable, Text, Text, LongWritable>{ /**
* 切分单词,然后输出
*/
@Override
protected void map(LongWritable key, Text value,Mapper<LongWritable, Text, Text, LongWritable>.Context context)
throws IOException, InterruptedException {
//获取一行信息
String line = value.toString();
String words[] = line.split(" ");
LongWritable writable = new LongWritable(1);
for(String word:words){
//将输出写入context
//write(a,b)中a与mapper(keyin,valuein,keyout,valueout)的keyout与valueout对应
context.write(new Text(word), writable);
}
} }

  Reduce类:

package main.java.worldClient;

import java.io.IOException;
import java.util.Iterator; import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
/**
* <KEYIN,VALUEIN,KEYOUT,VALUEOUT>
* reduce的输入和输出的key和value
* 输入的key和value肯定和map输出的key和value一致
* @author Lenovo
*
*/
public class WCReducer extends Reducer<Text, LongWritable, Text, LongWritable>{ @Override
protected void reduce(Text key, Iterable<LongWritable> values,
Reducer<Text,LongWritable,Text,LongWritable>.Context context)
throws IOException, InterruptedException {
int sum = 0;
Iterator<LongWritable> iter = values.iterator();
while(iter.hasNext()){
LongWritable value = iter.next();
sum += value.get();
} context.write(key, new LongWritable(sum));
} }

  Runner类:

package main.java.worldClient;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
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; public class WCRunner {
public static void main(String[] args) {
Configuration conf = new Configuration();
try{
Job job = Job.getInstance(conf);
job.setJobName("wc MR");
job.setJarByClass(WCRunner.class);
job.setMapperClass(WCMapper.class);
job.setReducerClass(WCReducer.class); /*
* 如果map和reduce的输出类型一致可以不设置map的输出
*/
//map输出的key,value
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
//reduce输出的key,value
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class); FileInputFormat.addInputPath(job, new Path(args[0]));
//输出目录必须不存在
FileOutputFormat.setOutputPath(job, new Path(args[1])); job.waitForCompletion(true); }catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}

  在windows环境下运行会报控指针错误,目前我正在查找解决方法,所以通过Xshell与Xftp将写好的java导出jar包以及程序需要的文件传到linux虚拟机内(用linux命令将输入文件导入到hadoop的目录下这样会在接下来方便写命令),在linux下运行测试。hadoop jar找到的jar包为本地jar包无法找hdfs上的jar文件(我自己的理解不知道对不对)

主要步骤:

1:bin/hadoop fs -mkdir -p /MRTest/input 在hdfs下创建目录

2:bin/hadoop fs -put ~/WCTest.txt.txt /MRTest/input 将程序需要执行的文件放到input文件夹下

3:bin/hadoop jar ~/wctest.jar main.java.worldClient.WCRunner /MRTest/input /MRTest/output 运行jar包 其中output必须时不存在的文件目录

Hadoop 4 MapReduce的更多相关文章

  1. Hadoop 新 MapReduce 框架 Yarn 详解

    Hadoop 新 MapReduce 框架 Yarn 详解: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ Ap ...

  2. 用PHP编写Hadoop的MapReduce程序

    用PHP编写Hadoop的MapReduce程序     Hadoop流 虽然Hadoop是用Java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编 ...

  3. Hadoop之MapReduce程序应用三

    摘要:MapReduce程序进行数据去重. 关键词:MapReduce   数据去重 数据源:人工构造日志数据集log-file1.txt和log-file2.txt. log-file1.txt内容 ...

  4. 从Hadoop骨架MapReduce在海量数据处理模式(包括淘宝技术架构)

    从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,认为它们非常是神奇.而神奇的东西常能勾 ...

  5. 对于Hadoop的MapReduce编程makefile

    根据近期需要hadoop的MapReduce程序集成到一个大的应用C/C++书面框架.在需求make当自己主动MapReduce编译和打包的应用. 在这里,一个简单的WordCount1一个例子详细的 ...

  6. Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码

    Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...

  7. Hadoop基础-MapReduce的常用文件格式介绍

    Hadoop基础-MapReduce的常用文件格式介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MR文件格式-SequenceFile 1>.生成SequenceF ...

  8. Hadoop基础-MapReduce的Join操作

    Hadoop基础-MapReduce的Join操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.连接操作Map端Join(适合处理小表+大表的情况) no001 no002 ...

  9. Hadoop基础-MapReduce的排序

    Hadoop基础-MapReduce的排序 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MapReduce的排序分类 1>.部分排序 部分排序是对单个分区进行排序,举个 ...

  10. Hadoop基础-MapReduce的数据倾斜解决方案

    Hadoop基础-MapReduce的数据倾斜解决方案 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据倾斜简介 1>.什么是数据倾斜 答:大量数据涌入到某一节点,导致 ...

随机推荐

  1. apache不能启动LoadModule php5_module modules/ph

    apache不能启动LoadModule php5_module modules/php5apache2.dll的问题 主要是版本问题!!有点不爽!! apache不能启动 加入下面两行,apache ...

  2. php的匿名函数和闭包函数

    php的匿名函数和闭包函数 tags: 匿名函数 闭包函数 php闭包函数 php匿名函数 function use 引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因 ...

  3. opencv中的bitwise_not,bitwise_xor,bitwise_or,bitwise_and的使用方法与效果。

    1.将二指图片的效果反转既黑色变白色,白色变黑色. 使用 bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray( ...

  4. PAT B1030 完美数列 (25 分)

    给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格 ...

  5. 使用git初始化本地仓库并提交到远程分支

    创建本地文件并提交到github远程分支,步骤如下: 1.通过github创建repository,本例中repository名称为maven_demo,工程为maven + spring + myb ...

  6. rpm yum apt-get redhat centos ubuntu

    rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装.查询.卸载.升级等工作.但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时.Yum(全称为 Y ...

  7. bat 栈上限

    栈耗尽,递归会导致该问题. ****** B A T C H R E C U R S I O N exceeds STACK limits ******Recursion Count=1240, St ...

  8. ubuntu14.04上设置默认python命令是执行python3而不是Python2

    update-alternatives --install /usr/bin/python python /usr/bin/python2 100 update-alternatives --inst ...

  9. Luence

    Luence 是Apache软件基金会的一个项目,是一个开发源码的全文检索引擎工具包,是一个全文检索引擎的一个架构.提供了完成的查询引擎和检索引擎,部分文本分析引擎. 全文检索程序库,虽然与搜索引擎相 ...

  10. ajax入门简述

    ajax 全称为 “Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),是一种创建交互式网页应用的网页开发技术,本质上是一个浏览器端的技术,就是 ...