Hbaseエクスポートユーティリティツールを使用してHbaseテーブルバックアップを取得しました。HbaseエクスポートテーブルでMapReduceを実行しています。値クラスのデシリアライザが見つかりませんでした: 'org.apache.hadoop.hbase.client.Result
hbase org.apache.hadoop.hbase.mapreduce.Export "FinancialLineItem" "/project/fricadev/ESGTRF/EXPORT"
これはmapreduceを起動し、すべてのテーブルデータを出力フォルダに転送しました。 ドキュメントごとに、出力ファイルのファイル形式はシーケンスファイルです。 私はファイルからキーと値を抽出するために以下のコードを実行しました。
今私は、出力ファイルからキー値を読み取るためのMapReduceを実行したいが、例外
の下ここのjava.lang.Exception取得:にjava.io.IOException:値の デシリアライザが見つかりませんでしたがクラス: 'org.apache.hadoop.hbase.client.Result'。 のカスタムシリアル化を使用している場合は、 の設定 'io.serializations'が正しく設定されていることを確認してください。 at org.apache.hadoop.mapred.LocalJobRunner $ Job.run(LocalJobRunner.java:406) 原因:java.io.IOException:Valueクラスのデシリアライザが見つかりませんでした: 'org.apache.hadoop.hbase .client.Result '。 カスタムシリアル化を使用している場合は、設定 'io.serializations'が正しく に設定されていることを確認してください。 at org.apache.hadoop.io.SequenceFile $ Reader.init(SequenceFile.java:1964) at org.apache.hadoop.io.SequenceFile $ Reader.initialize(SequenceFile.java:1811) at org.apache。 hasoop.io.SequenceFile $ Reader(SequenceFile.java:1760) at org.apache.hadoop.io.SequenceFile $ Reader。(SequenceFile.java:1774) at org.apache.hadoop.mapreduce.lib.input。 (MapTask.java:478) at org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.initialize(MapTask.java:478) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:SequenceFileRecordReader.java:50) 671) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:330)
ここに私のドライバコード
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;
}
}
は私マッパーコード
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 {
}
}