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.size与hive.merge.size.per.task的搭配使得合并后的绝大部分文件都在300MB左右。
CASE 1:
现在我们假设有3个300MB大小的文件,那么goalsize = min(900MB/2,256MB) = 256MB (具体如何计算map数请参见http://blog.sina.com.cn/s/blog_6ff05a2c010178qd.html)
所以整个JOB会有6个map,其中3个map分别处理256MB的数据,还有3个map分别处理44MB的数据。
这时候木桶效应就来了,整个JOB的map阶段的执行时间不是看最短的1个map的执行时间,而是看最长的1个map的执行时间。所以,虽然有3个map分别只处理44MB的数据,可以很快跑完,但它们还是要等待另外3个处理256MB的map。显然,处理256MB的3个map拖了整个JOB的后腿。
CASE 2:
如果我们把mapred.map.tasks设置成6,再来看一下有什么变化:
goalsize = min(900MB/6,256MB) = 150MB
整个JOB同样会分配6个map来处理,每个map处理150MB的数据,非常均匀,谁都不会拖后腿,最合理地分配了资源,执行时间大约为CASE 1的59%(150/256)
案例分析:
虽然mapred.map.tasks从2调整到了6,但是CASE 2并没有比CASE 1多用map资源,同样都是使用6个map。而CASE 2的执行时间约为CASE 1执行时间的59%。
从这个案例可以看出,对mapred.map.tasks进行自动化的优化设置其实是可以很明显地提高作业执行效率的。
相关推荐
Hadoop是一个开源的、能够存储和处理大规模数据集的软件框架。Hadoop 2.9.0版本中的mapred-default.xml文件包含了MapReduce作业的配置属性,这些属性定义了MapReduce作业执行过程中的各种行为和参数。下面我们来详细...
总的来说,"mapred.zip"是一个全面了解和学习Hadoop MapReduce的重要资源。无论是初学者还是经验丰富的开发者,都可以从中获取到有价值的信息,提升在大数据处理领域的技能。通过深入研究文档、源码和测试样例,我们...
通过设置mapred.reduce.tasks参数,可以控制拆分后的文件数量,从而确定Map任务的数量。 在实际操作中,应该根据具体的业务需求和数据特点来决定Map数量的控制策略。关键是要遵循两个原则:一是保证大数据量能够...
在MapReduce任务中读取Avro文件,会使用到avro-mapred.jar。 然而目前的avro-mapred.jar是基于较老的版本的,使用时会报错: org.apache.hadoop.mapred.YarnChild: Error running child : java.lang....
- Reduce个数设置:`set mapred.reduce.tasks = 10;` 直接设置Reduce任务的数量;`set hive.exec.reducers.bytes.per.reducer=` 控制每个Reduce处理的数据量上限;`set hive.exec.max.created.files = 10000;` 限制...
默认情况下,`mapred.min.split.size`为1B,`mapred.max.split.size`为256MB,这意味着一个Map任务处理的数据量上限为256MB。如果发现Map任务执行时间过长,可以通过减小`mapred.max.split.size`增加Map任务的数量,...
* 设置Reduce个数:set mapred.reduce.tasks=800; * 设置Reduce处理的数据量:set hive.exec.reducers.bytes.per.reducer = 100000000; 4. 小表与大表关联 小表与大表关联也容易导致数据倾斜问题。解决方法是: *...
\[ \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" 暗示我们讨论的主题与Hadoop MapReduce有关,这是一个分布式计算框架,广泛用于处理和分析大数据集。该主题通常涉及并行计算、数据分片、任务调度以及与GitHub的关联,后者是一个代码托管...
Hadoop源码 包含mapred
但是需要注意的是,直接修改**Mapred.map.tasks**是无效的。 **优化建议**: - 如果作业执行速度较慢,可以考虑增加Map任务的数量,以提高并行度。 - 如果作业执行速度较快,增加Map任务数量可能不会带来明显加速...
2. `mapred.min.split.size.per.node`: 指定一个节点上split的最小大小,应设为128MB。 3. `mapred.min.split.size.per.rack`: 设置一个交换机下的split最小大小,同样为128MB。 4. `hive.input.format`: 使用`...
2. **mapred.map.tasks.speculative.execution** 和 **mapred.reduce.tasks.speculative.execution**:这两个参数控制是否启用推测执行。当某些任务由于硬件或负载问题执行较慢时,推测执行会启动新的任务副本,加快...
- **mapred.map.tasks**和**mapred.reduce.tasks**:这两个参数分别用于设置Mapper和Reducer的数量。适当调整可以平衡集群资源的使用,提高作业并行度。 5. **Split大小** - **mapred.max.split.size**和**mapred...
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 ...
- 通过设置`mapred.reduce.tasks`参数来手动增加Map任务的数量。 - 使用`distribute by`子句创建一个分布表,将原始数据按随机原则重新分布到多个文件中,从而增加Map任务数量。 #### 四、深入理解大小表Join优化...
- 可以通过调整`mapred.tasktracker.map.tasks.maximum`和`mapred.tasktracker.reduce.tasks.maximum`等配置参数,来优化每个节点上运行的任务数量。 #### 五、案例分析 虽然给定内容中并未详细列出具体的案例...
本篇将通过一个基础的WordCount案例,详细解析MaxCompute中的MapReduce编程过程。 首先,我们需要在IntelliJ IDEA中安装MaxCompute Studio插件,该插件提供了方便的开发环境。安装完成后,为项目添加相应的依赖,如...
3. `mapred.map.child.java.opts`和`mapred.reduce.child.java.opts`分别设置了Map任务和Reduce任务子进程的Java堆大小,分别为512MB和1024MB。 最后,`hadoop-env.sh`是Hadoop环境变量的配置,它定义了运行Hadoop...
2. 调整 Hive 的 map 任务个数,设置 set mapred.map.tasks= 200; 3. 调整 Hive 的 group by 操作的键对应的记录条数,设置 set hive.groupby.mapaggr.checkinterval=100000; Hadoop HDFS 参数调优 1. 调整 HDFS ...