• 从一个经典案例看优化mapred.map.tasks的重要性


    我所在公司所使用的生产Hive环境的几个参数配置如下:
    dfs.block.size=268435456
    hive.merge.mapredfiles=true
    hive.merge.mapfiles=true
    hive.merge.size.per.task=256000000
    mapred.map.tasks=2 

    因为合并小文件默认为true,而dfs.block.sizehive.merge.size.per.task的搭配使得合并后的绝大部分文件都在300MB右。

    CASE 1

    现在我们假设有3300MB大小的文件,那么goalsize = min(900MB/2,256MB) = 256MB (具体如何计算map数请参见http://blog.sina.com.cn/s/blog_6ff05a2c010178qd.html)
    所以整个JOB会有6map,其中3map分别处理256MB的数据,还有3map分别处理44MB的数据。
    这时候木桶效应就来了,整个JOBmap阶段的执行时间不是看最短的1map的执行时间,而是看最长的1map的执行时间。所以,虽然有3map分别只处理44MB的数据,可以很快跑完,但它们还是要等待另外3个处理256MBmap。显然,处理256MB3map拖了整个JOB的后腿。

    CASE 2

    如果我们把mapred.map.tasks设置成6,再来看一下有什么变化:
    goalsize = min(900MB/6,256MB) = 150MB
    整个JOB同样会分配6map来处理,每个map处理150MB的数据,非常均匀,谁都不会拖后腿,最合理地分配了资源,执行时间大约为CASE 159%(150/256) 

    案例分析:

    虽然mapred.map.tasks2调整到了6,但是CASE 2并没有比CASE 1多用map资源,同样都是使用6map。而CASE 2的执行时间约为CASE 1执行时间的59%
    从这个案例可以看出,对mapred.map.tasks进行自动化的优化设置其实是可以很明显地提高作业执行效率的。

  • 相关阅读:
    php小结
    HTML-WEB前端-photoshop切图抠图详解
    JS面向对象的程序设计
    AJAX同步与异步的区别
    数据库的优化
    phpcms网站搬家 至 服务器 完整并且详细过程
    phpcms网页替换验证码功能 及 搜索功能
    用phpcms切换中英文网页的方法(不用解析二级域名)、phpcms完成pc和手机端切换(同一域名)
    JS常用屏蔽代码
    信息安全政策(隔离与监控)
  • 原文地址:https://www.cnblogs.com/java20130722/p/3206944.html
Copyright © 2020-2023  润新知