mapreduce hbase hdfs hadoop2 sequencefile

Ejecutar MapReduce en Hbase Exported Table thorws No se pudo encontrar un deserializador para la clase Value: ''org.apache.hadoop.hbase.client.Result



hdfs hadoop2 (1)

He tomado la copia de seguridad de la tabla Hbase usando la herramienta de utilidad de exportación Hbase.

hbase org.apache.hadoop.hbase.mapreduce.Export "FinancialLineItem" "/project/fricadev/ESGTRF/EXPORT"

Esto dio un puntapié en mapreduce y transfirió todos los datos de mi tabla a la carpeta de Salida. Según el documento, el formato de archivo del archivo de salida será el archivo de secuencia. Así que corrí por debajo del código para extraer mi clave y valor del archivo.

Ahora quiero ejecutar mapreduce para leer el valor de la clave del archivo de salida, pero estoy por debajo de la excepción

java.lang.Exception: java.io.IOException: no se pudo encontrar un deserializer para la clase Value: ''org.apache.hadoop.hbase.client.Result''. Asegúrese de que la configuración ''io.serializations'' esté configurada correctamente, si está utilizando la serialización personalizada. en org.apache.hadoop.mapred.LocalJobRunner $ Job.run (LocalJobRunner.java:406) Causado por: java.io.IOException: no se pudo encontrar un deserializador para la clase Value: ''org.apache.hadoop.hbase.client .Resultado''. Asegúrese de que la configuración ''io.serializations'' esté configurada correctamente, si está utilizando la serialización personalizada. en org.apache.hadoop.io.SequenceFile $ Reader.init (SequenceFile.java:1964) en org.apache.hadoop.io.SequenceFile $ Reader.initialize (SequenceFile.java:1811) en org.apache.hadoop.io .SequenceFile $ Reader. (SequenceFile.java:1760) en org.apache.hadoop.io.SequenceFile $ Reader. (SequenceFile.java:1774) en org.apache.hadoop.mapreduce.lib.input.SequenceFileRecordReader.initialize (SequenceFileRecordReader .java: 50) en org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.initialize (MapTask.java:478) en org.apache.hadoop.mapred.MapTask.runNewMapper (MapTask.java:671) en org.apache. hadoop.mapred.MapTask.run (MapTask.java:330)

Aquí está mi código de conductor

package SEQ; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; public class SeqDriver extends Configured implements Tool { public static void main(String[] args) throws Exception{ int exitCode = ToolRunner.run(new SeqDriver(), args); System.exit(exitCode); } public int run(String[] args) throws Exception { if (args.length != 2) { System.err.printf("Usage: %s needs two arguments files/n", getClass().getSimpleName()); return -1; } String outputPath = args[1]; FileSystem hfs = FileSystem.get(getConf()); Job job = new Job(); job.setJarByClass(SeqDriver.class); job.setJobName("SequenceFileReader"); HDFSUtil.removeHdfsSubDirIfExists(hfs, new Path(outputPath), true); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.setOutputKeyClass(ImmutableBytesWritable.class); job.setOutputValueClass(Result.class); job.setInputFormatClass(SequenceFileInputFormat.class); job.setMapperClass(MySeqMapper.class); job.setNumReduceTasks(0); int returnValue = job.waitForCompletion(true) ? 0:1; if(job.isSuccessful()) { System.out.println("Job was successful"); } else if(!job.isSuccessful()) { System.out.println("Job was not successful"); } return returnValue; } }

Aquí está mi código mapper

package SEQ; import java.io.IOException; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class MySeqMapper extends Mapper <ImmutableBytesWritable, Result, Text, Text>{ @Override public void map(ImmutableBytesWritable row, Result value,Context context) throws IOException, InterruptedException { } }


Así que voy a responder mi pregunta aquí es lo que se necesitaba para que funcione

Como utilizamos HBase para almacenar nuestros datos y este reductor genera su resultado en la tabla HBase, Hadoop nos dice que no sabe cómo serializar nuestros datos. Es por eso que tenemos que ayudarlo. Inside setUp establece la variable io.serializations

hbaseConf.setStrings("io.serializations", new String[]{hbaseConf.get("io.serializations"), MutationSerialization.class.getName(), ResultSerialization.class.getName()});