J'essaie d'écrire un programme MapReduce qui peut lire un fichier d'entrée et écrire la sortie dans un autre fichier texte. Je prévois d'utiliser la classe BufferedReader pour cela. Mais je ne sais pas vraiment comment l'utiliser dans un programme MapReduce.
Quelqu'un peut-il m'en donner un extrait de code?
P.S. Je suis totalement nouveau dans la programmation Hadoop et MapReduce. Restez avec moi.
Merci d'avance.
Le code ci-dessous vous aide à lire un fichier depuis HDFS et à afficher le contenu dans la console
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){
}
}
}
MODIFIER
Driver
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);
}
}
Mappeur
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
}
}
}
Le code ci-dessus vous aide à lire un fichier texte à partir de HDFS.