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);
}
在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);
}
相关文章推荐
- MapReduce中job参数及设置map和reduce的个数
- Hadoop MapReduce执行过程详解及MR中job参数及设置map和reduce的个数(带hadoop例子)
- [MapReduce] 如何向map和reduce脚本传递参数,加载文件和目录
- MapReduce设置Map和Reduce函数,但是map输出结果后,reduce没有输出,也没有报错
- MapReduce Map数 reduce数设置
- MapReduce中map方法write写入参数类型和reduce类型不同
- [MapReduce] 如何向map和reduce脚本传递参数,加载文件和目录
- Hadoop - Map/Reduce 通过理解org.apache.hadoop.mapreduce.Job类来学习hadoop的执行逻辑
- [MapReduce] 如何向map和reduce脚本传递参数,加载文件和目录
- MapReduce Map数 reduce数设置
- 大数据框架MapReduce的map与reduce任务数合理设置
- Mapreduce不设置reduce,只执行map的输出结果
- Mapreduce不设置reduce,只执行map的输出结果
- 自己设置mapreduce程序的map个数和reduce个数
- Python+Hadoop Streaming实现MapReduce(如何给map和reduce的脚本传递参数)
- mapreduce中map和reduce的最大并发数量设置
- Hadoop平台作业参数设置关于mapreduce.job.split.metainfo.maxsize的说明
- MapReduce Map数 reduce数设置
- Python+Hadoop Streaming实现MapReduce(如何给map和reduce的脚本传递参数)
- Python+Hadoop Streaming实现MapReduce(如何给map和reduce的脚本传递参数)