Job流程:决定map个数的因素】的更多相关文章

此文紧接Job流程:提交MR-Job过程.上一篇分析可以看出,MR-Job提交过程的核心代码在于 JobSubmitter 类的 submitJobInternal()方法.本文就由此方法的这一句代码开始分析: //计算并确定 map 的个数,以及各个输入切片 Splits 的相关信息 int maps = writeSplits(job, submitJobDir); 1.查看writeSplits()方法的实现过程: private int writeSplits(org.apache.ha…
原文链接:https://blog.csdn.net/lylcore/article/details/9136555     hadooop提供了一个设置map个数的参数mapred.map.tasks,我们可以通过这个参数来控制map的个数.但是通过这种方式设置map的个数,并不是每次都有效的.原因是mapred.map.tasks只是一个hadoop的参考数值,最终map的个数,还取决于其他的因素.      为了方便介绍,先来看几个名词: block_size : hdfs的文件块大小,默…
hadooop提供了一个设置map个数的参数mapred.map.tasks,我们可以通过这个参数来控制map的个数.但是通过这种方式设置map的个数,并不是每次都有效的.原因是mapred.map.tasks只是一个hadoop的参考数值,最终map的个数,还取决于其他的因素. 为了方便介绍,先来看几个名词:block_size : hdfs的文件块大小,1.x默认为64M,2.x为128M,可以通过参数dfs.block.size设置total_size : 输入文件整体的大小input_f…
控制map个数的核心源码 long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job)); //getFormatMinSplitSize 默认返回1,getMinSplitSize 为用户设置的最小分片数, 如果用户设置的大于1,则为用户设置的最小分片数 long maxSize = getMaxSplitSize(job); //getMaxSplitSize为用户设置的最大分片数,默认最大为long 922337…
在map阶段读取数据前,FileInputFormat会将输入文件分割成split.split的个数决定了map的个数.影响map个数(split个数)的主要因素有: 1) 文件的大小.当块(dfs.block.size)为128m时,如果输入文件为128m,会被划分为1个split:当块为256m,会被划分为2个split. 2) 文件的个数.FileInputFormat按照文件分割split,并且只会分割大文件,即那些大小超过HDFS块的大小的文件.如果HDFS中dfs.block.siz…
在对日志等大表数据进行处理的时候需要人为地设置任务的map数,防止因map数过小导致集群资源被耗光.可根据大表的数据量大小设置每个split的大小. 例如设置每个split为500M: set mapreduce.input.fileinputformat.split.maxsize=500000000;  //控制map任务输入划分的最大字节数 set mapreduce.input.fileinputformat.split.minsize=500000000;  //控制map任务输入划分…
本文转自http://ronxin999.blog.163.com/blog/static/42217920201279112163/…
此文紧接Job流程:决定map个数的因素,Map任务被提交到Yarn后,被ApplicationMaster启动,任务的形式是YarnChild进程,在其中会执行MapTask的run()方法.无论是MapTask还是ReduceTask都是继承的Task这个抽象类. 1). Mapper类中 setup() 和 cleanup() 两个方法负责 map 任务的 初始化 和 清理工作(默认是空实现) 2). Mapper类中 run() 方法负责调用用户自定义的 map()方法.最主要的代码在于…
1.一个标准 MR-Job 的执行入口: //参数 true 表示检查并打印 Job 和 Task 的运行状况 System.exit(job.waitForCompletion(true) ? 0 : 1); 2.job.waitForCompletion(true)方法的内部实现: //job.waitForCompletion()方法的内部实现 public boolean waitForCompletion(boolean verbose ) throws IOException, In…
hadooop提供了一个设置map个数的参数mapred.map.tasks,我们可以通过这个参数来控制map的个数.但是通过这种方式设置map的个数,并不是每次都有效的.原因是mapred.map.tasks只是一个hadoop的参考数值,最终map的个数,还取决于其他的因素.      为了方便介绍,先来看几个名词: block_size : hdfs的文件块大小,默认为64M,可以通过参数dfs.block.size设置 total_size : 输入文件整体的大小 input_file_…