Red de conocimiento informático - Aprendizaje de programación - Cómo actualizar hadoop a la nueva versión de la API de mapreduce

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:

$>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.