2016-05-14 22 views
5

In meiner Eingabedatei verwende ich den Hadoop-local-Befehl, wenn ich den Jar für meinen MapReduce-Job erzeuge. Ich wollte wissen, ob es einen Weg gab, den Pfad für jede Datei in meinem Eingabeordner, der im MapReduce-Job verwendet werden soll, spezifisch anzugeben, und ob ich einfach alle Dateien aus meinem Eingabeordner angeben und übergeben könnte. Dies liegt daran, dass sich der Inhalt und die Anzahl der Dateien aufgrund der Art des MapReduce-Jobs ändern können, den ich zu konfigurieren versuche, und da ich die genaue Anzahl der Dateien nicht kenne, gibt es neben dem Inhalt dieser Dateien auch einen Weg dazu Übergeben Sie alle Dateien aus dem Eingabeordner in mein MapReduce-Programm und durchlaufen Sie dann jede Datei, um eine bestimmte Funktion zu berechnen, die dann die Ergebnisse an den Reducer sendet. Ich verwende nur ein Map/Reduce-Programm und bin in Java programmiert. Ich kann den hadoop-moonshot-Befehl verwenden, arbeite aber momentan mit hadoop-local.Hadoop, MapReduce - Mehrere Eingabe-/Ausgabepfade

Danke.

+0

Falls Sie ein HDFS-Verzeichnis in Ihrem Job statt eine Datei angeben, dann werden alle Dateien gelesen werden sollen. Können Sie Ihre Frage bitte bearbeiten, um den Befehl, den Sie ausführen, einzuschließen? Vielleicht ein Code in einem [mcve], auch? –

+0

Danke @ cricket_007 könntest du vielleicht bitte ein Beispiel für einen Aufruf des HDFS-Verzeichnisses statt einer einzigen Datei angeben. Außerdem würde ich für jede Eingabe eine separate Ausgabedatei haben. Ich schätze, es ist irgendwie mit der MultipleOutput-Klasse, aber ich kann nicht sehen, wie im Moment. –

+0

Ich kann mich nicht erinnern, wie man mehrere Dateien ausgibt, aber die mapreduce-Ausgabe selbst muss in einem Verzeichnis sein. Wie bei der Verzeichniseingabe liest das [Wordcount-Beispiel] (https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#Usage) zwei Dateien von einer Verzeichnis –

Antwort

1

Sie müssen keine individuelle Datei als Eingabe für MapReduce Job übergeben.

FileInputFormat Klasse verfügt bereits über eine API zum Akzeptieren einer Liste mit mehreren Dateien als Eingabe zum Map Reduce-Programm.

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

einen Pfad in die Liste der Eingänge für die Karten reduzieren Job hinzufügen. Parameter:

conf - Die Konfiguration des Job

Pfad - Pfad zu der Liste der Eingänge für die Karten reduzieren Job hinzugefügt werden.

Beispiel Code von Apache tutorial

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

MultipleInputs bietet unten APIs.

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

einen Pfad mit einem benutzerdefinierten Inputformat und Mapper in die Liste der Eingänge für die Karten reduzieren Job hinzufügen.

Verwandte SE Frage:

Can hadoop take input from multiple directories and files

zu MultipleOutputs API Siehe in Bezug auf Ihre zweite Abfrage auf mehreren Ausgabepfade.

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); 

Sehen Sie sich verwandte SE-Fragen zu mehreren Ausgabedateien an.

Writing to multiple folders in hadoop?

hadoop method to send output to multiple directories

+0

Dieser Beispielcode, den Sie gezogen haben, verwendet nur einen Eingabepfad –

+0

Außer in Titel der Frage, die beide Eingabe/Ausgabe sagt, sucht OP nach mehreren Dateien als Eingabe in den Text der Frage. Keine Erwähnung von Ausgabe. Später habe ich die setOutputPath API hinzugefügt. –

+0

Der Titel und die Frage stimmen jedoch nicht wirklich überein. Alles, was gefragt wurde, war ein Verzeichnis von Dateien zu lesen. Was, ja, dieser Code kann. Ich habe nur gesagt, dass Sie die mehreren Pfade erwähnen, aber der Beispielcode verwendet diese Methode nicht –

Verwandte Themen