MapReduce Map数 reduce数设置
JobConf.setNumMapTasks(n)是有意义的,结合block size会具体影响到map任务的个数,详见FileInputFormat.getSplits源码。假设没有设置mapred.min.split.size,缺省为1的情况下,针对每个文件会按照min (totalsize[所有文件总大小]/mapnum[jobconf设置的mapnum], blocksize)为大小来拆分,并不是说文件小于block size就不去拆分。
2.http://hadoop.hadoopor.com/thread-238-1-1.html
不知道你是要提高整个集群的map/reduce任务数,还是单个节点可并行运行的map/reduce任务数?对于前者是一般只设置reduce任务数,而map任务数是由Splits个数决定的; 对于后者,是可以在配置中设置的,分别为:mapred.tasktracker.map.tasks.maximum
mapred.tasktracker.reduce.tasks.maximum
另外,还有个参数mapred.jobtracker.taskScheduler.maxRunningTasksPerJob,用来控制一个job最大并行tasks数,这个是指在集群最大并行数。
3.我的理解:具体看FileInputFormat.java的代码
map tasks的个数只要是看splitSize,一个文件根据splitSize分成多少份就有多少个map tasks。而splitSize的计算(看FileInputFormat的源码):splitSize = Math.max(minSize, Math.min(maxSize, blockSize));而
minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));即是某种格式的文件的最小分割size(如看源码sequenceFile是2000)和整个job配置的最小分割size(即mapred-default.xml中mapred.min.split.size的值)之间的较大的那个
maxSize是mapred.max.split.size(mapred-default.xml中竟然没有,我试了一下,在mapred-site.xml中配置覆盖也没有用,具体用法参照http://osdir.com/ml/mahout-user.lucene.apache.org/2010-01/msg00231.html用参数配置: hadoop jar /root/mahout-core-0.2.job org.apache.mahout.clustering.lda.LDADriver -Dmapred.max.split.size=900...),如果不配置,默认值是long类型的最大值。(mapred.max.split.size不推荐配置(试))
blockSize是即hdfs-default.xml中dfs.block.size的值,可在hdf-site.xml中覆盖.这个值必须是512的倍数,如果想要数量更多的map的tasks的个数,可以把dfs.block.size设得小一点,512,1024等等,反正上面的公式保证了即使你这个blocksize设得比某种格式的文件的最小分割size要小,最后还是选者这种格式的最小分割size,如果blocksize比它大,则选用blocksize作为splitSize的大小.
总结:如果想要多一点的map tasks,(1)可以设置dfs.block.size小一点,sequenceFile推荐2048。。。(试)在eclipse运行时,dfs.block.size是由eclipse中mapreduce的设置(dfs.block.size)生效的,而不是hadoop的conf中的配置文件,但是如果用终端hadoop jar命令跑的话,应该是由hadoop的conf中的配置文件决定生效的
(2)推荐: 可以分成多个sequenceFile来作为输入(把上层目录作为输入路径即可,上层目录下包括的必为清一色的sequenceFile),输入路径 "./"或指定上层目录文件名
reduce task的个数:
可通过job.setNumReduceTasks(n);设定。多个reduce task的话就会有多个reduce结果,part-r-00000, part-r-00001, ...part-r-0000n
- 增加task的数量,一方面增加了系统的开销,另一方面增加了负载平衡和减小了任务失败的代价;
- map task的数量即mapred.map.tasks的参数值,用户不能直接设置这个参数。Input Split的大小,决定了一个Job拥有多少个map。默认input split的大小是64M(与dfs.block.size的默认值相同)。然而,如果输入的数据量巨大,那么默认的64M的block会有几万甚至几十万的Map Task,集群的网络传输会很大,最严重的是给Job Tracker的调度、队列、内存都会带来很大压力。mapred.min.split.size这个配置项决定了每个 Input Split的最小值,用户可以修改这个参数,从而改变map task的数量。
- 一个恰当的map并行度是大约每个节点10-100个map,且最好每个map的执行时间至少一分钟。
- reduce task的数量由mapred.reduce.tasks这个参数设定,默认值是1。
- 合适的reduce task数量是0.95或者0.75*( nodes * mapred.tasktracker.reduce.tasks.maximum), 其中,mapred.tasktracker.tasks.reduce.maximum的数量一般设置为各节点cpu core数量,即能同时计算的slot数量。对于0.95,当map结束时,所有的reduce能够立即启动;对于1.75,较快的节点结束第一轮reduce后,可以开始第二轮的reduce任务,从而提高负载均衡
由Hive来执行相关的查询
hadoop中默认的mapred.tasktracker.map.tasks.maximum设置是2
也即:每一个tasktracker同时运行的map任务数为2
照此默认设置,查询80天某用户的操作日志,耗时5mins, 45sec
经过测试,发现将mapred.tasktracker.map.tasks.maximum设置为节点的cpu cores数目或者数目减1比较合适
此时的运行效率最高,大概花费3mins, 25sec
我们现在的机器都是8核的,所以最终配置如下:
mapred.tasktracker.map.tasks.maximum
8
The maximum number of map tasks that will be run
simultaneously by a task tracker.
而对于mapred.map.tasks(每个job的map任务数)值,hadoop默认值也为2
可以在执行hive前,通过set mapred.map.tasks=24来设定
但由于使用hive,会操作多个input文件,所以hive默认会把map的任务数设置成输入的文件数目
即使你通过set设置了数目,也不起作用…
MapReduce Map数 reduce数设置的更多相关文章
- Hadoop 中关于 map,reduce 数量设置
map和reduce是hadoop的核心功能,hadoop正是通过多个map和reduce的并行运行来实现任务的分布式并行计算,从这个观点来看,如果将map和reduce的数量设置为1,那么用户的任务 ...
- Hadoop MapReduce概念学习系列之map并发任务数和reduce并发任务数的原理和代码实现(十八)
首先,来说的是,reduce并发任务数,默认是1. 即,在jps后,出现一个yarnchild.之后又消失. 这里,我控制reduce并发任务数6 有多少个reduce的并发任务数可以控制,但有多少个 ...
- Hadoop如何计算map数和reduce数
阅读本文可以带着下面问题: 1.map和reduce的数量过多会导致什么情况? 2.Reduce可以通过什么设置来增加任务个数? 3.一个task的map数量由谁来决定? 4.一个task的reduc ...
- 【转】hive优化之--控制hive任务中的map数和reduce数
一. 控制hive任务中的map数: 1. 通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置 ...
- hive优化之------控制hive任务中的map数和reduce数
一. 控制hive任务中的map数: 1. 通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的 ...
- hive优化之——控制hive任务中的map数和reduce数
一. 控制hive任务中的map数: 1. 通常情况下,作业会通过input的目录产生一个或者多个map任务.主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文 ...
- Hive性能优化--map数和reduce数
转自http://superlxw1234.iteye.com/blog/1582880 一. 控制hive任务中的map数: 1. 通常情况下,作业会通过input的目录产生一个或者多 ...
- Hive任务优化--控制hive任务中的map数和reduce数
一. 控制hive任务中的map数: 1. 通常情况下,作业会通过input的目录产生一个或者多个map任务.主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文 ...
- MapReduce剖析笔记之五:Map与Reduce任务分配过程
在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程.中间留了一个问题,就是任务到底是怎么分配的.任务的分配自然是由JobTracker做出来的,具体 ...
随机推荐
- RMQ(Range MinimumQuery)问题之ST算法
ST算法------是用来求解给定区间RMQ的最值,本文以最小值为例 ST算法分为两部分 离线预处理(nlogn):运用DP思想,用于求解区间最值,并保存到一个二维数组中. 在线查询 (O(1)):对 ...
- Java的内存管理机制之内存区域划分
各位,好久不见.先做个预告,由于最近主要在做Java服务端开发,最近一段时间会更新Java服务端开发相关的一些知识,包括但不限于一些读书笔记.框架的学习笔记.和最近一段时间的思考和沉淀.先从Java虚 ...
- C# Parallel.Invoke 实现
Parallel.Invoke应该是Parallel几个方法中最简单的一个了,我们来看看它的实现,为了方法大家理解,我尽量保留源码中的注释: public static class Parallel ...
- 我的Linux操作系统的发行版是什么?版本号是什么?
可以用下面的两个命令来查看: cat /etc/*-release hostnamectl 参考资料 ============== How To Find Out My Linux Distribut ...
- IntelliJ IDEA 下载安装(含注册码)
https://blog.csdn.net/mashuai720/article/details/79389314
- python使用mysql
python安装MySQLdb需要ssl,出错,原因如地址: https://stackoverflow.com/questions/46967488/getting-error-403-while- ...
- hive SQL COALESCE 函数
COALESCE是一个函数, (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值.如果所有的表达式都是空 ...
- 用.NET开发的磁力搜索引擎——btbook.net
UPDATE:目前项目已停止维护,本文仅留作纪念. 去年10月份开始研究相关的协议与资料,中途乱七八糟的事情差点没坚持下来,寒假里修修补补上礼拜把Btbook发布了,经过社交网络的推广之后,上线第三天 ...
- 企业和个人都需要的终极跨平台全端解决方案 UniApp
相信大家在平时开发过程中都会遇到这两类问题: 很多中小型企业要快速开发一个产品,这个产品至少需要覆盖平台范围为:ios.Android.web/H5.微信/支付宝小程序,那么需要的投入的人力成本.时间 ...
- 程序猿必备的10款web前端动画插件一
1.动画SVG框架幻灯片 在幻灯片之间切换时显示动画SVG帧的实验性幻灯片.不同的形状可以用来创建各种风格. 我们想和大家分享一个实验幻灯片.我们的想法是在从一个幻灯片转换到另一张幻灯片时,使SVG帧 ...