2014-10-06 19 views
9

Ich versuche, ein MapReduce-Programm zu schreiben, das eine Eingabedatei lesen und die Ausgabe in eine andere Textdatei schreiben kann. Ich plane, die BufferedReader-Klasse dafür zu verwenden. Aber ich weiß nicht wirklich, wie man es in einem MapReduce-Programm benutzt.Hadoop Map Reduzieren lesen Sie eine Textdatei

Kann mir jemand ein Code-Snippet davon geben?

P.S. Ich bin völlig neu in Hadoop und MapReduce Programmierung. Also bitte bitte mit mir.

Vielen Dank im Voraus.

+0

Bis jetzt, was Sie versucht haben? Und was Sie versuchen, zu implementieren. Bitte erläutern. Möchten Sie eine Eingabedatei vom Benutzer lesen und die Ausgabe in HDFS schreiben? Kannst du etwas mehr erklären? –

+0

@SreeVeni Ok, hier ist es. Ich möchte eine Textdatei mit BufferedReader lesen. Und ich möchte die Ausgabe entweder auf HDFS (vorzugsweise) schreiben oder die Ausgabe in eine andere Textdatei schreiben. Ich habe noch nichts wirklich versucht. Aber das möchte ich im Grunde tun. Ich habe über das Internet nach Beispiel-Codeausschnitten gesucht, konnte aber nicht herausfinden, was meine Frage beantwortet. Kannst du mir hier helfen? – user2201650

+0

Noch eine Klarstellung Wollen Sie Textdatei von HDFS lesen? –

Antwort

7

Im Folgenden Code hilft Ihnen, eine Datei von HDFS zu lesen und den Inhalt in der Konsole angezeigt werden

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 

public class Cat{ 
    public static void main (String [] args) throws Exception{ 
     try{ 
      Path pt=new Path("hdfs:/path/to/file");//Location of file in HDFS 
      FileSystem fs = FileSystem.get(new Configuration()); 
      BufferedReader br=new BufferedReader(new InputStreamReader(fs.open(pt))); 
      String line; 
      line=br.readLine(); 
      while (line != null){ 
       System.out.println(line); 
       line=br.readLine(); 
      } 
     }catch(Exception e){ 
     } 
    } 
} 

EDIT

Treiber

public class ReadFile { 

    public static void main(String[] args) throws Exception { 
     Configuration conf = new Configuration(); 
     Job job = new Job(conf, "Read a File"); 


     FileSystem fs = FileSystem.get(conf); 
     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(IntWritable.class); 
     if (fs.exists(new Path(args[1]))) 
      fs.delete(new Path(args[1]), true); 
     job.setMapperClass(Map.class); 
     job.setReducerClass(Reduce.class); 

     job.setInputFormatClass(TextInputFormat.class); 
     job.setOutputFormatClass(TextOutputFormat.class); 

     FileInputFormat.addInputPath(job, new Path(args[0])); 
     FileOutputFormat.setOutputPath(job, new Path(args[1])); 
     job.setJarByClass(ReadFile.class);  
     job.waitForCompletion(true); 
    } 

} 

Mapper

public class Map extends Mapper<LongWritable, Text, Text, IntWritable> { 

    public void setup(Context context) throws IOException{ 
     Path pt=new Path("hdfs:/path/to/file");//Location of file in HDFS 
     FileSystem fs = FileSystem.get(new Configuration()); 
     BufferedReader br=new BufferedReader(new InputStreamReader(fs.open(pt))); 
     String line; 
     line=br.readLine(); 
     while (line != null){ 
      System.out.println(line); 
      line=br.readLine(); 
     } 
    } 
    public void map(LongWritable key, Text value, Context context) 
      throws IOException, InterruptedException { 
     //as your wish 
     } 
    } 
} 

Der obige Code hilft Ihnen, eine Textdatei aus HDFS zu lesen.

+0

Vielen Dank für das Code-Snippet. Aber ich habe es versucht. Ich möchte eine Textdatei in einem Map-Reduction-Style-Programm lesen. d.h. unter Verwendung von Mapper- und Reducer-Klassen. – user2201650

+0

Wissen Sie, wer eine Textdatei in einem Map-Reduction-Style-Programm lesen soll? Denn das muss ich tun. Es wäre eine große Hilfe, wenn Sie mir sagen könnten, wie das geht. Vielen Dank im Voraus! – user2201650

+0

@ user2201650: Siehe meine Edit –

Verwandte Themen