clase de interfaz 1.OutputFormat
salida OutputFormat MapReduce es la clase base, todas las salidas se implementan para lograr interfaces de MapReduce OutputFormat;
TextOutputFormat de salida 1.1 del texto
TextOutputFormat formato de salida predeterminado, se escribe en cada línea de texto de grabación; clave y su valor puede ser cualquier tipo, como método para convertirlos en una cadena llamada toString TextOutputFormat ();
1.2 SequenceFileOutputFormat
La subsiguiente SequenceFileOutputFormat MapReduce como entrada la salida de la tarea, que es un formato de salida buena, debido a su forma compacta, fácil de compresa;
1.3 OutputFormat personalizada
De acuerdo con las necesidades del usuario, salida de implementación personalizada;
2. OutputFormat personalizada
2.1 escenarios de uso
Con el fin de lograr el control final de los formatos de ruta de salida y los archivos de salida, puede ser automáticamente el OutputFormat;
Por ejemplo: para un tipo de programa de MapReduce en función de los datos de resultado de salida a un directorio diferente, como la demanda de salida flexible puede lograrse mediante OutputFormat costumbre;
2.2 Personalización de paso OutputFormat
2.2.1 una clase personalizada que hereda FileOutputFormat;
2.2.2 reescritura RecordWriter, datos de salida específicos de reescritura Write ();
2.3 demanda
Log filtro de entrada de registro, que comprende baidu sitio de salida baidu.log a un archivo, que no contiene el sitio para archivo de salida baidu other.log;
http: // www.baidu.com
http: // www.google.com
http: // cn.bing.com
http: // www.baidu.com
http: // www.sohu.com
http: // www .sina.com
http: // www.sin2a.com
http: // www.sin2desa.com
http: // www.sindsafa.com
funcionamiento práctico 3. Caso de encargo OutputFormat
Escribe 3.1 FilterMapper
com.wn.outputformat empaquetar;
org.apache.hadoop.io.LongWritable importación;
org.apache.hadoop.io.NullWritable importación;
org.apache.hadoop.io.Text importación;
org.apache.hadoop.mapreduce.Mapper importación;
java.io.IOException importación;
público de clase FilterMapper extiende Mapper <LongWritable, texto, texto, NullWritable> {
@ Override
protegida nula mapa (clave LongWritable, Valor de texto, el contexto Contexto) throws IOException, InterruptedException {
// 写出
context.write (valor, NullWritable. obtener () );
}
}
Escribe 3.2 FilterReducer
com.wn.outputformat empaquetar;
org.apache.hadoop.io.NullWritable importación;
org.apache.hadoop.io.Text importación;
org.apache.hadoop.mapreduce.Reducer importación;
java.io.IOException importación;
público de clase FilterReducer extiende Reductor <texto, NullWritable, texto, NullWritable> {
texto texto = nuevo texto ();
@ Override
protegida vacío reducir (clave de texto, Iterable <NullWritable> valores, el contexto Contexto) throws IOException, InterruptedException {
// 获取一行
línea String = text.toString ();
// 拼接
línea = línea + " \ r \ n" ;
// conjunto
. Texto SET (Línea);
// salida
context.write (texto, NullWritable. GET ());
}
}
Escribe 3.3 FilterRecordWriter
com.wn.outputformat empaquetar;
org.apache.hadoop.fs.FSDataOutputStream importación;
org.apache.hadoop.fs.FileSystem importación;
org.apache.hadoop.fs.Path importación;
org.apache.hadoop.io.IOUtils de importación;
org.apache.hadoop.io.NullWritable importación;
org.apache.hadoop.io.Text importación;
org.apache.hadoop.mapreduce.RecordWriter importación;
org.apache.hadoop.mapreduce.TaskAttemptContext importación;
java.io.IOException importación;
público de clase FilterRecordWriter extiende RecordWriter <texto, NullWritable> {
FSDataOutputStream atguiguOut = nula ;
FSDataOutputStream otherOut = nulo ;
públicoFilterRecordWriter (TaskAttemptContext Trabajo) {
// Obtener el sistema de archivos
del FS sistema de archivos;
el try {
FS . = El sistema de ficheros GET (job.getConfiguration ());
// crea una ruta de archivo de salida para
el Camino atguiguPath = nuevo nuevo el camino ( " E: \\ \\ APTECH Hadoop grandes de datos \\ \\ baidu.log 04 " );
el Sendero otherPath = nuevo nuevo el camino ( " E: \\ APTECH Hadoop \\ \\ \\ grandes de datos other.log 04 " );
// crear el flujo de salida
atguiguOut = fs.create (atguiguPath);
otherOut =fs.create (otherPath);
} Catch (IOException e) {
e.printStackTrace ();
}
}
@ Override
pública vacío (texto texto, NullWritable nullWritable) throws IOException escritura, InterruptedException {
// 判断franqueo "Baidu"输出到不同文件
si (text.toString (). (Contiene " Baidu " )) {
atguiguOut.write ( text.toString () getBytes ()).;
} Demás {
otherOut.write (. Text.toString () getBytes ());
}
}
@ Override
pública nulacerrar (TaskAttemptContext taskAttemptContext) lanza IOException, InterruptedException {
// 关闭资源
IOUtils.closeStream (atguiguOut);
IOUtils.closeStream (otherOut);
}
}
Escribe 3.4 FilterOutputFormat
com.wn.outputformat empaquetar;
java.io.IOException importación;
org.apache.hadoop.io.NullWritable importación;
org.apache.hadoop.io.Text importación;
org.apache.hadoop.mapreduce.RecordWriter importación;
org.apache.hadoop.mapreduce.TaskAttemptContext importación;
org.apache.hadoop.mapreduce.lib.output.FileOutputFormat importación;
público de clase FilterOutputFormat extiende FileOutputFormat <texto, NullWritable> {
@ Override
pública RecordWriter <texto, NullWritable> getRecordWriter (TaskAttemptContext taskAttemptContext) throws IOException, InterruptedException {
devolver nueva FilterRecordWriter (taskAttemptContext);
}
}
Escribe 3,5 FilterDriver
com.wn.outputformat paquete;
Importación org.apache.hadoop.conf.Configuration;
Importación org.apache.hadoop.fs.Path;
Importación org.apache.hadoop.io.NullWritable;
Importación org.apache.hadoop.io.Text ;
org.apache.hadoop.mapreduce.Job importación;
importación org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
importación org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
importación java.io.IOException;
pública clase FilterDriver {
públicas estáticas void main (String [] args) throws IOException, un ClassNotFoundException, InterruptedException {
// necesidades de entrada y de salida de la trayectoria de engaste de acuerdo con las rutas de entrada y salida reales en su ordenador
args = new new String [] {" E: \\ \\北大青鸟大数据04 \\ \\ hadoop de entrada " , " E: \\ \\北大青鸟大数据04 \\ \\ hadoop salida " };
Conf Configuración = nueva configuración ();
Profesión Profesión = Job.getInstance (conf);
job.setJarByClass (FilterDriver. clase );
job.setMapperClass (FilterMapper. clase );
job.setReducerClass (FilterReducer. clase );
job.setMapOutputKeyClass (. Texto de clase );
job.setMapOutputValueClass (NullWritable. clase );
job.setOutputKeyClass (texto.clase );
job.setOutputValueClass (NullWritable. clase );
// formato de salida propios ajustes de componentes para el trabajo
job.setOutputFormatClass (FilterOutputFormat. clase );
FileInputFormat.setInputPaths (trabajo, nueva nuevo la ruta (args [ 0 ])) ;
FileOutputFormat.setOutputPath (Job, nuevos nuevo la ruta (args [ . 1 ]));
Boolean B = job.waitForCompletion ( true );
System.exit (B ? 0 : 1. );
}
}