您不必通過單個文件作爲MapReduce
作業的輸入。
FileInputFormat類已經提供了API來接受多個文件的列表作爲Input to Map Reduce程序。
public static void setInputPaths(Job job,
Path... inputPaths)
throws IOException
添加路徑爲地圖,減少工作的投入列表。 參數:
的conf - 工作
路徑的配置 - 路徑被添加到了地圖,減少工作的投入列表。從Apache的tutorial
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和映射到的地圖,減少工作的投入列表。
相關SE問題:
Can hadoop take input from multiple directories and files
參考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問題。
Writing to multiple folders in hadoop?
hadoop method to send output to multiple directories
如果你指定你的工作的HDFS目錄,而不是一個文件,然後將所有文件應該被讀取。你可以請[編輯]你的問題,包括你正在運行的命令?也許在[mcve]中有一些代碼呢? –
謝謝@ cricket_007你可能會提供一個調用HDFS目錄而不是單個文件的例子。另外,我怎麼會有每個輸入單獨的輸出文件。我猜是通過使用MultipleOutput類不知何故,但我現在看不到。 –
我不記得如何輸出多個文件,但mapreduce輸出本身必須是一個目錄。至於目錄輸入,[wordcount示例](https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#Usage)從一個目錄 –