zoukankan      html  css  js  c++  java
  • hadoop mapreduce 端参数优化

    在MapReduce执行过程中,特别是Shuffle阶段,尽量使用内存缓冲区存储数据,减少磁盘溢写次数;同时在作业执行过程中增加并行度,都能够显著提高系统性能,这也是配置优化的一个重要依据。

    下面分别介绍I/O属性和MapReduce属性这两个类的部分属性,并指明其优化方向。

    1 I/O属性类的优化

    I/O属性类主要包括在Shuffle阶段中相关的I/O过程的属性,在分析了每个具体属性后从以下几个属性入手进行优化。

    (1) io.sort.factor属性,int类型,Map端和Reduce端使用

    该属性设置在Map端和Reduce端都使用到的对文件Sort时一次合并的最大流,其默认值是10,即一次合并10个流。在集群中,将其适当增大能够提高并行度以缩短合并所需时间。将此默认值增加到100是比较常见的。

    (2) io.sort.mb属性,int类型,Map端使用

    该属性设置对Map输出进行排序时使用的环形内存缓冲区的大小,以M字节为单位,默认是100M。如果允许,应该增加它的值来减少磁盘溢写的次数以提高性能。

    (3) io.sort.record.percent属性,float类型,Map端使用

    该属性设置保留的io.sort.mb的比例用来存储Map输出的记录边界,剩余的空间用来存储Map输出记录本身,默认是0.05。

    (4) io.sort.spill.percent属性,float类型,Map端使用

    该属性设置Map输出内存缓冲和边界记录索引两者使用比例的阈值,达到此值后开始溢写磁盘的过程,默认是0.80。

    (5) io.file.buffer.size属性,int类型,MapReduce作业使用

    该属性设置MapReduce作业的I/O操作中所提供的缓冲区的大小,以字节为单位,默认是4096字节。这是一个比较保守的设置,通过增大它的大小能够减少I/O次数以提高性能。如果系统允许,64KB(65536字节)至128KB(131072字节)是较普遍的选择。

    2 MapReduce属性类的优化

    MapReduce属性类主要包括在MapReduce执行过程中相关配置属性,重点从以下的部分属性去分析性能优化。

    (1) mapred.reduce.parallel.copies属性,int类型,Reduce端使用

    该属性设置将Map输出复制到Reduce的线程的数量,默认为5。根据需要可以将其增大到20-50,增加了Reduce端复制过程的并行数,提高了系统性能。

    (2) mapred.child.java.opts属性,String类型,Map和Reduce任务虚拟机使用

    该属性设置Map和Reduce任务运行时Java虚拟机指定的内存的大小,默认-Xmx200m,分配给每个任务200MB内存。只要条件允许,应该让任务节点上的内存大小尽量大,可以将其增大到-Xmx512m,即512MB,以提高MapReduce作业的性能。

    (3) mapred.job.shuffle.input.buffer.percent属性,float类型,Reduce端使用

    该属性设置整个堆空间的百分比,用于Shuffle的复制阶段分配给Map输出缓存,默认是0.70,适当增大比例可以使Map输出不被溢写到磁盘,能够提高系统性能。

    (4) mapred.job.shuffle.merge.percent属性,float类型,Reduce端使用

    该属性设置Map输出缓存中使用比例的阈值,用于启动合并输出和磁盘溢写的过程,默认是0.66。如果允许,适当增大其比例能够减少磁盘溢写次数,提高系统性能。

    (5) mapred.inmem.merge.threshold属性,int类型,Reduce端使用

    该属性设置启动合并输出和磁盘溢写过程的最大Map输出数量,默认为1000。由于Reduce端复制的中间值能够全部存在内存中可以获得最佳性能。如果Reduce函数内存需求很少,可以将该属性设置为0,即没有阈值限制,由mapred.job.shuffle.merge.percent属性单独控制溢写过程。

    (6) mapred.job.reduce.input.buffer.percent属性,float类型,Reduce端使用

    该属性设置在Reduce过程中用来在内存中保存Map输出的空间占整个堆空间的比例。Reduce阶段开始时,内存中的Map输出大小不能大于这个值。默认为0.0,说明在Reduce开始前所有的Map输出都合并到硬盘中以便为Reduce提供尽可能多的内存。然而如果Reduce函数内存需求较小,可以将该值设置为1.0来提升性能。

    (7) tasktracker.http.threads属性,int类型,Map端使用

    该属性设置集群中每个tasktracker用于将map输出传给reducer的工作线程的数量,默认是40。可以将其提高至40-50之间,能够增加并线线程数,提高集群性能。

    调整mapred-site.xml文件,增加JVM的重用次数:

    <property>
    <name>mapred.job.reuse.jvm.num.tasks</name>
    <value>50</value>
    </property>
    将所有配置文件统一,重新启动JobTracker进程与所有TaskTracker进程。
    设置了jvm复用,即一个job内,多个task共享jvm,避免多次启动jvm,浪费资源和时间。提高运行效率,减少JOB执行的时间。
  • 相关阅读:
    POJ 2251 Dungeon Master
    HDU 3085 Nightmare Ⅱ
    CodeForces 1060 B Maximum Sum of Digits
    HDU 1166 敌兵布阵(树状数组)
    HDOJ 2050 折线分割平面
    HDU 5879 Cure
    HDU 1878 欧拉回路
    HDU 6225 Little Boxes
    ZOJ 2971 Give Me the Number
    HDU 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/weijueye/p/4484023.html
Copyright © 2011-2022 走看看