Ich versuche, ein Programm zu schreiben, das einen großen Datensatz nimmt und dann einige Abfragen auf es mit mapreduce
ausführen. Ich habe einen Code wie folgt:Hadoop Schreiben in eine neue Datei von Mapper
public static class MRMapper
extends Mapper<LongWritable, Text, Text, IntWritable>{
String output2="hdfs://master:9000/user/xxxx/indexln.txt";
FileSystem Phdfs =FileSystem.get(new Configuration());
Path fname1=new Path(output2);
BufferedWriter out=new BufferedWriter(new OutputStreamWriter(Phdfs.create(fname1,true)));
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
long max=0;
public void map(LongWritable key, Text value, Context context
) throws IOException, InterruptedException {
String binln = Long.toBinaryString(0x8000000000000000L | key).substring(1);
out2.write(binln+"\n");
out2.flush();
String line = value.toString();
String [] ST = line.split(",");
long val=Math.abs(Long.parseLong(ST[2]));
if (max < val){
max= val;
}
else{
word.set(line);
context.write(word, val);
}
}
}
Was ich versuche ist eine indexfile
in den Mapper zu bauen. mit dem die Mapper auf bestimmte Bereiche der Eingabedatei zugreifen würden. Die Mapper lesen einen Teil der Eingabedatei basierend auf dem Index und drucken dann den gelesenen Teil und die Anzahl der gelesenen Zeilen zum Ausgang. Ich benutze einen Mapper mit 9 Reduzierungen.
Meine Frage geht, ist es möglich, eine Datei unterscheidet sich von der Ausgabedatei in der Map-Funktion zum Erstellen/schreiben und auch kann, ein Reduktions lesen eine Datei, die in der Mapper geöffnet ist? Wenn ja, bin ich auf dem richtigen Weg oder total falsch oder vielleicht
mapreduce
ist nicht der Weg dafür? Ich entschuldige mich, wenn diese Frage zu noob klingt, aber ich bin eigentlich ein Noob inhadoop
. Versuche zu lernen. Danke
Danke. Ja, ich habe eine Datei der Größe 50GB. Also ist die beste Option, ohne MapReduce zu gehen? – uchman21
Aufgrund Ihrer Bedürfnisse scheint es, dass die große Datendatei nicht aufgeteilt werden kann. Also, IMHO hat es keinen Sinn, MapReduce zu verwenden, da Sie nur einen Mapper erzwingen wollen, was am Ende dasselbe ist, als wenn Sie einen einzigen "traditionellen" Prozess hätten. Die Stärke von MapReduce besteht darin, ein Problem in kleinere Probleme aufzuteilen, deren Prozess über einen Cluster von Maschinen verteilt wird. – frb