MapReduce 编程模板
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 编程模板的更多相关文章
- 批处理引擎MapReduce编程模型
批处理引擎MapReduce编程模型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MapReduce是一个经典的分布式批处理计算引擎,被广泛应用于搜索引擎索引构建,大规模数据处理 ...
- 三、MapReduce编程实例
前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS MapReduce编程实例 @ 目录 前文 MapReduce编程实例 前言 注意 ...
- Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)
不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...
- [Hadoop入门] - 1 Ubuntu系统 Hadoop介绍 MapReduce编程思想
Ubuntu系统 (我用到版本号是140.4) ubuntu系统是一个以桌面应用为主的Linux操作系统,Ubuntu基于Debian发行版和GNOME桌面环境.Ubuntu的目标在于为一般用户提供一 ...
- mapreduce编程模型你知道多少?
上次新霸哥给大家介绍了一些hadoop的相关知识,发现大家对hadoop有了一定的了解,但是还有很多的朋友对mapreduce很模糊,下面新霸哥将带你共同学习mapreduce编程模型. mapred ...
- hadoop2.2编程:使用MapReduce编程实例(转)
原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...
- 《Data-Intensive Text Processing with mapReduce》读书笔记之二:mapreduce编程、框架及运行
搜狐视频的屌丝男士第二季大结局了,惊现波多野老师,怀揣着无比鸡冻的心情啊,可惜随着剧情的推进发展,并没有出现期待中的屌丝奇遇,大鹏还是没敢冲破尺度的界线.想百度些种子吧,又不想让电脑留下污点证据,要知 ...
- AJAX编程模板
AJAX一直以来没怎么接触,主要是做JSON数据在服务器和客户端之间传递的时候,被玩坏了,对它莫名的不可爱,最近心理阴影小了,于是又来看看它....... AJAX即“Asynchronous Jav ...
- MapReduce 编程模型
一.简单介绍 1.MapReduce 应用广泛的原因之中的一个在于它的易用性.它提供了一个因高度抽象化而变得异常简单的编程模型. 2.从MapReduce 自身的命名特点能够看出,MapReduce ...
随机推荐
- 【C++ troubleshooting】A case about decltype
template <typename iter_t> bool next_permutation(iter_t beg, iter_t end) { // if (beg == end | ...
- C&C++——基本说明
预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * ...
- C&C++——extern
1.C 调用C++的函数或变量 C 调用C++的函数或变量,在C++的头文件声明为extern "C" ,C调用的时候只使用extern 声明. 可见,extern "C ...
- 解决IIS设置多个工作进程中Session失效的问题
利用StateServer实现Session共享 session保存在专门的StateServer中,该种方式,性能损失比sql略好.比inproc据说有10%-15%的性能损失.怎么使用StateS ...
- “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 ...
- [poj 2104]主席树+静态区间第k大
题目链接:http://poj.org/problem?id=2104 主席树入门题目,主席树其实就是可持久化权值线段树,rt[i]维护了前i个数中第i大(小)的数出现次数的信息,通过查询两棵树的差即 ...
- ionic运行测试
http://blog.csdn.net/yucihan/article/details/54631747
- hive subprocess failed with code X 的错误码对应信息
PipeMapRed.waitOutputThreads(): subprocess failed with code X ,这里code X对应的信息如下:error code 1: Operati ...
- 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 ...
- js介绍自己的例子
js并不是真正面向对象的语言,但是我们通过一些方法也是可以实现js的一些面向对象设计的.常见的构造函数有很多模式有构造函数模式,原型链,工厂模式等等.但就是因为,我初学者看起来非常吃力,理解起来都是很 ...