Mapreduce

8 篇文章 1 订阅
订阅专栏

分布式运算程序编程框架 MapReduce

MapReduce概述

●源自Google的MapReduce论文,发表于2004年12月

●Hadoop Mapreduce是Google MapReduce的克隆版

●MapReduce优点:海量数据离线处理&易开发&易运行

●MapReduce缺点:实时流式数据

Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架。

Mapreduce核心功能:是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上

分布式运算程序往往需要分成2个阶段:

1、第一个阶段的task(map task)并发实例各司其职,完全并行(map阶段);

2、第二个阶段的task (reduce task) 并发实例互不相干,但是数据依赖于上一个阶段的task并发实例的输出(reduce阶段)。

Mapreduce编程模型只能包含一个map阶段和一个reduce阶段,如果用户业务逻辑复杂,那只能多个Mapreduce程序串行运行互相依赖。

另外需要MRAppMaster负责监控、调度、协调map task和reduce task。

MapReduce三个角色:map task、reduce task、MRAppMaster。

从WordCount看MapReduce的编程模型

1)文件小,直接使用shell

2)文件大,使用分布式计算框架

 

MapReduce编程模型之Map阶段和Reudce阶段

●将作业拆分成Map阶段和Reduce阶段

●Map阶段,Map tasks

●Reduce阶段:Reduce tasks

MapReduce编程模型之执行步骤

MapReduce处理<key,value>键值对。

1、准备map处理的输入数据

2、Mapper处理

3、Shuffle

4、Reduce处理

5、结果输出

 

 

MapReduce核心概念

Split

交由MapReduce作业来处理的数据块(是MapReduce中的最小的计算单元)

HDFS : blocksize 是HDFS中最小的存储单元 128M

默认情况:mapreduce的数据块和HDFS的block是一一对应,也可以自由设置。

InputFormat

将输入数据进行分片(Split)

TextInputFormat:处理文本格式的数据

OutputFormat

输出

MapReduce版本

MapReduce1.x

 

1) JobTracker:JT

作业的管理者

将作业分解成一堆任务:Task(MapTask和ReduceTask)

将任务分派给TaskTracker运行

作业的监控、容错处理(task挂了,重启task机制)

在一定时间间隔内,JT没有收到TT的心跳信息,TT可能挂了,TT上运行的任务会被指派到其他TT上执行

2)TaskTracker:TT

任务的执行者

在TT上执行Task(MapTask和ReduceTask)

与JT进行交互:执行/启动/停止作业,发送心跳信息给JT

3)MapTask

自己开发的map任务交由该Task处理

解析每条记录的数据,交给自己的map方法处理

将map输出结果写到本地磁盘(有些作业只有map没有reduce,就写到hdfs)

4)ReduceTask

将Map Task输出的数据进行读取

按照数据进行分组传给我们自己编写的reduce方法处理

输出结果到HDFS

MapReduce2.x

 

没有了JobTracker和TaskTracker,出现了Resoure manager和Node manager。

其实就是引入了YARN。

Combiner

●本地的reducer

●减少Map Tasks输出的数据量及数据网络传输量

在Map端做了一个本地端的reduce操作。

使用场景:求和、次数。而不适用于求平均数的概念。

 

Partitioner

●Partitioner决定了MapTask输出的数据交由哪个ReduceTask处理

●默认实现:分发的key的hash值对Reduce Task个数取模

有几个partitioner就有几个reduce输出。

JobHistory

●记录已运行完的MapReduce信息到指定的HDFS目录下

●默认是不开启的

1、修改mapred-site.xml配置文件

2、修改yarn-site.xml开启聚合功能

3、启动:./mr-jobhistory-deaom.sh start historyserver

WordCount 编码

Map task和Reduce task都由Hadoop封装好了,自己只需要写map()方法和reduce()方法即可。

需求:在一堆给定的文本文件中统计输出每一个单词出现的总次数

Mapper:

Mapper类:

Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>

Mapper<LongWritable ,Text,Text,IntWritable>

● KEYIN : 默认情况下,是mr框架所读到的一行文本的起始偏移量,Long,在Hadoop中有自己的更精简的序列化接口,所以

不直接用Long,而用LongWritable。

● VALUEIN : 默认情况下,是mr框架所读到的一行文本的内容,String,同上使用Text(hadoop.io.text)

● KEYOUT :用户自定义逻辑处理完成之后输出数据中的key,此处是是单词,String,同上使用Text(hadoop.io.text)

● VALUEOUT : 用户自定义逻辑处理完成之后输出数据中的value,此处是单词次数,Integer 同上使用IntWritable

public class WordcountMapper extends Mapper<LongWritable,Text,Text,IntWritable>{

/**
*map阶段的业务逻辑就写在自定义的map()方法中
*maptask会对每一行输入数据调用一次我们自定义的map()方法
*/
@Override
protected void map(LongWritable key,Text value,Context context) throws IOException,InterruptedException{
//将map task传给我们的文本内容先转换成String
String string = value.toString();
//根据空格将这一行单词分成单词
String[] words = line.split(" ");

//将单词输出为<单词,1>
for(String word:words){
//将单词作为key,将次数1作为value,以便于后续的数据分发,可以根据单词分发
//以便于相同单词会到相同的reduce task中
context.write(new Text(word),new IntWritable(1));
}
}
}

Reducer:

Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
KEYIN,VALUEIN 对应mapper输出的 KEYOUT,VALUEOUT 类型对应
KEYOUT ,VALUEOUT 是自定义reduce逻辑处理结果的输出数据类型
KEYOUT是单词
VALUEOUT是总次数

public class WordcountReducer extends Reducer<Text,IntWritable,Text,IntWritable>{

/**
*入参key,是一组相同单词kv对的key
*<hello,1><hello,1><hello,1><hello,1><hello,1><hello,1>
*<banana,1><banana,1><banana,1><banana,1><banana,1>
*入参key,传的是组里面的第一个单词
*/
@Override
protected void reduce(Text key,Iterable<IntWritable> values,Context context) throws IOException,InterruptedException{
int count=0;
for(IntWritable value : values){
count +=value.get();
}
context.write(key,new IntWritable(count));
}
}

每个Reduce的context.write写入hdfs文件。


/**
*相当于yarn集群的客户端
*需要再次封装mr程序的相关运行参数,指定jar包
*最后提交给jar
*/
public class WordcountDriver{
public static void main(String[] args) throws Exception{
Configuration conf = new Configuration();
conf.set("mapredue.framework.name","yarn");
conf.set("yarn.resourcemanager.hostname","mini1");
Job job = Job.getInstance();

//指定本程序的jar包所在的本地路径
job.setJarByClass(WordcoutDriver.class);

//告诉本业务job要使用的mapper/reducer业务类
job.setMapperClass(WordcountMapper.class);
job.serReducerClass(WordcountReducer.class);

//指定mapper输出数据的kv类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);

//指定最终输出的数据的kv类型(有些运算无需reducer)
job.seOutputKeyClass(Text.class);
job.seOutputValueClass(IntWritable.class);

//指定job的输入原始文件所在目录
FileinputFormat.setInputPaths(job, new Path(args[0]));
//指定job的输出结果所在目录
FileOutputFormat.setOutputPaths(job, new Path(args[1]));

//将job中配置的相关参数,以及job所用的java类所在的jar包,提交给yarn去运行
//job.submit();
boolean res = job.waitForCompletion(true);
System.exit(res?0:1);
}
}

java -cp wordcount.jar cn.itcast.bigdata.mr.wcdemo.WordcountDriver /wordcount/input /wordcount/output
或者
hadoop jar wordcount.jar  cn.itcast.bigdata.mr.wcdemo.WordcountDriver /wordcount/input /wordcount/output

mapreduce默认是一个。

输出文件是按照单词的字母顺序排序的。

总结

(1)用户编写的程序分成三个部分:Mapper、Reducer、Driver(提交运行mr程序的客户端)

(2)Mapper的输入数据是KV对的形式(KV的类型可自定义)

(3)Mapper的输出数据是KV对的形式(KV的类型可自定义)

(4)Mapper中的业务逻辑写在map()方法中

(5)map()方法(maptask进程)对每一个<K,V>调用一次

(6)Reducer的输入数据类型对应Mapper的输出数据类型,也是KV

(7)Reducer的业务逻辑写在reduce()方法中

(8)Reducetask进程对每一组相同k的<k,v>组调用一次reduce()方法

(9)用户自定义的Mapper和Reducer都要继承各自的父类

(10)整个程序需要一个Driver来进行提交,提交的是一个描述了各种必要信息的job对象

WordCount如何运行

 

MapTask并行度决定机制

maptask的并行度决定map阶段的任务处理并发度,进而影响这个job的处理速度。

一个job的map阶段并行度的规划的基本逻辑为:

将待处理数据执行逻辑切片(即按照一个特定切片大小,将待处理数据划分成逻辑上的多个split),然后每一个split分配给一个maptask并行实例处理。

这段逻辑及形成的切片规划描述文件,由InputFormat实现类的getSplits()方法完成。

任务切片是一个逻辑划分,它与block没有关系。

一个切片对应一个maptask实例。

FileInputFormat中默认的切片机制:

a)简单地按照文件的内容长度进行切片;

b)切片大小,默认等于block大小;

c)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片

FileInputFormat中切片大小的参数配置:

在FileInputFormat中,计算切片大小的逻辑:

Math.max(minSize,Math.min(maxSize,blockSize)) ;

切片主要有几个值来确定:

minSize: 默认1,配置参数:mapreduce.input.fileinputformat.split.minsize

maxSize:默认Long.MAXValue ,配置参数:mapreduce.input.fileinputformat.split.maxsize

因此,面膜人情况下,切片大小=blocksize

maxsize(切片最大值):参数如果调得比blocksize小,则会让切片变小,而且就等于配置的这个参数的值;

minsize(切片最小值):参数调的比blocksize大,则可以让切片变得比blocksize还大

客户端提交Job的流程

 

 

ReduceTask并行度决定机制

reducetask的并行度同样影响整个job的执行并发度和执行效率,但与maptask的并发数由切片数决定不同,reducetask

数量的决定是可以直接手动设置:

//默认值是1,手动设置为4

job.setNumReduceTask(4);

如果数据分布不均匀,就有可能在reduce阶段产生数据倾斜。

注意:reducetask数量并不是任意设置,还需要考虑业务逻辑需求,有些情况下,需要计算全局汇总结果,就只能有1个

reducetask。

尽量不要运行太多reducetask。

MapReduce
m0_63171742的博客
05-22 1138
该阶段的编程模型中有一个 reduce 函数需要开发人员重写,reduce 函数的输入也是一个 <key,value> 对,reduce 函数的输出也是一个<key,value> 对。该阶段的编程模型中会有一个 map 函数需要开发人员重写,map 函数的输入是一个 <key,value> 对,map 函数的输出也是一个<key,value> 对,key 和 value 的类型需要开发人员指定。我们在上述的代码中,将 mapper 的逻辑和 reducer 的逻辑分开实现,写在了两个文件中。
mapreduce原理_mapreduce执行原理详解,各个阶段做了什么?
weixin_39583029的博客
11-24 1840
今天抽时间又重新整体复习了下mapreduce在各个阶段的执行过程,感觉每一次学习都会有更大的收获,今天就把我学习到的东西全都和大家一起分享出来,方便自己梳理知识和记忆的同时,也希望能给其他小伙伴带来收获!每天进步一点点!一.什么是MapReduceMapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从...
大数据技术入门:MapReduce(分布式计算框架)
2401_84182824的博客
04-28 437
MapReduce 编程模型只包含 Map 和 Reduce 两个过程,map 的主要输入是一对 值,经过 map 计算后输出一对 值;Hadoop 集群常驻进程,根据要处理的输入数据量,命令 TaskTracker生成相应数量的Map和Reduce进程任务,并管理这个作业生命周期的任务的调度和监控。该进程是启动 MapReduce 程序的主入口,主要是指定 Map 和 Reduce 类、输入输出文件路径等,并提交作业给 Hadoop 集群。
MapReduce的4个阶段
weixin_33795093的博客
06-30 4844
1、split阶段: 此阶段,每个输入文件被分片输入到map。如一个文件有200M,默认会被分成2片,因为每片的默认最大值和每块的默认值128M相同。 如果输入为大量的小文件,则会造成过多的map数,导致效率下降,可采用压缩输入格式CombineFileInputFormat。 2、map阶段: 此阶段,执行map任务。map数由分片决...
Hadoop-MapReduce
jx的博客
02-25 1074
MapReduce是一个进行分布式运算的编程框架,使用户开发基于hadoop进行数据分析的核心框架。MapReduce 核心功能就是将用户编写的业务逻辑代码和自带的默认组件整合成一个完整的 分布式运算程序,并发运行在一个 Hadoop 集群上。序列化就是将内存中对象转换成字节序列,便于存储到磁盘和网络传输反序列化时将字节序列或磁盘中的持久化数据转换成内存中的对象一般来说,对象只能在本地进程中使用,不能通过网络发送到另一台计算机序列化可以存储对象,可以将对象发送到远程计算机。
Hadoop学习笔记—4.初识MapReduce
deguotiantang的专栏
02-28 4061
一、神马是高大上的MapReduce   MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算。对于大数据量的计算,通常采用的处理手法就是并行计算。但对许多开发者来说,自己完完全全实现一个并行计算程序难度太大,而MapReduce就是一种简化并行计算的编程模型,它使得那些没有多有多少并行计算经验的开发人员也可以开发并行应用程序。这也就是MapReduc
MapReduce篇07】MapReduce之数据清洗ETL1
08-04
MapReduce之数据清洗ETL详解 MapReduce是一种基于Hadoop的分布式计算框架,广泛应用于大数据处理领域。数据清洗(Data Cleaning)是数据处理过程中非常重要的一步,旨在清洁和转换原始数据,使其更加可靠和有用。...
MapReduce详解包括配置文件
04-18
MapReduce是Hadoop提供的一套用于进行分布式计算的模型,本身是Doug Cutting根据Google的<MapReduce: Simplified Data Processing on Large Clusters>仿照实现的。 MapReduce由两个阶段组成:Map(映射)阶段和Reduce...
Mapreduce-实践
04-16
(实践三)MapReduce 布隆过滤器 过滤器训练、过滤器应用、结果验证及分析 (实践四)MapReduce Top 10模式示例 在ctrip数据集上进行Top 10排序。 (实践五)去重的用户—针对ctrip数据集去重 对ctrip数据集中的...
MapReduce WordCount
05-14
MapReduce WordCount
MapReduce综合应用案例 - 招聘数据清洗-结果
04-02
MapReduce综合应用案例 - 招聘数据清洗-结果
MapReduce简介
03-30
大规模数据处理时,MapReduce在三个层面上的基本构思 如何对付大数据处理:分而治之 对相互间不具有计算依赖关系的大数据,实现并行最自然的办法就是采取分而治之的策略 上升到抽象模型:Mapper与Reducer MPI等...
mapreduce案例数据
11-23
mapreduce案例数据:dept.csv,emp.csv,sales.csv
实验项目 MapReduce 编程
04-18
4 分别在自编 MapReduce 程序 WordCount 运行过程中和运行结束后查看 MapReduce Web 界面。 5. 分别在自编 MapReduce 程序 WordCount 运行过程中和运行结束后练习 MapReduce Shell 常用命令。 。。
22、MapReduce使用Gzip压缩、Snappy压缩和Lzo压缩算法写文件和读取相应的文件
05-29
22、MapReduce使用Gzip压缩、Snappy压缩和Lzo压缩算法写文件和读取相应的文件 网址:https://blog.csdn.net/chenwewi520feng/article/details/130456088 本文的前提是hadoop环境正常。 本文最好和MapReduce操作常见...
MapReduce阶段划分
disgocloser的博客
07-08 645
MapReduce执行的4个阶段,分别为Split阶段—> Map阶段 —> Shuffle阶段 —> Reduce阶段。
MapReduce之Map阶段
weixin_43810802的博客
10-14 2605
MapReduce阶段分为map,shuffle,reduce。 map进行数据的映射,就是数据结构的转换,shuffle是一种内存缓冲,同时对map后的数据分区、排序。reduce则是最后的聚合。 此文探讨map阶段的主要工作。 map的工作代码介绍split启动mapTask 代码介绍 我们还是准备word count的代码: maper: public class WordCountMapper extends Mapper<LongWritable, Text, Text, LongWrita
MapReduce中的map与reduce
weixin_34123613的博客
07-25 1379
本文主要介绍MapReduce的map与reduce所包含的各各阶段 MapReduce中的每个map任务可以细分4个阶段:record reader、mapper、combiner和partitioner。map任务的输出被称 为中间键和中间值,会被发送到reducer做后续处理。reduce任务可以分为4个阶段:混排(shuffle)、排...
springboot mapreduce
最新发布
06-14
Spring Boot MapReduce并不是一个标准的组合,因为Spring Boot是Java的全栈框架,主要用于简化新项目的初始设置和部署,而MapReduce则是Apache Hadoop生态系统中的分布式计算模型。MapReduce通常用于处理大规模数据集,通过将任务分解为map和reduce两个阶段。 如果你想在Spring Boot项目中使用MapReduce,你可能会使用Hadoop Streaming或Hadoop YARN API,这两个选项允许你编写MapReduce作业并在Hadoop集群上执行,而Spring Boot则可以作为任务调度的前端或者提供一些配置支持。 然而,直接将Spring Boot和MapReduce结合使用并不常见,因为它们解决的问题域不同。如果你的目标是构建一个大数据处理服务,你可能会选择使用Hadoop和YARN,然后通过Spring Boot创建RESTful API来管理或监控这些MapReduce任务。 **相关问题:** 1. Spring Boot如何与Hadoop集成? 2. Hadoop Streaming在Spring Boot中的应用示例是什么? 3. Hadoop YARN API在Spring Boot项目中的作用是什么? 4. 春Boot中如何实现任务管理和监控Hadoop MapReduce作业?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 数据压缩的历史、原理及常用算法 16822
  • 主机、宿主机 15387
  • (三)数据链路--图解TCP/IP 10747
  • Token及Token经济 10040
  • IDEA 清除类中无用的import包 9222

分类专栏

  • Linux 12篇
  • Web可视化 11篇
  • JVM 14篇
  • TCP/IP 15篇
  • Java并发编程 10篇
  • Java基础 19篇
  • Mysql 21篇
  • 设计模式 19篇
  • 网络安全 3篇
  • 大型网站系统架构 16篇
  • 语言基础 8篇
  • 软件应用 2篇
  • 行业知识 6篇
  • App 7篇
  • 计算机算法 1篇
  • 前端 21篇
  • Spring MVC 8篇
  • 工具框架 3篇
  • Spring Cloud 3篇
  • 深度学习 1篇
  • 区块链世界 21篇
  • 区块链技术 1篇
  • 大数据 8篇
  • Spring Boot 4篇
  • go
  • Mini知识点 1篇
  • 行业思维 1篇
  • CTO进化论
  • IoT 4篇
  • 面试题 6篇
  • 系统功能设计方案

最新评论

  • Docker 部署mysql8(arm64)

    我学不会.: 您好有木有arm64mysql镜像安装包8.0.33

  • Docker 部署mysql8(arm64)

    mashark: mysql.tar的下载链接有没

  • MySQL使用总结

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)增加内容的多样性(例如使用标准目录、标题、图片、链接、表格等元素);(2)使用标准目录;(3)使用更多的站内链接。

  • 6、Iterator 迭代器模式

    CSDN-Ada助手: 你的文章质量不错,值得学习!但还有一点小瑕疵,具体如下:(1)使用更多的站内链接;(2)增加条理清晰的目录;(3)使用标准目录。

  • 8、Template Method 模板方法

    CSDN-Ada助手: 你的文章质量不错,值得学习!但还有一点小瑕疵,具体如下:(1)使用标准目录;(2)增加条理清晰的目录;(3)使用更多的站内链接。

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 计算机网络
  • Vue3 的语法总结
  • HTML5学习笔记(五)
2023年2篇
2022年33篇
2021年35篇
2020年1篇
2019年25篇
2018年62篇
2017年87篇
2016年3篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司枣庄网络广告推广报价普洱外贸网站建设报价黄石网站推广多少钱坂田SEO按天扣费推荐龙华企业网站建设梧州网站搜索优化哪家好黔南模板推广遵义高端网站设计推荐坪地百度网站优化排名甘孜建站哪家好莆田网络推广杭州关键词排名贺州外贸网站建设多少钱连云港如何制作网站推荐霍邱网站优化软件伊春高端网站设计公司天津优化报价鹰潭至尊标王公司钦州seo优化报价福永网站设计公司菏泽设计公司网站报价濮阳网络推广东营建网站多少钱银川百度网站优化哪家好湘西百度爱采购推荐昭通关键词按天计费丽水网站搜索优化报价迁安模板网站建设报价潮州网站关键词优化价格泰州百度seo价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化