J'ai pris la sauvegarde de la table Hbase en utilisant l'outil utilitaire Hbase Export.Courir MapReduce sur thorws Tableau Hbase Exporté Impossible de trouver un désérialiseur pour la classe de valeur: « org.apache.hadoop.hbase.client.Result
hbase org.apache.hadoop.hbase.mapreduce.Export "FinancialLineItem" "/project/fricadev/ESGTRF/EXPORT"
Cela a démarré dans mapreduce et transféré toutes mes données de table dans le dossier de sortie. Selon le document, le format de fichier du fichier ouotput est un fichier de séquence. Donc, j'ai couru sous le code pour extraire ma clé et la valeur du fichier.
Maintenant, je veux courir MapReduce lire la valeur de clé à partir du fichier de sortie, mais faire exception ci-dessous
java.lang.Exception: java.io.IOException: Impossible de trouver un désérialiseur pour la valeur class: 'org.apache.hadoop.hbase.client.Result'. S'il vous plaît vérifier que la configuration « » io.serializations est correctement configuré, si vous êtes à l'aide sérialisation personnalisée. at org.apache.hadoop.mapred.LocalJobRunner $ Job.run (LocalJobRunner.java:406) Causée par: java.io.IOException: Impossible de trouver un deserializer pour la classe Value: 'org.apache.hadoop.hbase .client.Result '. S'il vous plaît assurer que la configuration « io.serializations » est correctement configuré , si vous utilisez sérialisation personnalisé. à org.apache.hadoop.io.SequenceFile $ Reader.init (SequenceFile.java:1964) à org.apache.hadoop.io.SequenceFile $ Reader.initialize (SequenceFile.java:1811) à org.apache. hadoop.io.SequenceFile $ Reader. (SequenceFile.java:1760) à org.apache.hadoop.io.SequenceFile $ Reader. (SequenceFile.java:1774) à org.apache.hadoop.mapreduce.lib.input. SequenceFileRecordReader.initialize (SequenceFileRecordReader.java:50) à org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.initialize (MapTask.java:478) à org.apache.hadoop.mapred.MapTask.runNewMapper (MapTask.java: 671) à org.apache.hadoop.mapred.MapTask.run (MapTask.java:330)
Voici mon code pilote
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;
}
}
Voici mon code mappeur
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 {
}
}