◢ <[wiki:III140705/Lab17 實作十六]> | <[wiki:III140705 回課程大綱]> ▲ | <[wiki:III140705/Lab19 實作十九]> ◣
= 實作十八 Lab18 =
{{{
#!html
增加 Reducer 個數
Job.setNumReduceTasks(N)
}}}
[[PageOutline]]
{{{
#!text
請先連線至 nodeN.3du.me , N 為您的報名編號
}}}
* 在前兩個範例中,我們可以觀察到預設的 reducer 個數是固定的。那我們是否可以修改 reducer 的個數呢?答案是可行的!
{{{
cd ~/hadoop_labs/lab010
ant
hadoop fs -rmr input output
hadoop fs -put ~/hadoop/conf input
hadoop jar WordCount.jar input output
hadoop fs -ls output
hadoop fs -cat output/part-*
}}}
* 關於 Job 的 setNumReduceTasks() 詳見 javadoc
* org.apache.hadoop.mapreduce.Job.setNumReduceTasks(int)
* http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/mapreduce/Job.html#setNumReduceTasks(int)
* 實際上 lab010 的程式碼與 lab009 的程式碼只差了以下幾行
{{{
#!diff
diff -Naur lab009/src/WordCount.java lab010/src/WordCount.java
--- lab009/src/WordCount.java 2015-03-08 09:33:01.207452767 +0800
+++ lab010/src/WordCount.java 2015-03-08 09:33:01.207452767 +0800
@@ -28,6 +28,7 @@
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
+ job.setNumReduceTasks(2);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}}}
== 實作習題 ==
<問題 1> 請問執行任務時,同時有幾個 Reducer?
{{{
#!text
(A) 0
(B) 1
(C) 2
(D) 3
}}}
<問題 2> 請問執行任務後,最後產生幾個輸出檔?
{{{
#!text
(A) 0
(B) 1
(C) 2
(D) 3
}}}
<問題 3> 若將 Reducer 個數設為 2,而 mapper 輸出的 key 是 {A,B,C,D}, 其中 A < B < C < D。請問,結果會是以下哪一個?
{{{
#!text
(A) {A, B}, {C, D}
(B) {A, B, C}, {D}
(C) {A, C}, {B, D}
(D) {A, D}, {B, C}
}}}