我必須將Mapper的輸出傳遞給我的Reducer。MapReduce Multiple Reduce任務
Reducer是數據之間的合併。因此,在映射器之後,Reducer會在第一次迭代中合併一些數據,更改鍵和重新合併以及第二次迭代,等等......
我嘗試使用job.setNumReduceTasks(4)
,但沒有任何反應。我只有1個輸出和一個簡單的System.out.println()
放置在我的Reducer顯示器上,只顯示1條消息。
Job job = new Job(getConf());
job.setJarByClass(Driver.class);
job.setJobName(this.getClass().getName());
FileInputFormat.setInputPaths(job, new Path(input));
FileOutputFormat.setOutputPath(job, new Path(output+System.nanoTime()));
job.setMapperClass(KMMapper.class);
job.setReducerClass(KMReducer.class);
job.setNumReduceTasks(4);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.waitForCompletion(true);
---------- ----------編輯
另外,請更新可能的I/P ADN O/P
你的問題
我必須實現一種新的數據聚類方式。
映射器是聚類算法,輸出是集羣中的點/鍵列表。
每個Reducer將集羣與相同的密鑰進行比較,如果它們是「相似的」,則reducer將其合併。減速器選擇新的鍵,輸出是新鍵/點列表。隨機選擇新密鑰和大量迭代,將比較所有初始羣集。
job.setNumReduceTasks定義您將擁有多少個縮減器,而不是您應用多少次減少 – seneque
以及如何將同一個縮減器應用4次或5次? –
目前尚不清楚你需要的是什麼,但是你有沒有試過4次運行相同的算法(例如,使用for循環)?您不能多次運行reduce階段,因爲reducer總是在映射器之後運行(MapReduce中沒有還原作業,即使可以存在僅包含地圖的作業)。 – vefthym