大数据面试宝典之mapreduce优化篇_第1页
大数据面试宝典之mapreduce优化篇_第2页
大数据面试宝典之mapreduce优化篇_第3页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、充分利用CombinerMap提前进行了一次Reduce可减少 Map Task 中间充分利用CombinerMap提前进行了一次Reduce可减少 Map Task 中间输出的结从而减少各个 Reduce Task 的 拷贝数据量,最终表现为MapTaskReduceTask行时间缩短。选择合理的Writable为应用程序处理的数据选择合适的 Writable 类型可性能比如处理整数类型数据时入在转换为整数类型要高效Writable 比先以 Text 类型读如果输出整数的大部分可用一个或两个字节保存,那么直接采用VWritable 或者 VLongWritable,它们采用了变长整型的编可以

2、大大减少输出数据量增加输入文件的副本数,就是充分利用本地HDFS3 ,那么map数据的时候,在启动map task机器本地的数据为 3/8,一部分数据是通过网络从其他节点拿到那么如果副本数设置为 8 会是什么情况相当于每个子节点上都会有一份完整的数据的时候直接本地拿,不需要通过网络这一层了,但是在实际情况中设置副本数8不可行的,因为数据本身非常庞大,副本数超过5集群的磁盘提前合并map文件,减少提前合并map文件,减少map 数map 阶段的第数据并切每个分片由一个 map 处理,当输入的是海量的小文件的时候,会启动大量的 map task,率及其的解决方式是使用CombineInputFor

3、mat定义分片策略对小文件进行合并处理 ,从而map task数量,减少map过程使用的时间 。map task 的启动数量也和下面这几个参数有关系: mapred.min.split.size:Input Split 的最小值 默认值 1 mapred.max.split.size:Input Split 的最大值 dfs.block.size:HDFS 中一个block默认值128MBmapred.min.split.size于dfs.block.size时候一个block分为多个分片,也就是对应多个 map task当 mapred.min.split.size 大于 dfs.block

4、.size 的时候,一个分片可能对多个block,也就是一个mapblock提高block集群的网络、IO 等性能很好的时候,建议调高 根据数据源的特性,主要调整mapred.min.split.size控制maptask提高map出的该阶段是 map side 中将结果输出到磁盘之前的一个处理方式通过其进行设置的话可以减少其进行设置的话可以减少map务的IO销,从而提由于 map 任务运行时中间结果在 buffer 中,默认当缓存用量达到 80%的时候就开始写入磁盘,这个过程叫做 spill(溢出这个bffer默认的大小是10M可以通过设定o.sot.mb的值来进行调整map生的数据非常如果

5、默认buffer小不够看那么势必会进行非常多次的spill,进行 spill意味着要写磁盘,产生 IO销 ,这时候就可以把 io.sort.mb 调大,那么 map 在整个计算过程中 spill 的次数就势必会降低,map task 对磁盘的操作就会变少如果map tasks瓶颈在磁盘上,这样调整就会大大提高map计算性能,但是如果将 io.sort.mb 调的非常大的时候,对机器的配置要求map不是要等到buffer写满时才进行spill,因为如果全部写况空间的始进行可以通过设置 io.sort.spill.percent 的值来调整这个阈这个参数同样也是影响spill繁进而影响maptas

6、k行周期磁盘的读写频率,但是通常情况下只需要对 io.sort.mb 进行调整合理配置mapMerge该阶段是 map 产生 spill 之后,对 该阶段是 map 产生 spill 之后,对 spill 进行处理的过程,通过对其行配置也可以达到优化 IO 开销的目的,map 产生 spill 之后必须将些 spill 进行合并,这个过程叫做 merge ,merge 过程是并行处理 spill 的,每次并行多少个 spill 是由参数 io.sort.factor 指定的,默认为 10 个,如果产生的 spill 非常多,merge 的时候每次只能处理 10 个 spill,那么还是会造成频

7、繁的 IO 处理 ,适当的调大每次并行处理的 spill 数有利于减少merge 数因此可以影响map 的性但是如果调整的数值过大并行处理 spill 的进程过多会对机器造成很大压Combine 的使用策知道如果 map side 设置了 Combiner,那么会根据设定的函数对 map 输出的数据进行一次类 reduce 的预处理但是和分组、排序分组不一样的是,combine 发生的阶段可能是在merge也可能是在merge这个时机可以由一个参数控制 当 job 中设定了 combiner,并且 spill 数最少有 3 个的时候,那combiner数就会在merge生结果文件之前例如产生的

8、spill 非常多虽进行优化配置但是在此之可以通过merge 阶段的还可以通过先执行combine结进行处理之后再对数据进行merge这样一来merge段的量将会进一步减少,IO 开销也会被降到最低输出中间这个阶段是 map side 的最后一个步在这个阶段是 map side 的最后一个步在这个步骤中也可以通过压合理的开启 map 压缩压缩的好处在于,通过压缩减少写入读出磁盘的数据量。对中间非常大,磁盘速度成为map行瓶颈的job,尤其有控制输出是否使用压缩的参数是true者press.map.output,值为启用压缩之后牺牲 CPU 的一些计算资源可以节省 IO 开销非常适合 IO 密集

9、型的作业(如果是 CPU 密集型的作业不建议设置设置压缩的时可以选择不同的压缩算Hadoop认提供了等压缩通常来说,想要达到比较平衡的 cpu 和磁盘压缩比,LzoCodec 比较合适,但也要取决于 job 的具体情况如果想要自行选择中间结果的压缩算法,可以设置配置参数/或者其他用户自行选择的压缩方Mapsidetuning从上面提到的几点可以看到,map 端的性能瓶颈都是频繁的 IO 操造成Mapsidetuning从上面提到的几点可以看到,map 端的性能瓶颈都是频繁的 IO 操造成的,所有的优化也都是针对 IO 进行的,而优化的瓶颈又很大度上被机器的配置等所限map 端调优的相关参数选类

10、默认描1.InputSplit最小InputSplit最大100map冲区大io.sort.spill.percent 0.8 缓冲区merge进10 并行处理spill3最少有多少个 spill 的时候 combinemap 中间数据是否压压缩算Shuffle段优由于 job 的每一个 map由于 job 的每一个 map 都会根据 reduce(n)数将数据分成 map 输出果分成 n 个 partition,所以 map 的中间结果中是有可能包含每一reduce 需要处理的部分数据为了优化 reduce 的执行时间,hadoop 中等第一个 map 结束后,所的 reduce 就开始尝试

11、从完成的 map 中部分数该 reduce 对应的 在这个shuffle由于map数量通常是很多个每个中又都有可能包含每个 reduce 所需要的数所以对于每个 reduce 来说,去各个 map 中拿数据也是并行的,可以通过 mapred.reduce.parallel.copies 这个参数来调整,默认为 5当 map 数量很多的时候,就可以适当调大这个值,减少 shuffle 过程果丢失、网络等其他原因导致 map 任务失败而 reduce 不会因为 map 失败就永无止境的等待下去,它会尝试去别的地方获得自己的数据(这段时间失败的 map 可能会被重跑)所以设置 reduce 获取数据

12、的超时时间可以避免一些因为网络不好导mapred.reduce.copy.backoff,默认 一般情况下不用调整这个值,因为生产环境的网络都是很流由于reduce并行将map到本也是需要进由于reduce并行将map到本也是需要进行 的,所以 io.sort.factor 的配置选项同样会影响 reduce 进行 merge 时行map样上写入磁盘的,所控制该值的参数为过来的数据也是存入一个 buffer 中而不是同样可以控制这个值来减少IOercent,默认 0.7,这是一个百分比思是reduce可用内存中拿出70%作为buffer放reduce 的可用内存通过 mapred.child.

13、java.opts 来设置, 比如置为mapbuffer小的两倍左设置了 reduce 端的 buffer 大小同样可以通过一个参数来控中的数据达到一个阈值的时候开始往磁盘写数据mapred.job.shuffle.merge.percent,默认为 归并排序sort过程一般非常短,因为是边copymergesort面就直接进入真正的 reduce 计算阶段了之reduc 端的 buffer,默认情况下,数据达到一个阈值时候,buffer 中的数据之reduc 端的 buffer,默认情况下,数据达到一个阈值时候,buffer 中的数据就会写入磁盘,然后 reduce 会从磁盘中获有的数也就是说,buffer 和 reduce 是没有直接关联的,中间多个一个写磁-读磁盘的过程,既然有这个弊端,那么就可以通过参数来使得 buffer 中的一部分数据可以直接输送到 reduce,从而减少 IO销ercent,默认为当值大于 0 保留指定比例的内存读 buffer 中的数据直接reduce这样一来,设置buffer内存数据需要内存,reduce 计算要内存,所以要根据作业的运行情况进行调reduce 调优主要参数选类默认描可用内存的比5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论