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 ...
随机推荐
- Luogu2737 USACO4.1麦香牛块(动态规划)
小凯的疑惑升级版.只有两个数的话不能表示的最大数是ab-a-b,显然如果可选数增加不会比这更大,所以只要答案存在一定小于256*256-2*256.在这个范围内背包即可. #include<io ...
- 【题解】HAOI2011Problem b
第一次接触莫比乌斯反演,总之脑子都快要炸掉了……好难啊!本蒟蒻表示根本无法理解呜呜呜呜呜……不过在机房DL的帮助下总算是磕磕绊绊的A掉了这一题: 这道题目要我们的求的是:(1)ΣiΣj [gcd(i, ...
- number 解题报告
number 题目描述 给定整数 \(m,k\),求出正整数 \(n\) 使得 \(n+1,n+2,-,2n\) 中恰好有 \(m\) 个数在二进制下恰好有 \(k\) 个 \(1\). 有多组数据. ...
- 小程序根据input输入,动态设置按钮的样式
[需求]实现当手机号已填写和协议已勾选时,“立即登录”按钮变亮,按钮可点击:若有一个不满足,按钮置灰,不可点击:实现获取短信验证码,倒计时提示操作:对不满足要求内容进行toast弹窗提示. <v ...
- 搭建eova开发环境
1.安装好maven 2.下载Eova项目解压到文件夹eova下 3.dos命令到eova文件夹下执行mvn eclipse:eclipse(注:构建eclipse项目命令) 4.修改*.tag文件错 ...
- bzoj4302 Hdu 5301 Buildings
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4302 [题解] 出自2015多校-学军 题意大概是给出一个n*m的格子有一个格子(x,y)是 ...
- POJ2154 Color
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10322 Accepted: 3360 Description Bead ...
- bzoj3786 星际探索 splay dfs序
这道题 首先 因为他求的是当前点到根节点的路径和 我们可以将题目转换为括号序列的写法 将点拆为左括号以及右括号 左括号为正 右括号为负 这样题目就变为了求前缀和了 如果一个点是这个点的子树 那么他的左 ...
- [BZOJ2502]清理雪道解题报告|带下界的最小流
滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时清理雪道.你们拥有一架直升飞机,每次飞 ...
- Kubernetes : 多节点 k8s 集群实践
说明: 本文参考 『 Kubernetes 权威指南 』 第一章的案例. 需要说明的是, 这本书里有很多描述的东西和实践的案例不吻合. Kubernets 集群架构 架构图 Server List 节 ...