[Hadoop]MapReduce多路径输入与多个输入
1. 多路徑輸入
FileInputFormat是所有使用文件作為其數(shù)據(jù)源的 InputFormat 實(shí)現(xiàn)的基類,它的主要作用是指出作業(yè)的輸入文件位置。因?yàn)樽鳂I(yè)的輸入被設(shè)定為一組路徑, 這對(duì)指定作業(yè)輸入提供了很強(qiáng)的靈活性。FileInputFormat 提供了四種靜態(tài)方法來設(shè)定 Job 的輸入路徑:
1.1?addInputPath
使用FileInputFormat.addInputPath方法,只能指定一個(gè)路徑。如果想使用該方法實(shí)現(xiàn)多路徑輸入,需要多次調(diào)用來加載不同的路徑:
1.2 addInputPaths
使用FileInputFormat.addInputPaths方法,可以指定多個(gè)路徑。如果想使用該方法實(shí)現(xiàn)多路徑輸入,只需調(diào)用一次即可,多個(gè)路徑字符串之間用逗號(hào)分隔開:
1.3?setInputPaths
setInputPaths()方法一次設(shè)定完整的路徑列表,替換前面調(diào)用中在 Job 上所設(shè)置的所有路徑(覆蓋):
2. 多個(gè)輸入
雖然一個(gè)MapReduce作業(yè)的輸入可能包含多個(gè)輸入文件,但所有的文件都由同一個(gè)InputFormat和同一個(gè)Mapper來處理,例如上面多路徑輸入。然而,數(shù)據(jù)格式往往會(huì)隨著時(shí)間而改變,或者,有些數(shù)據(jù)源會(huì)提供相同的數(shù)據(jù),但是格式不同,因此我們必須用不同的mapper來處理不同的數(shù)據(jù)。
這些問題可以用MultipleInputs類來解決,它允許為每條輸入路徑指定InputFormat 和 Mapper。MultipleInputs提供了兩種用于多個(gè)輸入的方法:
下面兩個(gè)方法的的區(qū)別在于針對(duì)不同輸入路徑文件,是否可以指定不同Mapper進(jìn)行處理。
前者不需要指定Mapper,所以所有文件都通過一個(gè)Mapper進(jìn)行處理:
后者可以針對(duì)不同輸入路徑指定不同的Mapper,故可以指定不同Mapper處理不同類型的文件:
這段代碼取代了FileInputFormat.addInputPath() 和 job.setMapperClass() 的常規(guī)調(diào)用。由于火車票和機(jī)票訂單數(shù)據(jù)都是文本文件,所以對(duì)兩者使用TextInputFormat的數(shù)據(jù)類型。但這兩個(gè)數(shù)據(jù)源的行格式不同,所以我們使用兩個(gè)不一樣的Mapper。TrainOrderMapper 讀取火車票訂單的輸入數(shù)據(jù)并計(jì)算訂單信息,FlightOrderMapper?讀取飛機(jī)票訂單的輸入數(shù)據(jù)并計(jì)算訂單信息。重要的是兩個(gè)Mapper 輸出類型一樣,因此,reducer看到聚合后的map輸出,并不知道這些輸入是由不同的Mapper產(chǎn)生的。
總結(jié)
以上是生活随笔為你收集整理的[Hadoop]MapReduce多路径输入与多个输入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flutter图片预览_Flutter
- 下一篇: julia有 pytorch包吗_用 P