教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

MapReduce程序怎樣設(shè)置本地運(yùn)行模式?

更新時間:2020年12月01日18時03分 來源:傳智教育 瀏覽次數(shù):


好口碑IT培訓(xùn)

MapReduce程序的運(yùn)行模式主要有兩種:

  (1)本地運(yùn)行模式:在當(dāng)前的開發(fā)環(huán)境模擬MapReduce執(zhí)行環(huán)境,處理的數(shù)據(jù)及輸出結(jié)果在本地操作系統(tǒng)。

  (2)集群運(yùn)行模式:把MapReduce程序打成一個Jar包,提交至Yarn集群上去運(yùn)行任務(wù)。由于Yarn集群負(fù)責(zé)資源管理和任務(wù)調(diào)度,程序會被框架分發(fā)到集群中的節(jié)點上并發(fā)的執(zhí)行,因此處理的數(shù)據(jù)和輸出結(jié)果都在HDFS文件系統(tǒng)中。

  集群運(yùn)行模式只需要將MapReduce程序打成Jar包上傳至集群即可,比較簡單,這里不再贅述。下面我們以詞頻統(tǒng)計為例,講解如何將MapReduce程序設(shè)置為在本地運(yùn)行模式。

  在MapReduce程序中,除了要實現(xiàn)Mapper(代碼見WordCountMapper.java文件)和Reduce(代碼見WordCountReducer.java文件)外,我們還需要一個Driver類提交程序,具體代碼,如文件所示。

  文件 WordCountDriver.java

 1  import org.apache.hadoop.conf.Configuration;

 2  import org.apache.hadoop.fs.Path;

 3  import org.apache.hadoop.io.IntWritable;

 4  import org.apache.hadoop.io.Text;

 5  import org.apache.hadoop.mapreduce.Job;

 6  import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

 7  import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

 8  public class WordCountDriver {

 9    public static void main(String[] args) throws Exception {

 10     //通過Job來封裝本次MR的相關(guān)信息

 11     Configuration conf = new Configuration();

 12     // 配置MR運(yùn)行模式,使用local表示本地模式,可以省略

 13     **conf.set("mapreduce.framework.name", "local")**;

 14     Job wcjob = Job.getInstance(conf);

 15     // 指定MR Job jar包運(yùn)行主類

 16     wcjob.setJarByClass(WordCountDriver.class);

 17     //指定本次MR所有的Mapper Reducer類

 18     wcjob.setMapperClass(WordCountMapper.class);

 19     wcjob.setReducerClass(WordCountReducer.class);

 20     // 設(shè)置我們的業(yè)務(wù)邏輯 Mapper類的輸出 key和 value的數(shù)據(jù)類型

 21     wcjob.setMapOutputKeyClass(Text.class);

 22     wcjob.setMapOutputValueClass(IntWritable.class);

 23     // 設(shè)置我們的業(yè)務(wù)邏輯 Reducer類的輸出 key和 value的數(shù)據(jù)類型

 24     wcjob.setOutputKeyClass(Text.class);

 25     wcjob.setOutputValueClass(IntWritable.class);

 26      // 使用本地模式指定要處理的數(shù)據(jù)所在的位置

 27     **FileInputFormat.setInputPaths(wcjob,"D:/mr/input")**;

 28     // 使用本地模式指定處理完成之后的結(jié)果所保存的位置

 29     **FileOutputFormat.setOutputPath(wcjob,new Path("D:/mr/output"))**;

 30     // 提交程序并且監(jiān)控打印程序執(zhí)行情況

 31     boolean res = wcjob.waitForCompletion(true);

 32     System.exit(res ? 0 : 1);

 33   **}**

 34 **}

  在文件中,往Configuration對象中添加“mapreduce.framework.name=local”參數(shù),表示程序為本地運(yùn)行模式,實際上在hadoop-mapreduce-client-core-2.7.4.jar包下面的mapred-default.xml配置文件中,默認(rèn)指定使用本地運(yùn)行模式,因此mapreduce.framework.name=local配置也可以省略;同時,還需要指定本地操作系統(tǒng)源文件目錄路徑和結(jié)果輸出的路徑。當(dāng)程序執(zhí)行完畢后,就可以在本地系統(tǒng)的指定輸出文件目錄查看執(zhí)行結(jié)果了。輸出的結(jié)果,如圖1所示。

1606816656064_1.gif

圖1 詞頻案例的輸出結(jié)果

小提示:

在使用本地運(yùn)行模式執(zhí)行wordcount案例時,即使配置了windows平臺的hadoop,運(yùn)行時仍報如下錯誤:

1606816666935_2.jpg

  解決辦法:根據(jù)錯誤提示和網(wǎng)上資料的提示,需要修改org.apache.hadoop.io.nativeio包下的NativeIO類的access()方法,將返回值直接設(shè)為true,即:

public static boolean access(String path, AccessRight desiredAccess)

    throws IOException {

//  return access0(path, desiredAccess.accessRight());

   **return true;**



猜你喜歡:

hadoop虛擬機(jī)如何安裝和配置JDK?

HDFS讀寫流程介紹,HDFS讀數(shù)據(jù)和寫數(shù)據(jù)的原理是什么

傳智播客大數(shù)據(jù)培訓(xùn)課程 

0 分享到:
和我們在線交談!