簡體   English   中英

Hadoop,MapReduce - 多個輸入/輸出路徑

[英]Hadoop, MapReduce - Multiple Input/Output Paths

在為我的MapReduce作業制作Jar的輸入文件中,我使用的是Hadoop-local命令。 我想知道是否有一種方法,而不是專門為我在MapReduce作業中使用的輸入文件夾中的每個文件指定路徑,是否可以指定並傳遞輸入文件夾中的所有文件。 這是因為我試圖配置的MapReduce作業的性質,文件的內容和數量可能會改變,因為我不知道具體的文件數量,除了這些文件的內容,是否有辦法將所有文件從輸入文件夾傳遞到我的MapReduce程序,然后遍歷每個文件以計算某個函數,然后將結果發送到Reducer。 我只使用一個Map / Reduce程序,而且我用Java編寫代碼。 我可以使用hadoop-moonshot命令,但我現在正在使用hadoop-local。

謝謝。

您不必將單個文件作為MapReduce Job的輸入傳遞。

FileInputFormat類已經提供了API來接受多個文件的列表作為Map Reduce程序的輸入。

public static void setInputPaths(Job job,
                 Path... inputPaths)
                          throws IOException

將路徑添加到map-reduce作業的輸入列表中。 參數:

conf - 作業的配置

path - 要添加到map-reduce作業的輸入列表的路徑。

Apache 教程中的示例代碼

Job job = Job.getInstance(conf, "word count");
FileInputFormat.addInputPath(job, new Path(args[0]));

MultipleInputs提供以下API。

public static void addInputPath(Job job,
                Path path,
                Class<? extends InputFormat> inputFormatClass,
                Class<? extends Mapper> mapperClass)

將帶有自定義InputFormat和Mapper的路徑添加到map-reduce作業的輸入列表中。

相關SE問題:

hadoop可以從多個目錄和文件中獲取輸入

有關在多個輸出路徑上的第二個查詢,請參閱MultipleOutputs API。

FileOutputFormat.setOutputPath(job, outDir);

// Defines additional single text based output 'text' for the job
MultipleOutputs.addNamedOutput(job, "text", TextOutputFormat.class,
LongWritable.class, Text.class);

// Defines additional sequence-file based output 'sequence' for the job
MultipleOutputs.addNamedOutput(job, "seq",
SequenceFileOutputFormat.class,
LongWritable.class, Text.class);

查看有關多個輸出文件的相關SE問題。

寫入hadoop中的多個文件夾?

hadoop方法將輸出發送到多個目錄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM