Map、Reduce和Job方法总结

map方法:

map的方法

public void map(Object key, Text value, Context context) throws IOException, InterruptedException {…}

key:偏移量,一般为0,用不到
value:每行的值
context:可以记录输入的key和value

例如:context.write(new Text("hadoop"), new IntWritable(1));
此外context还会记录map运算的状态。
 
 
 
10
 
 
 
 
 
1
map的方法
2
 
          
3
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {}
4
 
          
5
key:偏移量,一般为0,用不到
6
value:每行的值
7
context:可以记录输入的key和value
8
 
          
9
例如:context.write(new Text("hadoop"), new IntWritable(1));
10
此外context还会记录map运算的状态。
 
 

rediuce方法:

reduce的方法

public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {…}

reduce函数的输入也是一个key/value的形式,
不过它的value是一个迭代器的形式Iterable<IntWritable> values,

也就是说reduce的输入是一个key对应一组的值的value,reduce也有context和map的context作用一致。
 
 
 
 
 
 
 
 
 
1
reduce的方法
2
 
          
3
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {}
4
 
          
5
reduce函数的输入也是一个key/value的形式,
6
不过它的value是一个迭代器的形式Iterable<IntWritable> values,
7
 
          
8
也就是说reduce的输入是一个key对应一组的值的value,reduce也有context和map的context作用一致。
 
 

job:

    Job job = new Job(conf, "word count");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

第一行就是在构建一个job,在mapreduce框架里一个mapreduce任务也叫mapreduce作业也叫做一个mapreduce的job,而具体的map和reduce运算就是task了,这里我们构建一个job,构建时候有两个参数,一个是conf这个就不赘述了,一个是这个job的名称。
  
第二行就是装载程序员编写好的计算程序,例如我们的程序类名就是WordCount了。这里我要做下纠正,虽然我们编写mapreduce程序只需要实现map函数和reduce函数,但是实际开发我们要实现三个类,第三个类是为了配置mapreduce如何运行map和reduce函数,准确的说就是构建一个mapreduce能执行的job了,例如WordCount类。
  
第三行和第五行就是装载map函数和reduce函数实现类了,第四行是装载Combiner类。

第六行和第七行是定义输出的key/value的类型,也就是最终存储在hdfs上结果文件的key/value的类型。
 
 
 
x
 
 
 
 
 
1
    Job job = new Job(conf, "word count");
2
    job.setJarByClass(WordCount.class);
3
    job.setMapperClass(TokenizerMapper.class);
4
    job.setCombinerClass(IntSumReducer.class);
5
    job.setReducerClass(IntSumReducer.class);
6
    job.setOutputKeyClass(Text.class);
7
    job.setOutputValueClass(IntWritable.class);
8
 
          
9
第一行就是在构建一个job,在mapreduce框架里一个mapreduce任务也叫mapreduce作业也叫做一个mapreduce的job,而具体的map和reduce运算就是task了,这里我们构建一个job,构建时候有两个参数,一个是conf这个就不赘述了,一个是这个job的名称。
10
  
11
第二行就是装载程序员编写好的计算程序,例如我们的程序类名就是WordCount了。这里我要做下纠正,虽然我们编写mapreduce程序只需要实现map函数和reduce函数,但是实际开发我们要实现三个类,第三个类是为了配置mapreduce如何运行map和reduce函数,准确的说就是构建一个mapreduce能执行的job了,例如WordCount类。
12
  
13
第三行和第五行就是装载map函数和reduce函数实现类了,第四行是装载Combiner类。
14
 
          
15
第六行和第七行是定义输出的key/value的类型,也就是最终存储在hdfs上结果文件的key/value的类型。
 
 
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);

第一行就是构建输入的数据文件
第二行是构建输出的数据文件
最后一行如果job运行成功了,我们的程序就会正常退出。
FileInputFormat和FileOutputFormat可以设置输入输出文件路径,mapreduce计算时候,输入文件必须存在,要不直Mr任务直接退出。输出一般是一个文件夹,而且该文件夹不能存在。
 
 
 
 
 
 
 
 
 
1
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
2
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
3
    System.exit(job.waitForCompletion(true) ? 0 : 1);
4
 
          
5
第一行就是构建输入的数据文件
6
第二行是构建输出的数据文件
7
最后一行如果job运行成功了,我们的程序就会正常退出。
8
FileInputFormat和FileOutputFormat可以设置输入输出文件路径,mapreduce计算时候,输入文件必须存在,要不直Mr任务直接退出。输出一般是一个文件夹,而且该文件夹不能存在。
 
 

map端job:图示:

 

reduce端job:图示:

 

 



转载于:https://www.cnblogs.com/TiePiHeTao/p/ce09ac7ba4b96d7f637625da568e5bd9.html

### 设置Hadoop MapReduce任务数量的方法 在Hadoop中,合理设置MapReduce任务的数量对于优化作业性能至关重要。当这些数值过低时,无法充分利用集群资源;过高则可能导致系统资源过度消耗,进而影响整体性能。 #### 控制Map任务数量 通常情况下,Map任务的数量由输入文件的切片数决定[^3]。然而,在某些特定需求下,用户可通过命令行参数`-D mapreduce.job.maps=<number>`来尝试指定具体的Map任务数目[^4]。需要注意的是,此方法并不总是生效,因为最终的实际Map任务数仍可能依据输入数据量自动调整。 ```bash hadoop jar hadoop-streaming.jar \ -D mapreduce.job.maps=10 \ -input /path/to/input \ -output /path/to/output \ -mapper "python mapper.py" ``` 上述脚本展示了如何利用Hadoop Streaming工具并通过命令行选项设定Map任务的具体数量。 #### 调整Reduce任务数量 相比之下,Reduce任务的数量更容易被直接控制。可以在提交Job的时候通过配置项`mapreduce.job.reduces`来显式定义期望的Reducer个数[^1]: ```bash hadoop jar hadoop-streaming.jar \ -D mapreduce.job.reduces=5 \ -input /path/to/input \ -output /path/to/output \ -reducer "python reducer.py" ``` 这里给出了一个简单的例子说明怎样为Python编写的Mapper/Reducer程序指派一定数量的Reduces[^2]。 为了达到最佳效果,建议基于具体应用场景测试不同的组合方案,并监控其对系统的影响以及完成时间的变化情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值