调度算法: mapreduce当有很多的作业在执行的时候,是按照什么顺序去执行的?

  调度算法顺序需要关注:
    1.提高作业的吞吐量.
    2.要考虑优先级.
  三种调度器:如果作业跑不完,并且机器资源利用率比较低,这时候就可以考虑这些东西
    1.FifoScheduler,默认的调度算法,先进先出的方式处理应用,只有一个队列可提交应用,没有应用优先级可以配置.
    2.CapacityScheduler,容量调度器.多队列的,依靠作业,如果需求资源少了,优先级就会高一些,需求资源多了,优先级就会低一些.
    3.FairScheduler:公平调度器,多队列的,多用户共享资源.程序在运行的时候可以在客户端设置优先级,也可以设置抢占.
  最简单的使用方法:
    1.配置FairScheduler:
      修改配置文件mapred-site.xml,然后重启集群即可
      更多配置在:conf/fair-scheduler.xml
      <property>
        <name>mapred.jobtracker.tasktracker</name>
          <!-- <value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value> -->
        <value>org.apache.hadoop.mapred.FairSchedler</value>
      </property>
    2.配置CapacityScheduler:
      修改配置文件mapred-site.xml,容量调度器是多队列的,需要指定的,有一个默认的,default
      更多配置在:conf/capacity-scheduler.xml
      <property>
        <name>mapred.jobtracker.tasktracker</name>
        <value>org.apache.hadoop.mapred.CapacityTaskScheduler</value>
      </property>
      <property>
        <name>mapred.queue.names</name>
        <value>default</value>
      </property>

mapredece的job进行调优: 关注配置文件mapred-default.xml,作业的调优跟具体的环境有关

  从两个方面考虑,一个是map阶段,一个是reduce阶段
  一个文件起一个map任务,如果存在大量的小数据,会有大量的任务运行,会造成资源的浪费,可以使用SequenceFile.我们的map任务和reduce任务本身都是java进程,我们在启动map任务和reduce任务的话,实际是在启用java进程,就会耗费大量的资源.将大量的小文件交给一个map来处理,可以自定义CombineFileInputFormat.
  小文本合成一个大文件来运行效率其实是不相当的,五个不同机器上的小文件用一个map来处理,势必产生网络的传输.这时候也会占用很多的时间,但是这个相比每一个文件占用一个map来说处理时间要少一些.最好的办法就是不要在hdfs中放大量的小文件.
  推测执行:作业的运行的时候,如果有的比较慢,程序就会担心那个任务是不是比较慢,会影响整个作业的运行呀,那么再起一个相同任务去运行.也就是说对于同一份数据源有两个任务同时在运行,谁先结束就使用谁的,谁先结束就是用谁的,没有结束的杀死.
  推测执行在整个集群上应该要关闭,特定需要的作业单独开启,一般可以省下5%-10%的集群资源.
    mapred.map.task.speculative.execution=true;
    mapred.reduce.task.speculative.execution=false ;
    资源不紧张的时候可以开启.
  开启JVM重用:
    开启进程就等于新开一个jvm,为了节省资源,开启虚拟机的重用,可以不用关闭虚拟机,在这里边再起map,再起reduce就可以了,这叫开启jvm的重用.
    mapred.job.resue.jvm.tasks=-1;
  增加InputSplit的大小:
    mapred.min.split.size=268435456
    因为一个InputSplit代表一个map任务,InputSplit的数量少了,那么map任务就少了,执行占用的资源就少了,如果把InputSplit增大之后,一个map处理的资源也会多.InputSplit数量少了,但是map执行的数据多了.我们的map任务执行的InputSplit的话,意味着我们的map的任务已经开启了进程,初始化已经完成了,省下的就是重用这个进程,增大InputSplit之后,数据量就会加大,那么这个时候,一个map可以处理更多的数据,吞吐量就上来了.
  增大map输出的缓存.
    io.sort.mb=300
    map会产生输出,输出会送给reduce,reduce再把map任务的输出拿走之前,map要在内存中存放,当我们的map在内存中装不下的话,就会放到磁盘,100兆就会装不小.map往磁盘的每一次写都是一次IO的操作.资源的IO也是一个重量级的操作,所以就建议一次多写点东西,map的输出
  增加合并spill文件的数量:
    spill来自于:map任务的输出会先放到内存中,内存中装不小会先往磁盘上写,内存中装不下往磁盘上写的过程叫做spill,数据量如果很大的话,是需要spill很多次的,在磁盘就会产生这种 很多的小文件,这种很多的小文件,让reduce往这取可不行,那么map端就会把磁盘上的这种小文件合并到一起,合成一个文件.合成的过程就是合并,磁盘的这个操作和往写磁盘是一个道理,这如果说一次合并的多的话,合并的次数就会少,磁盘合并会耗费内存,也是会耗费cpu的,所以前边有map端操作,这还有spill操作,还有合并操作,那么应该把更多资源留给map,而不是留给后边的spill,这些过程又是不可少的,所以就只能使这样的过程占用的资源尽量少,也就是说运行的时间尽量短.一次性输出到磁盘多一些,合并的时候,一次合并多一些.
  map端输出压缩,推荐LZO压缩算法:
    mapred.compress.,ap.output=true ;
    mapred.map.output.compression.codec=com.hadoop.compression.lzo.LzoCodec;
  增大shuffle复制线程数:
    mapred.reduce.parallel=15;
    map端输出送到reduce端的这个过程叫做shuffle,shuffle的时候是reduce端发起请求,map端通过http复制过去,在复制的时候并发的线程数多了,意味着同时拷贝多份,换句话说就是吞吐量上去了.增加shuffle执行速度,减小shuffle运行的时间.并发量上去了,意味着网络占用磁盘带宽就高了,这种情况下,网络一般是没问题的,因为在内网并发线程数上去了,影响不是太大,所以这个东西是需要提高的.
  设置单个节点map,reduce执行数量,默认值是2
    把任务是改多了,意味着可以单机并行执行多个任务.会对内存占用增加.
    mapred.tasktracker.map.tasks.maxnum=2;
    mapred.tasktracker.reduce.tasks.maxnum=2;

mapreduce的调度算法和job调优的更多相关文章

  1. FIFO调度算法和LRU算法

    一.理论 FIFO:先进先出调度算法 LRU:最近最久未使用调度算法 两者都是缓存调度算法,经常用作内存的页面置换算法. 打一个比方,帮助你理解.你有很多的书,比如说10000本.由于你的书实在太多了 ...

  2. [大牛翻译系列]Hadoop(8)MapReduce 性能调优:性能测量(Measuring)

    6.1 测量MapReduce和环境的性能指标 性能调优的基础系统的性能指标和实验数据.依据这些指标和数据,才能找到系统的性能瓶颈.性能指标和实验数据要通过一系列的工具和过程才能得到. 这部分里,将介 ...

  3. [大牛翻译系列]Hadoop(11)MapReduce 性能调优:诊断一般性能瓶颈

    6.2.4 任务一般性能问题 这部分将介绍那些对map和reduce任务都有影响的性能问题. 技术37 作业竞争和调度器限制 即便map任务和reduce任务都进行了调优,但整个作业仍然会因为环境原因 ...

  4. hadoop MapReduce - 从作业、任务(task)、管理员角度调优

    Hadoop为用户作业提供了多种可配置的参数,以允许用户根据作业特点调整这些参数值使作业运行效率达到最优. 一 应用程序编写规范 1.设置Combiner         对于一大批MapReduce ...

  5. 大数据技术 - MapReduce的Shuffle及调优

    本章内容我们学习一下 MapReduce 中的 Shuffle 过程,Shuffle 发生在 map 输出到 reduce 输入的过程,它的中文解释是 “洗牌”,顾名思义该过程涉及数据的重新分配,主要 ...

  6. MapReduce调优总结与拓展

    本文为<hadoop技术内幕:深入解析MapReduce架构设计与实现原理>一书第9章<Hadoop性能调优>的总结. 图1 Hadoop层次结构图 从管理员角度进行调优 1. ...

  7. MapReduce编程实战之“调试”和&quot;调优&quot;

    本篇内容 在上一篇的"初识"环节,我们已经在本地和Hadoop集群中,成功的执行了几个MapReduce程序,对MapReduce编程,已经有了最初的理解. 在本篇文章中,我们对M ...

  8. [大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化

    6.4.6 优化数据序列化 如何存储和传输数据对性能有很大的影响.在这部分将介绍数据序列化的最佳实践,从Hadoop中榨出最大的性能. 压缩压缩是Hadoop优化的重要部分.通过压缩可以减少作业输出数 ...

  9. [大牛翻译系列]Hadoop(15)MapReduce 性能调优:优化MapReduce的用户JAVA代码

    6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduc ...

随机推荐

  1. java:IO-读写大文件

    import java.io.*; class Test { public static void main(String args[]){ FileInputStream fin =null; Fi ...

  2. Intellij IDEA创建javaWeb以及Servlet简单实现

    1.创建web工程 File --> New --> Project...

  3. 使用phantomjs对页面进行截图

    本文章参考了使用phantomjs操作DOM并对页面进行截图需要注意的几个问题 及 phantomjs使用说明 这两篇文章,初次接触phantomjs的童鞋可以去看下这两篇原文 在学习中可以看下 ph ...

  4. YASKAWA电机控制(2)---调试

    2015 5 23 基础调试—点动 上次接线由于没有接地,导致外壳带电,非常危险. 由于上次接线端子被弄坏,这次自己重做.由于没有压线钳,只用尖嘴钳把线压近端子,有可能会松动. 接线的时候Lc1.Lc ...

  5. 从输入 URL 到页面加载完的过程中都发生了什么---优化

    这篇文章是转载自:安度博客,http://www.itbbu.com/1490.html 在很多地方看到,感觉不错,理清了自己之前的一些思路,特转过来留作记录. 一个HTTP请求的过程 为了简化我们先 ...

  6. STL容器的效率比较

    1.介绍 顺序存储容器 : string.vector.list.deque 关联存储容器:map底层采用的是树型结构,多数使用平衡二叉树实现,查找某一值是常数时间,遍历起来效果也不错, 只是每次插入 ...

  7. eclipse jetty插件安装(离线版)

    按照网上的说法安装jetty插件,run-jetty-run,google那个网址根本链接不上.所以插件装不上,网上搜索本地版,试了几个都不好使,功能不全,这是因为下载的本地资源jar包不全导致,好坑 ...

  8. JS中字符串拼装 单双引号的处理 字符转义

    js中可能会用到动态追加元素,可能数据也是从后台传过来的,当然有两种思路, 1.在后台拼装好直接返回; 2.在前台js里面拼装, 如果拼装大量的html时可能单双引号就容易出问题;那么如何解决呢?最近 ...

  9. C#中默认的修饰符

    参考自Default visibility for C# classes and members (fields, methods, etc)? Classes and structs that ar ...

  10. Python中模拟enum枚举类型的5种方法分享

    这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下   以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...