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:圖示:

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM