[英]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問題:
有關在多個輸出路徑上的第二個查詢,請參閱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問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.