`

从一个经典案例看优化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进行自动化的优化设置其实是可以很明显地提高作业执行效率的。

 

分享到:
评论

相关推荐

    hadoop 2.9.0 mapred-default.xml 属性集

    Hadoop是一个开源的、能够存储和处理大规模数据集的软件框架。Hadoop 2.9.0版本中的mapred-default.xml文件包含了MapReduce作业的配置属性,这些属性定义了MapReduce作业执行过程中的各种行为和参数。下面我们来详细...

    mapred.zip_hadoop_hadoop mapreduce_mapReduce

    总的来说,"mapred.zip"是一个全面了解和学习Hadoop MapReduce的重要资源。无论是初学者还是经验丰富的开发者,都可以从中获取到有价值的信息,提升在大数据处理领域的技能。通过深入研究文档、源码和测试样例,我们...

    hive优化经典.pdf

    通过设置mapred.reduce.tasks参数,可以控制拆分后的文件数量,从而确定Map任务的数量。 在实际操作中,应该根据具体的业务需求和数据特点来决定Map数量的控制策略。关键是要遵循两个原则:一是保证大数据量能够...

    avro-mapred-1.7.8-SNAPSHOT-hadoop2

    在MapReduce任务中读取Avro文件,会使用到avro-mapred.jar。 然而目前的avro-mapred.jar是基于较老的版本的,使用时会报错: org.apache.hadoop.mapred.YarnChild: Error running child : java.lang....

    Hive脚本任务参数优化配置.doc

    - Reduce个数设置:`set mapred.reduce.tasks = 10;` 直接设置Reduce任务的数量;`set hive.exec.reducers.bytes.per.reducer=` 控制每个Reduce处理的数据量上限;`set hive.exec.max.created.files = 10000;` 限制...

    hive性能优化

    默认情况下,`mapred.min.split.size`为1B,`mapred.max.split.size`为256MB,这意味着一个Map任务处理的数据量上限为256MB。如果发现Map任务执行时间过长,可以通过减小`mapred.max.split.size`增加Map任务的数量,...

    hive优化.docx

    * 设置Reduce个数:set mapred.reduce.tasks=800; * 设置Reduce处理的数据量:set hive.exec.reducers.bytes.per.reducer = 100000000; 4. 小表与大表关联 小表与大表关联也容易导致数据倾斜问题。解决方法是: *...

    深入浅出数据仓库中SQL性能优化

    \[ \text{num_Map_tasks} = \max[\text{Mapred.min.split.size}, \min(\text{dfs.block.size}, \text{Mapred.max.split.size})] \] - **Mapred.min.split.size**:数据的最小分割单元大小,默认值为1B。 - **Mapred...

    mapred.github.io

    标题 "mapred.github.io" 暗示我们讨论的主题与Hadoop MapReduce有关,这是一个分布式计算框架,广泛用于处理和分析大数据集。该主题通常涉及并行计算、数据分片、任务调度以及与GitHub的关联,后者是一个代码托管...

    Hadoop源码 包含mapred及mapreduce

    Hadoop源码 包含mapred

    hive工作调优小结

    但是需要注意的是,直接修改**Mapred.map.tasks**是无效的。 **优化建议**: - 如果作业执行速度较慢,可以考虑增加Map任务的数量,以提高并行度。 - 如果作业执行速度较快,增加Map任务数量可能不会带来明显加速...

    hive优化建议.docx

    2. `mapred.min.split.size.per.node`: 指定一个节点上split的最小大小,应设为128MB。 3. `mapred.min.split.size.per.rack`: 设置一个交换机下的split最小大小,同样为128MB。 4. `hive.input.format`: 使用`...

    hadoop 配置项的调优

    2. **mapred.map.tasks.speculative.execution** 和 **mapred.reduce.tasks.speculative.execution**:这两个参数控制是否启用推测执行。当某些任务由于硬件或负载问题执行较慢时,推测执行会启动新的任务副本,加快...

    hadoop作业调优参数整理及原理

    - **mapred.map.tasks**和**mapred.reduce.tasks**:这两个参数分别用于设置Mapper和Reducer的数量。适当调整可以平衡集群资源的使用,提高作业并行度。 5. **Split大小** - **mapred.max.split.size**和**mapred...

    hadoop0.23.9离线api

    org.apache.hadoop.mapreduce.lib.map org.apache.hadoop.mapreduce.lib.output org.apache.hadoop.mapreduce.lib.partition org.apache.hadoop.mapreduce.lib.reduce org.apache.hadoop.mapreduce.security ...

    hive调优策略

    - 通过设置`mapred.reduce.tasks`参数来手动增加Map任务的数量。 - 使用`distribute by`子句创建一个分布表,将原始数据按随机原则重新分布到多个文件中,从而增加Map任务数量。 #### 四、深入理解大小表Join优化...

    Map-Reduce体系架构

    - 可以通过调整`mapred.tasktracker.map.tasks.maximum`和`mapred.tasktracker.reduce.tasks.maximum`等配置参数,来优化每个节点上运行的任务数量。 #### 五、案例分析 虽然给定内容中并未详细列出具体的案例...

    2-MapReduce案例.docx

    本篇将通过一个基础的WordCount案例,详细解析MaxCompute中的MapReduce编程过程。 首先,我们需要在IntelliJ IDEA中安装MaxCompute Studio插件,该插件提供了方便的开发环境。安装完成后,为项目添加相应的依赖,如...

    hadoop集群各种配置文件

    3. `mapred.map.child.java.opts`和`mapred.reduce.child.java.opts`分别设置了Map任务和Reduce任务子进程的Java堆大小,分别为512MB和1024MB。 最后,`hadoop-env.sh`是Hadoop环境变量的配置,它定义了运行Hadoop...

    Hive优化方法整理

    2. 调整 Hive 的 map 任务个数,设置 set mapred.map.tasks= 200; 3. 调整 Hive 的 group by 操作的键对应的记录条数,设置 set hive.groupby.mapaggr.checkinterval=100000; Hadoop HDFS 参数调优 1. 调整 HDFS ...

Global site tag (gtag.js) - Google Analytics