hadoop学习笔记(九):MapReduce程序的编写
一、MapReduce主要继承两个父类:
Map
protected void map(KEY key,VALUE value,Context context) throws IOException,InterruptedException{
}
Reduce
1 protected void reduce(KEY key,Iterable<VALUE> values,Context context) throws IOException,InterruptedException{
2 }
二、使用代码实现WordCount:
package com.laowang.mapreduce; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
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.output.FileOutputFormat; import java.io.IOException;
import java.util.StringTokenizer; public class MR {
/**
* @author laowang
* @version v1.0.0
* @apiNote Mapper
* @since 2018/4/27 10:44
* <p>
* KEYIN, VALUEIN, KEYOUT, VALUEOUT 输入key类型,输入value类型,输出KEY类型,输出value类型
*/
static class MyMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable ONE = new IntWritable(1);
private Text word = new Text(); @Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//获取每一行的数据
String lineStr = value.toString();
//以 空格、/t、/n、/r、/f 分割
StringTokenizer stringTokenizer = new StringTokenizer(lineStr);
//遍历
while (stringTokenizer.hasMoreTokens()) {
//获取截取后的每一个字符串
String wordValue = stringTokenizer.nextToken();
//拼接到word里面去
word.set(wordValue);
//写入到输出中
context.write(word, ONE);
}
}
} /**
* @author laowang
* @version v1.0.0
* @apiNote Reducer
* @since 2018/4/27 10:44
* <p>
* KEYIN, VALUEIN, KEYOUT, VALUEOUT 输入key类型,输入value类型,输出KEY类型,输出value类型
*/
static class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable value : values) {
sum += value.get();
}
result.set(sum);
context.write(key, result);
}
} /**
* @author laowang
* @version v1.0.0
* @apiNote Client
* @since 2018/4/27 10:47
*/
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
//获取配置信息
Configuration configuration = new Configuration();
//创建job
Job job = new Job(configuration,"wc");
//设置JOB运行的类
job.setJarByClass(MR.class);
//设置Mapper和Reducer
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
//设置输入和输出路径
FileInputFormat.addInputPath(job,new Path(args[0]));
FileOutputFormat.setOutputPath(job,new Path(args[1]));
//设置输出key和value的类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//提交job
boolean b = job.waitForCompletion(true);
//结束程序
System.exit(b ? 0 : 1);
}
}
hadoop学习笔记(九):MapReduce程序的编写的更多相关文章
- hadoop 学习笔记:mapreduce框架详解
开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- Hadoop学习笔记:MapReduce框架详解
开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- 【Big Data - Hadoop - MapReduce】hadoop 学习笔记:MapReduce框架详解
开始聊MapReduce,MapReduce是Hadoop的计算框架,我学Hadoop是从Hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- hadoop 学习笔记:mapreduce框架详解(转)
原文:http://www.cnblogs.com/sharpxiajun/p/3151395.html(有删减) Mapreduce运行机制 下面我贴出几张图,这些图都是我在百度图片里找到的比较好的 ...
- Hadoop学习笔记: MapReduce Java编程简介
概述 本文主要基于Hadoop 1.0.0后推出的新Java API为例介绍MapReduce的Java编程模型.新旧API主要区别在于新API(org.apache.hadoop.mapreduce ...
- Hadoop学习笔记:使用Mrjob框架编写MapReduce
1.mrjob介绍 一个通过mapreduce编程接口(streamming)扩展出来的Python编程框架. 2.安装方法 pip install mrjob,略.初学,叙述的可能不是很细致,可以加 ...
- Hadoop学习笔记—12.MapReduce中的常见算法
一.MapReduce中有哪些常见算法 (1)经典之王:单词计数 这个是MapReduce的经典案例,经典的不能再经典了! (2)数据去重 "数据去重"主要是为了掌握和利用并行化思 ...
- Hadoop学习笔记—11.MapReduce中的排序和分组
一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出,在Step1.4也就是第四步中,需要对不同分区中的数据进行排 ...
- [原创] hadoop学习笔记:wordcout程序实践
看了官网上的示例:但是给的不是很清楚,这里依托官网给出的示例,加上自己的实践,解析worcount程序的操作 1.首先你的确定你的集群正确安装,并且启动你的集群,应为这个是hadoop2.6.0,所以 ...
- Hadoop学习笔记: MapReduce二次排序
本文给出一个实现MapReduce二次排序的例子 package SortTest; import java.io.DataInput; import java.io.DataOutput; impo ...
随机推荐
- AbpZero后台模块化(1)
AbpZero的精髓就在于多租户模块化加载,如果不做到这两种的话,就没必要使用这个框架. 1.首先,我们得新建一个类库,用于存放我们写的业务代码. 在类库下分别建立三个类文件:TestAp ...
- 使用vue.js常见错误之一
打包项目时,在vscode中输入如下命令 webpack .\src\main.js .\dist\bundle.js 出现如下错误: WARNING in configurationThe 'mod ...
- 四,php异常处理
1,异常处理 异常处理用于在指定的异常或错误发生时,改变脚本的正常执行流程. <?php try{ //错误或异常 }catch (Exception $ex){ //处理异常 //抛出异常 } ...
- Kafka集群副本分配算法解析
副本分配算法如下: 将所有N Broker和待分配的i个Partition排序. 将第i个Partition分配到第(i mod n)个Broker上. 将第i个Partition的第j个副本分配到第 ...
- Chrome谷歌浏览器已停用不支持的扩展程序解决方法
在不能上外网的情况下解决该问题: http://www.liu16.com/post/Chrome_2447.html
- Android多媒体整体架构图
Android多媒体整体架构图 MediaPlayer框架图 Camera框架图 SoundRecorder框架图 VideoCamera框架图 OpenCore与Skia ALSA Audio框架图 ...
- spring中的context:include-filter和context:exclude-filter的区别
在Spring 的配置文件中有: <context:component-scan base-package="njupt.dao,njupt.service"> < ...
- windows server 2016安装docker
最近微软发布了windows server 2016,并原生支持docker,本文通过一系列的步骤,来学习怎么在windows server 2016安装docker. 1.下载 windows se ...
- Linux 删除文件夹和文件的命令(转载)
Linux 删除文件夹和文件的命令 听语音 | 浏览:93339 | 更新:2013-05-02 18:40 | 标签:linux 文件夹 linux删除目录很简单,很多人还是习惯用rmdir,不过一 ...
- python基础笔记之面向对象
# class Foo:# name="kevin"## def __init__(self,puppy):# self.tomato= 'red'# self.dog = pup ...