MapReduce编程模型

1.核心思想:“分而治之”(Map—映射,Reduce—归约)。就是“任务的分解和结果的汇总”

2.MapReduce执行的角色(进程):

一个是JobTracker;另一个是TaskTracker。JobTracker用于调度(安排)工作的,TaskTracker用于执行工作发、的。一个Hadoop集群中只有一台JobTracker,有若干个TaskTracker。

把处理过程高度抽象为两个函数:map和reduce

map负责把任务分解成多个任务

reduce负责把分解后多任务处理的结果汇总起来

3.适用场景

待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。

4.MapReduce处理过程

在Hadoop中,每个MapReduce任务都被初始化为一个Job,Job将数据划分为多个数据块,每个数据块对应一个计算任务(Task),并自动调用计算节点来处理相应的数据块。每个Job又可以分为两种阶段:map阶段和reduce阶段。

这两个阶段分别用两个函数表示,即map方法和reduce方法。map方法接收一个<key, value>形式的输入,然后同样产生一个<key, value>形式的中间输出,reduce方法接收一个如<key, (list of values)>形式的输入,然后对这个value集合进行处理,每个reduce产生0或1个输出,reduce的输出也是<key, value>形式的

将map的输入传给reduce的过程就是shuffle。而shuffle是mapReduce的核心,主要工作是从Map结束阶段到Reduce阶段,可以分为Map端的Shuffle和Reduce端的Shuffle。

5.hadoop内置数据类型介绍

BooleanWritable:标准布尔型数值
ByteWritable:单字节数值
DoubleWritable:双字节数
FloatWritable:浮点数
IntWritable:整型数
LongWritable:长整型数
Text:使用UTF8格式存储的文本
NullWritable:当<key, value>中的key或value为空时使用

6.编写MapReduce程序的步骤

(1.建立三个Java类        mapper        reducer        job)

(1)Mapper类(重写mapper类)

Mapper类有两个包:

org.apache.hadoop.mapreduce、org.apache.hadoop.mapred

org.apache.hadoop.mapred是hadoop 1.x版本的,负责资源的调度和计算

org.apache.hadoop.mapreduce是hadoop 2.x和3.x版本的,负责数据的计算     

<>:泛型,数据匹配类型

 输入键值对(固定值):

key----整数(偏移量)----LongWritable

value----字符串(每一行的文本内容)----Text

输出键值对

key----字符串----Text

value----整数----IntWritable

public class WcMapper extends Mapper<LongWritable, Text,Text, IntWritable>{
    @Override
    protected void map(LongWritable key,Text value,Mapper<LongWritable, Text,Text,IntWritable>.Context context) throws IOException,InterruptedException
}

(2)Reducer类(重写reduce类):对相同键的键值对的多个值进行计算(求和、求平均值、求最大值、求最小值)

输入键值对---map的输出(与map输出类型相同)

键------Text

值-------Interwritable

输出键值对---

         <hello,5>

                 <hadooop,1>

                         键-------Text

                         值-------IntWritable

经过reduce方法后,输出的键值对中的 键---不变,仍然为单词本身 key 值---对输入键值对中的值中的元素惊醒求和

(3)Job类

1.创建配置对象-------Configuration

Configuration conf = new Configuration();

2.创建Job对象

Job job = Job.getInstance(conf);

3.指名哪个类为Job类

job.setJarByClass();

4.指定哪个类为Mapper类

job.setMapperClass(ScoreMapper.class);

5.指定打个雷为reduce类

job.setReducerClass(ScoreReducer.class);

6.指定map的过程的输出键值对的数据类型(如果map和reduce数据类型完全一致,可以不用指定map过程的输出键值对数据类型)

job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);

7.指定reduce过程的输出键值对的数据类型

job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);

8.指定输入的数据文件的路径----Path

Path input = new Path("D:\\Hadoop\\hdfs\\score.csv");

9.指定输出的数据文件的路径

Path output = new Path("D:\\Hadoop\\hdfs\\output3");

10.指定输入何和输出文件的路径

FileInputFormat.setInputPaths(job,input);
FileOutputFormat.setOutputPath(job,output);

或者

7.指定reduce过程的输出键值对的数据类型

8.指定输入的数据文件的路径----Path

9.指定输出的数据文件的路径

10.指定输入何和输出文件的路径

匿名对象,给创建的对象不起名

FileInputFormat.setInputPaths(job,new Path("D:\\Hadoop\\hdfs\\score2.txt"));
FileOutputFormat.setOutputPath(job,new Path("D:\\Hadoop\\hdfs\\output4"));

11.提交job任务,等待执行完成,并输出执行过程明细

job.waitForCompletion(true);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值