Cómo actualizar hadoop a la nueva versión de la API de mapreduce
Como todos sabemos, Hadoop ha introducido una nueva versión de la API MapReduce desde Hadoop 0.20, así que decidí estudiar la nueva versión de la API.
Primero, prepare los archivos fuente para MapReduce, de la siguiente manera:
1900,35.3
1900,33.2
...
1905,38.2
1905,37.1
Como se muestra arriba, se registra el valor de temperatura de cada año. Ahora necesitamos averiguar el valor de temperatura de. cada año el valor de temperatura más alto, este es un problema típico que MapReduce puede manejar muy bien. En la etapa de Mapa, obtenemos [1900,(35.3,
333.2,...)],.. ..[ 1905, (38.2, 37.1, ....)], y luego calcular el valor de temperatura máxima de cada año a través de la etapa Reducir.
El primer paso es escribir la clase MapReduce, que es similar a la antigua API, pero cabe señalar que el nuevo paquete al que se hace referencia aquí: org.apache.hadoop.mapreduce.* en lugar del original org.apache.hadoop.mapred.*, el programa específico es el siguiente:
paquete com.bjcic.hadoop.guide;
importar java.io.BufferedReader;
importar java.io.File;
importar java.io.FileInputStream;
importar java.io.IOException;
importar java.io .InputStreamReader;
p>importar org.apache.hadoop.fs.Path;
importar org.apache.hadoop.io.DoubleWritable;
importar organización .apache.hadoop.io LongWritable;
importar org.apache.hadoop.io.Text;
importar org.apache.hadoop.mapreduce.Job;
importar org.apache.hadoop.mapreduce.Mapper;
importar org.apache.hadoop.mapreduce.Reducer;
importar org.apache.hadoop.mapreduce.Reducer.Context ;
importar org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
importar org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
clase pública MaxTptr {
clase pública estática MaxTptrMapper extiende Mapper Text, DoubleWritable> { @Override mapa de vacío público (clave de escritura larga, valor de texto, contexto de contexto) lanza IOException, InterruptedException { String[] elementos = value.toString().split("," ); context.write(new Text(items[0]), new DoubleWritable(Double.parseDouble(items[1]))); } } clase estática pública MaxTptrReducer extiende Reducer Text, DoubleWritable> { @Override reducción de vacío público (clave de texto, valor Iterable es, Contexto contexto) lanza IOException, InterruptedException { double maxTptr = Double.MIN_VALUE; for (DoubleWritable val : valores) { maxTptr = Math.max(val.get(), maxTptr); } context.write(clave, nueva DoubleWritable(maxTptr )); } } public static void main(String[] argv) { //JobConf conf = new JobConf(MaxTptr.class); Trabajo trabajo = null; prueba { trabajo = nuevo Trabajo(); trabajo .setJarByClass(MaxTptr.class); FileInputFormat.addInputPath(trabajo, nueva ruta("entrada")); FileOutputFormat.setOutputPath(trabajo, nueva ruta("salida") ); job.setMapperClass(MaxTptrMapper.class); job.setReducerClass(MaxTptrReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(DoubleWritable.class); System.exit( job.waitForCompletion(true)? 0: 1 ); } captura (IOException e) { // TODO Bloque catch generado automáticamente e.printStackTrace(); } catch (InterruptedException e) { // TODO Bloque de captura generado automáticamente e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Generado automáticamente bloque de captura e.printStackTrace(); } } } Para el código anterior Es necesario explicar los siguientes puntos: La clase base extendida ha cambiado y se ha introducido la importante clase Context para Mapper y Reducer respectivamente Enviar y ejecutar tareas usando It is a nuevo tipo de trabajo en lugar de la versión anterior de JobConf Cargue el archivo fuente junto con el directorio src a la máquina Hadoop pseudodistribuida Primero, debe compilar y empaquetar la tarea Hadoop: javac -classpath $HADOOP_HOME/hadoop-core-1.0.1.jar -d clases src/com/bjcic/hadoop/guide/MaxTptr.java jar -cvf. axTptr.jar -C clases/ . MaxTptr.jar se generará en el directorio actual. Vaya al directorio $HADOOP_HOME Primero, asegúrese de que Hadoop se esté ejecutando en modo pseudodistribuido. De lo contrario, inicie Hadoop (bin/start-all.sh). Tenga en cuenta que si el inicio no tiene éxito, deberá hacerlo. puede ejecutar bin/primero. Cargue el archivo de temperatura al sistema de archivos HDFS de Hadoop: $>bin/hadoop dfs -put /data_dir/tempreture.txt input Ejecute tareas de Hadoop: $>bin/hadoop jar MaxTptr.jar com.bjcic.hadoop.guide.MaxTptr entrada salida Obtener el resultado de salida de HDFS: p> $>bin/hadoop dfs -get output /data_dir/ En este momento, el directorio de salida se creará en el directorio data_dir, que contiene el archivo de resultados generado.