更新時間:2022-07-27 來源:黑馬程序員 瀏覽量:
MapReduce程序的運行模式主要有如下兩種。
(1)本地運行模式:在當前的開發環境模擬MapReduce執行環境,處理的數據及輸出結果在本地操作系統。
(2)集群運行模式:把MapReduce程序打成一個jar包,提交至YARN集群上去運行任務。由于YARN集群負責資源管理和任務調度,程序會被框架分發到集群中的節點上并發地執行,因此處理的數據和輸出結果都在HDFS中。
集群運行模式只需要將MapReduce程序打成jar包上傳至集群即可,比較簡單,這里不再贅述。下面以詞頻統計為例,講解如何將MapReduce程序設置為在本地運行模式。
在MapReduce程序中,除了要實現Mapper(代碼見4.3.2節的WordCountMapper.java文件)和Reduce(代碼見4.3.3節的WordCountReducer.java文件)外,還需要一個Driver類提交程序和具體代碼,如文件4-6所示。
文件4-6 WordCountDriver.java
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class WordCountDriver { public static void main(String[] args) throws Exception { //通過Job來封裝本次MR的相關信息 Configuration conf=new Configuration (); //配置MR運行模式,使用local表示本地模式,可以省略 conf.set("mapreduce.framework.name", "local"); Job wcjob=Job.getInstance(conf); //指定MR Job jar包運行主類 wcjob.setJarByClass(WordCountDriver.class); //指定本次MR所有的Mapper Reducer類 wcjob.setMapperClass(WordCountMapper.class); wcjob.setReducerClass(WordCountReducer.class); //設置業務邏輯Mapper類的輸出key和value的數據類型 wcjob.setMapOutputKeyClass(Text.class); wcjob.setMapOutputValueClass(IntWritable.class); //設置業務邏輯Reducer類的輸出key和value的數據類型 wcjob.setOutputKeyClass(Text.class); wcjob.setOutputValueClass(IntWritable.class); //使用本地模式指定要處理的數據所在的位置 FileOutputFormat.setInputPaths(wcjob, "D:/mr/input"); //使用本地模式指定處理完成之后的結果所保存的位置 FileOutputFormat.setOutputPath(wcjob,new Path("D:/mr/output")); //提交程序并且監控打印程序執行情況 boolean res=wcjob.waitForCompletion(true); System.exit(res ?0:1); } }
在文件4-6中,往Configuration對象中添加“mapreduce.framework.name=local”參數,表示程序為本地運行模式,實際上在hadoop-mapreduce-client-core-2.7.4.jar包下面的mapred-default.xml配置文件中,默認指定使用本地運行模式,因此mapreduce.framework.name=local配置也可以省略;同時,還需要指定本地操作系統源文件目錄路徑和結果輸出的路徑。當程序執行完畢后,就可以在本地系統的指定輸出文件目錄查看執行結果了。