您的位置:首页 > 运维架构

MapReduce中job参数及设置map和reduce的个数

2017-09-29 11:46 465 查看
map的个数

在map阶段读取数据前,FileInputFormat会将输入文件分割成split。split的个数决定了

map的个数。

影响map个数,即split个数的因素主要有:

1)HDFS块的大小,即HDFS中dfs.block.size的值。如果有一个输入文件为1024m,当块为

256m时,会被划分为4个split;当块为128m时,会被划分为8个split。

2)文件的大小。当块为128m时,如果输入文件为128m,会被划分为1个split;当块为256m,

会被划分为2个split。

3)文件的个数。FileInputFormat按照文件分割split,并且只会分割大文件,即那些大小超过

HDFS块的大小的文件。如果HDFS中dfs.block.size设置为64m,而输入的目录中文件有100个,则

划分后的split个数至少为100个。

4)splitsize的大小。分片是按照splitszie的大小进行分割的,一个split的大小在没有设置的情况下,

默认等于hdfs block的大小。但应用程序可以通过两个参数来对splitsize进行调节。

map个数的计算公式如下:

1,splitsize=max(minimumsize,min(maximumsize,blocksize))。

如果没有设置minimumsize和maximumsize,splitsize的大小默认等于blocksize

2,计算公式

计算过程可以简化为如下的公式,详细算法可以参照FileInputSplit类中的getSplits方法

total_split ;

for(file :输入目录中的每个文件)

{

file_split = 1;

if(file.size>splitsize)

{

file_split=file_size/splitsize;

}

total_split+=file_split;

}14371142.07932

Reduce个数

[python] view
plain copy

public static void main(String[] args) throws Exception, IOException, InterruptedException {  

  Configuration conf = new Configuration();  

  Job job = Job.getInstance(conf);  

  FileSystem fs=FileSystem.get(conf);  

  job.setJarByClass(FlowBeanRunner.class);  

   

  job.setMapperClass(FlowBeanMapper.class);  

  job.setReducerClass(FlowBeanReduce.class);  

   

  job.setOutputKeyClass(FlowBean.class);  

  job.setOutputValueClass(Text.class);  

   

  //指定自定义的partitioner类,替换掉框架默认的HashPartitioner  

  job.setPartitionerClass(ProvincePartitioner.class);  

  //指定reduce task数量,跟ProvincePartitioner的分区数匹配  

  job.setNumReduceTasks(6);     //Reduce的个数在这里设定    

   

  //要处理的数据所在的path  

  //指定文件夹即可,该文件夹下的所有文件都会被处理  

  FileInputFormat.setInputPaths(job, new Path("/phone/logs"));  

   

  Path destPath= new Path("/phone/cleanlogs");  

  if(fs.exists(destPath)){  

   fs.delete(destPath, true);  

  }  

   

  //处理完得到的结果输出的path  

  FileOutputFormat.setOutputPath(job, destPath);//提交本次作业  

  job.waitForCompletion(true);  

 }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop