1.MapReduce 编程模型的5个步骤:

  1)迭代,将输入数据解析成 key/value 对;

  2)将解析的 key/value经过Map处理映射成另一组key/value对;

  3)根据key进行分组;

  4)以分组为单位进行归约(Reduce 过程);

  5)迭代,输出最终结果。

2.MapReduce编程模型模板:

  在进行编程过程只需改变Map()和Reduce()方法,如果没有Reduce过程时需要对run()作适当调整。

 import java.io.IOException;
import java.util.jar.JarException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
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.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import org.apache.jasper.compiler.JavacErrorDetail; public class Example extends Configured implements Tool{ enum Counter{
LINESKIP; //输出错误行
} /*MapClass
* Mapper<
* LongWritable 输入的 key
* Text 输入的 value
* NullWritable/Text 输出的 key
* Text 输出的 value
* >
* */
//public static class Map extends Mapper<LongWritable,Text,NullWritable,Text> //没有Reduce过程时
public static class Map extends Mapper<LongWritable,Text,Text,Text>{
public void map(LongWritable key,Text value,Context context) throws IOException, InterruptedException
{
String mydata=value.toString(); //读取源数据
try{
//数据处理
String[] mydataSplite=mydata.split(""); //数据切分
String aData=mydataSplite[0];
String bData=mydataSplite[1]; /*
* 没有Reduce过程时
* Text outText=new Text(aData+""+bData);
* context.write(new Text(aData), new Text(bData)); //输出 key/value ,NullWritable.get()避免输出制表符
*/ context.write(new Text(aData), new Text(bData)); //输出 key/value
}catch(java.lang.ArrayIndexOutOfBoundsException e)
{
context.getCounter(Counter.LINESKIP).increment(1); //出错计数+1
return;
}
}
} /*Reduce静态类
* Reducer<
* Text, 输入的 key
* Text, 输入的 value
* Text, 输出的 key
* Text 输出的 value
*
* Reduce 的输入格式应与 Map的输出格式一致
* >
* */
public static class Reduce extends Reducer<Text,Text,Text,Text>
{
public void reduce(Text key,Iterable<Text> values,Context context) throws IOException, InterruptedException
{
String valuString;
String outString="";
for (Text value : values)
{
valuString=value.toString();
outString+=valuString+",";
}
context.write(key, new Text(outString)); //输出参数与定义格式一致,如果不是制表符分离的要换成空值
}
} /*run设置运行任务*/
public int run(String[] args) throws Exception {
Configuration conf = getConf(); Job job = new Job(conf,"Example"); //作务名
job.setJarByClass(Example.class); //选择class FileInputFormat.setInputPaths(job, new Path(args[0])); //输入路径
FileOutputFormat.setOutputPath(job, new Path(args[1])); //输出路径 job.setMapperClass(Map.class); //调用 Map class启动Map task
job.setReducerClass(Reduce.class); //调用 Reduce class 雇用 Reduce task
job.setCombinerClass(Reduce.class);
job.setInputFormatClass(TextInputFormat.class); //输入格式
job.setOutputFormatClass(TextOutputFormat.class); //输出格式
//job.setOutputKeyClass(NullWritable.class); //没有Reduce过程时,输出 key 格式,应该与指定的格式一致
job.setOutputKeyClass(Text.class); //输出 key 格式,应该与指定的格式一致
job.setOutputValueClass(Text.class); //输出 value 格式 System.exit(job.waitForCompletion(true)?0:1);
return 0;
} /*主函数入口*/
public static void main(String[] args) throws Exception {
int res = ToolRunner.run(new Configuration(),new Example(),args);
System.exit(res);
} }

MapReduce 编程模板的更多相关文章

  1. 批处理引擎MapReduce编程模型

    批处理引擎MapReduce编程模型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MapReduce是一个经典的分布式批处理计算引擎,被广泛应用于搜索引擎索引构建,大规模数据处理 ...

  2. 三、MapReduce编程实例

    前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS MapReduce编程实例 @ 目录 前文 MapReduce编程实例 前言 注意 ...

  3. Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)

    不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...

  4. [Hadoop入门] - 1 Ubuntu系统 Hadoop介绍 MapReduce编程思想

    Ubuntu系统 (我用到版本号是140.4) ubuntu系统是一个以桌面应用为主的Linux操作系统,Ubuntu基于Debian发行版和GNOME桌面环境.Ubuntu的目标在于为一般用户提供一 ...

  5. mapreduce编程模型你知道多少?

    上次新霸哥给大家介绍了一些hadoop的相关知识,发现大家对hadoop有了一定的了解,但是还有很多的朋友对mapreduce很模糊,下面新霸哥将带你共同学习mapreduce编程模型. mapred ...

  6. hadoop2.2编程:使用MapReduce编程实例(转)

    原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...

  7. 《Data-Intensive Text Processing with mapReduce》读书笔记之二:mapreduce编程、框架及运行

    搜狐视频的屌丝男士第二季大结局了,惊现波多野老师,怀揣着无比鸡冻的心情啊,可惜随着剧情的推进发展,并没有出现期待中的屌丝奇遇,大鹏还是没敢冲破尺度的界线.想百度些种子吧,又不想让电脑留下污点证据,要知 ...

  8. AJAX编程模板

    AJAX一直以来没怎么接触,主要是做JSON数据在服务器和客户端之间传递的时候,被玩坏了,对它莫名的不可爱,最近心理阴影小了,于是又来看看它....... AJAX即“Asynchronous Jav ...

  9. MapReduce 编程模型

    一.简单介绍 1.MapReduce 应用广泛的原因之中的一个在于它的易用性.它提供了一个因高度抽象化而变得异常简单的编程模型. 2.从MapReduce 自身的命名特点能够看出,MapReduce ...

随机推荐

  1. 【C++ troubleshooting】A case about decltype

    template <typename iter_t> bool next_permutation(iter_t beg, iter_t end) { // if (beg == end | ...

  2. C&C++——基本说明

    预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * ...

  3. C&C++——extern

    1.C 调用C++的函数或变量 C 调用C++的函数或变量,在C++的头文件声明为extern "C" ,C调用的时候只使用extern 声明. 可见,extern "C ...

  4. 解决IIS设置多个工作进程中Session失效的问题

    利用StateServer实现Session共享 session保存在专门的StateServer中,该种方式,性能损失比sql略好.比inproc据说有10%-15%的性能损失.怎么使用StateS ...

  5. “CNKI 中国知网 PDF 全文下载”油猴脚本在线安装地址

    https://greasyfork.org/zh-CN/scripts/18841-cnki-%E4%B8%AD%E5%9B%BD%E7%9F%A5%E7%BD%91-pdf-%E5%85%A8%E ...

  6. [poj 2104]主席树+静态区间第k大

    题目链接:http://poj.org/problem?id=2104 主席树入门题目,主席树其实就是可持久化权值线段树,rt[i]维护了前i个数中第i大(小)的数出现次数的信息,通过查询两棵树的差即 ...

  7. ionic运行测试

    http://blog.csdn.net/yucihan/article/details/54631747

  8. hive subprocess failed with code X 的错误码对应信息

    PipeMapRed.waitOutputThreads(): subprocess failed with code X ,这里code X对应的信息如下:error code 1: Operati ...

  9. How to setup Active Directory (AD) In Windows Server 2016

    Windows Server 2016 is the newest server operating system released by Microsoft in October 12th, 201 ...

  10. js介绍自己的例子

    js并不是真正面向对象的语言,但是我们通过一些方法也是可以实现js的一些面向对象设计的.常见的构造函数有很多模式有构造函数模式,原型链,工厂模式等等.但就是因为,我初学者看起来非常吃力,理解起来都是很 ...