日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Hadoop]MapReduce多路径输入与多个输入

發布時間:2023/12/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Hadoop]MapReduce多路径输入与多个输入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 多路徑輸入

FileInputFormat是所有使用文件作為其數據源的 InputFormat 實現的基類,它的主要作用是指出作業的輸入文件位置。因為作業的輸入被設定為一組路徑, 這對指定作業輸入提供了很強的靈活性。FileInputFormat 提供了四種靜態方法來設定 Job 的輸入路徑:

  • public static void addInputPath(Job job,Path path);
  • public static void addInputPaths(Job job,String commaSeparatedPaths);
  • public static void setInputPaths(Job job,Path... inputPaths);
  • public static void setInputPaths(Job job,String commaSeparatedPaths);
  • 

    1.1?addInputPath

    使用FileInputFormat.addInputPath方法,只能指定一個路徑。如果想使用該方法實現多路徑輸入,需要多次調用來加載不同的路徑:

  • FileInputFormat.addInputPath(job, new Path("result/search/train/pv_log/2016-04-27/"));
  • FileInputFormat.addInputPath(job, new Path("result/search/train/pv_log/2016-04-28/"));
  • FileInputFormat.addInputPath(job, new Path("result/search/train/pv_log/2016-04-29/"));

  • 1.2 addInputPaths

    使用FileInputFormat.addInputPaths方法,可以指定多個路徑。如果想使用該方法實現多路徑輸入,只需調用一次即可,多個路徑字符串之間用逗號分隔開:

  • FileInputFormat.addInputPaths(job, "result/search/train/pv_log/2016-04-27/,result/search/train/pv_log/2016-04-28/,result/search/train/pv_log/2016-04-29/");

  • 1.3?setInputPaths

    setInputPaths()方法一次設定完整的路徑列表,替換前面調用中在 Job 上所設置的所有路徑(覆蓋):

  • FileInputFormat.setInputPaths(job, "result/search/train/pv_log/2016-04-27/,result/search/train/pv_log/2016-04-28/,result/search/train/pv_log/2016-04-29/");

  • 2. 多個輸入

    雖然一個MapReduce作業的輸入可能包含多個輸入文件,但所有的文件都由同一個InputFormat和同一個Mapper來處理,例如上面多路徑輸入。然而,數據格式往往會隨著時間而改變,或者,有些數據源會提供相同的數據,但是格式不同,因此我們必須用不同的mapper來處理不同的數據。

    這些問題可以用MultipleInputs類來解決,它允許為每條輸入路徑指定InputFormat 和 Mapper。MultipleInputs提供了兩種用于多個輸入的方法:

  • public static void addInputPath(Job job, Path path,Class<? extends InputFormat> inputFormatClass);
  • public static void addInputPath(Job job, Path path,Class<? extends InputFormat> inputFormatClass,Class<? extends Mapper> mapperClass);
  • 下面兩個方法的的區別在于針對不同輸入路徑文件,是否可以指定不同Mapper進行處理。

    前者不需要指定Mapper,所以所有文件都通過一個Mapper進行處理:

  • MultipleInputs.addInputPath(job, new Path("result/search/train/pv_log/2016-11-29/"), TextInputFormat.class); ?
  • MultipleInputs.addInputPath(job, new Path("result/search/train/pv_log/2016-11-29/"), TextInputFormat.class); ?
  • 后者可以針對不同輸入路徑指定不同的Mapper,故可以指定不同Mapper處理不同類型的文件:

  • MultipleInputs.addInputPath(job, new Path("result/search/train/pv_log/2016-11-29/"), TextInputFormat.class, ?TrainOrderMap.class); ?
  • MultipleInputs.addInputPath(job, new Path("result/search/flight/log/day=20161129"), TextInputFormat.class, ?FlightOrderMap.class); ?
  • 這段代碼取代了FileInputFormat.addInputPath() 和 job.setMapperClass() 的常規調用。由于火車票和機票訂單數據都是文本文件,所以對兩者使用TextInputFormat的數據類型。但這兩個數據源的行格式不同,所以我們使用兩個不一樣的Mapper。TrainOrderMapper 讀取火車票訂單的輸入數據并計算訂單信息,FlightOrderMapper?讀取飛機票訂單的輸入數據并計算訂單信息。重要的是兩個Mapper 輸出類型一樣,因此,reducer看到聚合后的map輸出,并不知道這些輸入是由不同的Mapper產生的。




    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的[Hadoop]MapReduce多路径输入与多个输入的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。