mapreduce学习指导及疑难解惑汇总资料下载.pdf

上传人:wj 文档编号:5983556 上传时间:2023-05-05 格式:PDF 页数:34 大小:1.08MB
下载 相关 举报
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第1页
第1页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第2页
第2页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第3页
第3页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第4页
第4页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第5页
第5页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第6页
第6页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第7页
第7页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第8页
第8页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第9页
第9页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第10页
第10页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第11页
第11页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第12页
第12页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第13页
第13页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第14页
第14页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第15页
第15页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第16页
第16页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第17页
第17页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第18页
第18页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第19页
第19页 / 共34页
mapreduce学习指导及疑难解惑汇总资料下载.pdf_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

mapreduce学习指导及疑难解惑汇总资料下载.pdf

《mapreduce学习指导及疑难解惑汇总资料下载.pdf》由会员分享,可在线阅读,更多相关《mapreduce学习指导及疑难解惑汇总资料下载.pdf(34页珍藏版)》请在冰点文库上搜索。

mapreduce学习指导及疑难解惑汇总资料下载.pdf

详细可以查看如何确定Hadoopmap和reduce的个数-map和reduce数量之间的关系是什么?

-shuffle是什么?

partition是什么?

combiner是什麽?

他们三者之间的关系是什么?

mapreduce是hadoop核心,而shuffle是mapreduce的核心,shuffle个人认为它是一个动态的过程,包含了Combiner,merge等的过程,那么这里因为讲到shuffle,很多人都讲的全面,Combiner,merge,sort几乎全都讲了,这样讲是没有错误的,但是容易给初学者造成一个假象,那就是这些过程必须都是包含的,其实这些是根据个人的需求来确定的。

彻底了解mapreduce核心Shuffle-解惑各种mapreduce问题同样关于上面的问题可以参考关于Mapper、Reducer的个人总结5.编程实现编程实现mapreduce是一种编程模型,我们认识了解,下面就需要编程实现了。

那么mapreduce都能做些什么?

下面我们可以看看MapReduce初级案例

(1):

使用MapReduce去重MapReduce初级案例

(2):

使用MapReduce数据排序MapReduce初级案例(3):

使用MapReduce实现平均成绩通过上面三个例子,也是我们验证前面所理解的内容。

同样可以参考下面内容Hadoopmapper类的阅读Hadoopreducer类的阅读http:

/Mapreduceshuffle和排序hadoop中mapreduce包及制作文档指导Hadoop开发环境搭建及map-reduce开发实例讲解视频下载如何进行Hadoop二次开发指导视频下载5.mapreduce应用应用上面是一些基本的知识,那么我们熟悉之后,其实有些地方,可以应用在其它方面。

下面可以参考:

淘宝之HBaseMapReduce实例分析MapReduce在压力测试中的应用-详细介绍:

详细介绍:

什么是Map/ReduceHadoop简介简介http:

/Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关项目也很丰富,包括ZooKeeper,Pig,Chukwa,Hive,Hbase,Mahout,flume等.这里详细分解这里面的概念让大家通过这篇文章了解到底是什么hadoop:

1.什么是什么是Map/Reduce,看下面的各种解释:

,看下面的各种解释:

(1)MapReduce是hadoop的核心组件之一,hadoop要分布式包括两部分,一是分布式文件系统hdfs,一部是分布式计算框,就是mapreduce,缺一不可,也就是说,可以通过mapreduce很容易在hadoop平台上进行分布式的计算编程。

(2)Mapreduce是一种编程模型,是一种编程方法,抽象理论。

(3)下面是一个关于一个程序员是如何个妻子讲解什么是MapReduce?

文章很长请耐心的看。

我问妻子:

“你真的想要弄懂什么是MapReduce?

”她很坚定的回答说“是的”。

因此我问道:

我:

你是如何准备洋葱辣椒酱的?

(以下并非准确食谱,请勿在家尝试)妻子:

我会取一个洋葱,把它切碎,然后拌入盐和水,最后放进混合研磨机里研磨。

这样就能得到洋葱辣椒酱了。

妻子:

但这和MapReduce有什么关系?

你等一下。

让我来编一个完整的情节,这样你肯定可以在15分钟内弄懂MapReduce.妻子:

好吧。

现在,假设你想用薄荷、洋葱、番茄、辣椒、大蒜弄一瓶混合辣椒酱。

你会怎么做呢?

/妻子:

我会取薄荷叶一撮,洋葱一个,番茄一个,辣椒一根,大蒜一根,切碎后加入适量的盐和水,再放入混合研磨机里研磨,这样你就可以得到一瓶混合辣椒酱了。

没错,让我们把MapReduce的概念应用到食谱上。

Map和Reduce其实是两种操作,我来给你详细讲解下。

Map(映射):

把洋葱、番茄、辣椒和大蒜切碎,是各自作用在这些物体上的一个Map操作。

所以你给Map一个洋葱,Map就会把洋葱切碎。

同样的,你把辣椒,大蒜和番茄一一地拿给Map,你也会得到各种碎块。

所以,当你在切像洋葱这样的蔬菜时,你执行就是一个Map操作。

Map操作适用于每一种蔬菜,它会相应地生产出一种或多种碎块,在我们的例子中生产的是蔬菜块。

在Map操作中可能会出现有个洋葱坏掉了的情况,你只要把坏洋葱丢了就行了。

所以,如果出现坏洋葱了,Map操作就会过滤掉坏洋葱而不会生产出任何的坏洋葱块。

Reduce(化简):

在这一阶段,你将各种蔬菜碎都放入研磨机里进行研磨,你就可以得到一瓶辣椒酱了。

这意味要制成一瓶辣椒酱,你得研磨所有的原料。

因此,研磨机通常将map操作的蔬菜碎聚集在了一起。

所以,这就是MapReduce?

你可以说是,也可以说不是。

其实这只是MapReduce的一部分,MapReduce的强大在于分布式计算。

分布式计算?

那是什么?

请给我解释下吧。

没问题。

假设你参加了一个辣椒酱比赛并且你的食谱赢得了最佳辣椒酱奖。

得奖之后,辣椒酱食谱大受欢迎,于是你想要开始出售自制品牌的辣椒酱。

假设你每天需要生产10000瓶辣椒酱,你会怎么办呢?

我会找一个能为我大量提供原料的供应商。

是的.就是那样的。

那你能否独自完成制作呢?

也就是说,独自将原料都切碎?

/仅仅一部研磨机又是否能满足需要?

而且现在,我们还需要供应不同种类的辣椒酱,像洋葱辣椒酱、青椒辣椒酱、番茄辣椒酱等等。

当然不能了,我会雇佣更多的工人来切蔬菜。

我还需要更多的研磨机,这样我就可以更快地生产辣椒酱了。

没错,所以现在你就不得不分配工作了,你将需要几个人一起切蔬菜。

每个人都要处理满满一袋的蔬菜,而每一个人都相当于在执行一个简单的Map操作。

每一个人都将不断的从袋子里拿出蔬菜来,并且每次只对一种蔬菜进行处理,也就是将它们切碎,直到袋子空了为止。

这样,当所有的工人都切完以后,工作台(每个人工作的地方)上就有了洋葱块、番茄块、和蒜蓉等等。

但是我怎么会制造出不同种类的番茄酱呢?

现在你会看到MapReduce遗漏的阶段搅拌阶段。

MapReduce将所有输出的蔬菜碎都搅拌在了一起,这些蔬菜碎都是在以key为基础的map操作下产生的。

搅拌将自动完成,你可以假设key是一种原料的名字,就像洋葱一样。

所以全部的洋葱keys都会搅拌在一起,并转移到研磨洋葱的研磨器里。

这样,你就能得到洋葱辣椒酱了。

同样地,所有的番茄也会被转移到标记着番茄的研磨器里,并制造出番茄辣椒酱。

(4)上面都是从理论上来说明什么是MapReduce,那么咱们在MapReduce产生的过程和代码的角度来理解这个问题。

如果想统计下过去10年计算机论文出现最多的几个单词,看看大家都在研究些什么,那收集好论文后,该怎么办呢?

方法一:

我可以写一个小程序,把所有论文按顺序遍历一遍,统计每一个遇到的单词的出现次数,最后就可以知道哪几个单词最热门了。

这种方法在数据集比较小时,是非常有效的,而且实现最简单,用来解决这个问题很合适。

方法二:

写一个多线程程序,并发遍历论文。

这个问题理论上是可以高度并发的,因为统计一个文件时不会影响统计另一个文件。

当我们的机器是多核或者多处理器,方法二肯定比方法一高效。

但是写一个多线程程序要比方法一困难多了,我们必须自己同步共享数据,比如要防止两个线程重复统计文件。

方法三:

/把作业交给多个计算机去完成。

我们可以使用方法一的程序,部署到N台机器上去,然后把论文集分成N份,一台机器跑一个作业。

这个方法跑得足够快,但是部署起来很麻烦,我们要人工把程序copy到别的机器,要人工把论文集分开,最痛苦的是还要把N个运行结果进行整合(当然我们也可以再写一个程序)。

方法四:

让MapReduce来帮帮我们吧!

MapReduce本质上就是方法三,但是如何拆分文件集,如何copy程序,如何整合结果这些都是框架定义好的。

我们只要定义好这个任务(用户程序),其它都交给MapReduce。

map函数和函数和reduce函数函数map函数和reduce函数是交给用户实现的,这两个函数定义了任务本身。

map函数:

接受一个键值对(key-valuepair),产生一组中间键值对。

MapReduce框架会将map函数产生的中间键值对里键相同的值传递给一个reduce函数。

reduce函数:

接受一个键,以及相关的一组值,将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)。

统计词频的MapReduce函数的核心代码非常简短,主要就是实现这两个函数。

map(Stringkey,Stringvalue):

/key:

documentname/value:

documentcontentsforeachwordwinvalue:

EmitIntermediate(w,1);

reduce(Stringkey,Iteratorvalues):

awordhttp:

/listofcountsintresult=0;

foreachvinvalues:

result+=ParseInt(v);

Emit(AsString(result);

在统计词频的例子里,map函数接受的键是文件名,值是文件的内容,map逐个遍历单词,每遇到一个单词w,就产生一个中间键值对,这表示单词w咱又找到了一个;

MapReduce将键相同(都是单词w)的键值对传给reduce函数,这样reduce函数接受的键就是单词w,值是一串1(最基本的实现是这样,但可以优化),个数等于键为w的键值对的个数,然后将这些“1”累加就得到单词w的出现次数。

最后这些单词的出现次数会被写到用户定义的位置,存储在底层的分布式存储系统(GFS或HDFS)。

工作原理工作原理http:

/上图是论文里给出的流程图。

一切都是从最上方的userprogram开始的,userprogram链接了MapReduce库,实现了最基本的Map函数和Reduce函数。

图中执行的顺序都用数字标记了。

1.MapReduce库先把userprogram的输入文件划分为M份(M为用户定义),每一份通常有16MB到64MB,如图左方所示分成了split04;

然后使用fork将用户进程拷贝到集群内其它机器上。

2.userprogram的副本中有一个称为master,其余称为worker,master是负责调度的,为空闲worker分配作业(Map作业或者Reduce作业),worker的数量也是可以由用户指定的。

3.被分配了Map作业的worker,开始读取对应分片的输入数据,Map作业数量是由M决定的,和split一一对应;

Map作业从输入数据中抽取出键值对,每一个键值对都作为参数传递http:

/给map函数,map函数产生的中间键值对被缓存在内存中。

4.缓存的中间键值对会被定期写入本地磁盘,而且被分为R个区,R的大小是由用户定义的,将来每个区会对应一个Reduce作业;

这些中间键值对的位置会被通报给master,master负责将信息转发给Reduceworker。

5.master通知分配了Reduce作业的worker它负责的分区在什么位置(肯定不止一个地方,每个Map作业产生的中间键值对都可能映射到所有R个不同分区),当Reduceworker把所有它负责的中间键值对都读过来后,先对它们进行排序,使得相同键的键值对聚集在一起。

因为不同的键可能会映射到同一个分区也就是同一个Reduce作业(谁让分区少呢),所以排序是必须的。

6.reduceworker遍历排序后的中间键值对,对于每个唯一的键,都将键与关联的值传递给reduce函数,reduce函数产生的输出会添加到这个分区的输出文件中。

6.当所有的Map和Reduce作业都完成了,master唤醒正版的userprogram,MapReduce函数调用返回userprogram的代码。

所有执行完毕后,MapReduce输出放在了R个分区的输出文件中(分别对应一个Reduce作业)。

用户通常并不需要合并这R个文件,而是将其作为输入交给另一个MapReduce程序处理。

整个过程中,输入数据是来自底层分布式文件系统(GFS)的,中间数据是放在本地文件系统的,最终输出数据是写入底层分布式文件系统(GFS)的。

而且我们要注意Map/Reduce作业和map/reduce函数的区别:

Map作业处理一个输入数据的分片,可能需要调用多次map函数来处理每个输入键值对;

Reduce作业处理一个分区的中间键值对,期间要对每个不同的键调用一次reduce函数,Reduce作业最终也对应一个输出文件。

总结:

通过以上你是否了解什么是MapReduce了那,什么是key,怎么过滤有效数据,怎么得到自己想要的数据。

MapReduce是一种编程思想,可以使用java来实现,C+来实现。

Map的作用是过滤一些原始数据,Reduce则是处理这些数据,得到我们想要的结果,比如你想造出番茄辣椒酱。

也就是我们使用hadoop,比方来进行日志处理之后,得到我们想要的关心的数据2.设计思路设计思路我们从思想上认识了mapreduce,那么mapreduce具体是什么,我们需要看得见,摸得着。

/设计思路如何表示:

Mapreduce整个工作机制图刚才发现一张讲解mapreduce整个工作机制图,跟大家分享一下,大家发表一下建议,对mapreduce工作机制有何看法,或者那里有不清楚。

mapreduce每一个工作阶段,对我们在工作中处理某种业务都是有很大帮助的。

mapreduce是hadoop的核心,正因为mapreduce,所以才产生了分布式。

MapReduce工作原理讲解有时候我们在用,但是却不知道为什么。

就像苹果砸到我们头上,这或许已经是很自然的事情了,但是牛顿却发现了地球的万有引力。

ok了,希望通过了解MapReduce,我们能够写出更好的MapReduce例子。

第一部分:

MapReduce工作原理工作原理http:

/http:

/MapReduce角色角色Client:

作业提交发起者。

JobTracker:

初始化作业,分配作业,与TaskTracker通信,协调整个作业。

TaskTracker:

保持JobTracker通信,在分配的数据片段上执行MapReduce任务。

提交作业提交作业在作业提交之前,需要对作业进行配置程序代码,主要是自己书写的MapReduce程序。

输入输出路径其他配置,如输出压缩等。

配置完成后,通过JobClinet来提交作业的初始化客户端提交完成后,JobTracker会将作业加入队列,然后进行调度,默认的调度方法是FIFO调试方式。

任务的分配任务的分配TaskTracker和JobTracker之间的通信与任务的分配是通过心跳机制完成的。

TaskTracker会主动向JobTracker询问是否有作业要做,如果自己可以做,那么就会申请到作业任务,这个任务可以使Map也可能是Reduce任务。

任务的执行任务的执行申请到任务后,TaskTracker会做如下事情:

拷贝代码到本地拷贝任务的信息到本地启动JVM运行任务状态与任务的更新状态与任务的更新任务在运行过程中,首先会将自己的状态汇报给TaskTracker,然后由TaskTracker汇总告之JobTracker。

任务进度是通过计数器来实现的。

作业的完成作业的完成JobTracker是在接受到最后一个任务运行完成后,才会将任务标志为成功。

此时会做删除中间结果等善后处理工作。

第二部分:

错误处理第二部分:

错误处理任务失败任务失败MapReduce在设计之出,就假象任务会失败,所以做了很多工作,来保证容错。

一种情况:

子任务失败另一种情况:

子任务的JVM突然退出任务的挂起TaskTracker失败失败TaskTracker崩溃后会停止向Jobtracker发送心跳信息。

/Jobtracker会将该TaskTracker从等待的任务池中移除。

并将该TaskTracker上的任务,移动到其他地方去重新运行。

TaskTracker可以被JobTracker放入到黑名单,即使它没有失败。

JobTracker失败失败单点故障,Hadoop新的0.23版本解决了这个问题。

第三部分:

作业调度第三部分:

作业调度FIFOHadoop中默认的调度器,它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业公平调度器公平调度器为任务分配资源的方法,其目的是随着时间的推移,让提交的作业获取等量的集群共享资源,让用户公平地共享集群。

具体做法是:

当集群上只有一个任务在运行时,它将使用整个集群,当有其他作业提交时,系统会将TaskTracker节点空间的时间片分配给这些新的作业,并保证每个任务都得到大概等量的CPU时间。

容量调度器容量调度器支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。

调度时,首先按以下策略选择一个合适队列:

计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;

然后按以下策略选择该队列中一个作业:

按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。

但是不可剥夺式配置公平调度器配置公平调度器1.修改mapred-stie.xml加入如下内容mapred.jobtracker.taskSchedulerorg.apache.hadoop.mapred.FairSchedulermapred.fairscheduler.allocation.file/opt/hadoop/conf/allocations.xmlmapred.fairscheduler.poolnamepropertypool.name2.在Hadoopconf下创建allocations.xml内容为http:

/样例:

552.0633.重启JobTracker4.访问http:

/jobTracker:

50030/scheduler,查看FariScheduler的UI5.提交任务测试第四部分:

第四部分:

Shuffle与排序与排序Mapreduce的map结束后,把数据重新组织,作为reduce阶段的输入,该过程称之为shuffle-洗牌。

而数据在Map与Reduce端都会做排序。

MapMap的输出是由collector控制的我们从collect函数入手Reducereduce的Shuffle过程,分成三个阶段:

复制Map输出、排序合并、reduce处理。

主要代码在reduce的run函数Shuffle优化优化首先Hadoop的Shuffle在某些情况并不是最优的,例如,如果需要对2集合合并,那么其实排序操作时不需要的。

我们可以通过调整参数来优化ShuffleMap端io.sort.mbReduce端mapred.job.reduce.input.buffer.percent第五部分:

任务的执行时的一些特有的概念第五部分:

任务的执行时的一些特有的概念推测式执行推测式执行http:

/每一道作业的任务都有运行时间,而由于机器的异构性,可能会会造成某些任务会比所有任务的平均运行时间要慢很多。

这时MapReduce会尝试在其他机器上重启慢的任务。

为了是任务快速运行完成。

该属性默认是启用的。

JVM重用重用启动JVM是一个比较耗时的工作,所以在MapReduce中有JVM重用的机制。

条件是统一个作业的任务。

可以通过mapred.job.reuse.jvm.num.tasks定义重用次数,如果属性是-1那么为无限制。

跳过坏记录跳过坏记录数据的一些记录不符合规范,处理时抛出异常,MapReduce可以讲次记录标为坏记录。

重启任务时会跳过该记录。

默认情况下该属性是关闭的。

任务执行环境任务执行环境Hadoop为Map与Reduce任务提供运行环境。

如:

Map可以知道自己的处理的文件问题:

多个任务可能会同时写一个文件解决办法:

将输出写到任务的临时文件夹。

目录为:

mapred.out.put.dir/temp/$mapred.task.id第六部分:

第六部分:

MapReduce的类型与格式的类型与格式类型类型MapReduce的类型使用键值对作为输入类型(key,value)输入输出的数据类型是通过输入输出的格式进行设定的。

输入格式输入格式输入分片与记录文件输入文本输入二进制输入多文件输入数据库格式的输入输入分片与记录输入分片与记录http:

/Hadoop通过InputSplit表示分片。

一个分片并不是数据本身,而是对分片数据的引用。

InputFormat接口负责生成分片文件输入文件输入实现类:

FileInputFormat通过文件作为输入源的基类。

四个方法:

addInputPath()addInputPaths()setInputPath()setInputPaths()FileInputFormat会按HDFS块的大小来分割文件避免分割继承FileInputFormat重载isSplitable()returnfalse文本输入文本输入实现类:

TextInputFormathttp:

/TextInputFormat是默认的输入格式。

包括:

KeyValueTextInputFormatNLineInputFormatXML输入分片与HDFS块之间的关系TextInputFormat的某一条记录可能跨块存在二进制输入二进制输入实现类:

SequenceFileInputFormat处理二进制数据包括:

SequenceF

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2