Hbase 내 보낸 테이블에서 MapReduce 실행하기 Value 클래스에 대한 디시리얼라이저를 찾을 수 없습니다:'org.apache.hadoop.hbase.client.Result



hdfs hadoop2 (1)

그래서 나는 여기에 내 질문에 대답 할 것입니다.

HBase를 사용하여 데이터를 저장하고이 감속기가 결과를 HBase 테이블에 출력하기 때문에 Hadoop은 데이터를 직렬화하는 방법을 알지 못한다고 말합니다. 그것이 우리가 그것을 도와야하는 이유입니다. setUp 내부에 io.serializations 변수를 설정합니다.

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

Hbase Export 유틸리티 도구를 사용하여 Hbase 테이블 백업을 수행했습니다.

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

이것은 mapreduce를 시작하고 모든 테이블 데이터를 Output 폴더로 전송했습니다. 문서에 따라 ouotput 파일의 파일 형식은 시퀀스 파일입니다. 그래서 파일에서 키와 값을 추출하기 위해 코드를 실행했습니다.

이제 mapreduce를 실행하여 출력 파일에서 키 값을 읽지 만 예외가 발생하기를 원합니다.

java.lang.Exception : java.io.IOException : Value 클래스에 대한 직 병렬 변환기를 찾을 수 없습니다 : 'org.apache.hadoop.hbase.client.Result'. 사용자 지정 직렬화를 사용하는 경우 'io.serializations'구성이 올바르게 구성되어 있는지 확인하십시오. org.apache.hadoop.mapred.LocalJobRunner $ Job.run (LocalJobRunner.java:406)에 기인 : java.io.IOException : Value 클래스에 대한 디시리얼라이저를 찾을 수 없습니다 : 'org.apache.hadoop.hbase.client .결과'. 사용자 지정 직렬화를 사용하는 경우 'io.serializations'구성이 올바르게 구성되어 있는지 확인하십시오. org.apache.hadoop.io.SequenceFile $ Reader.init (SequenceFile.java:1964) at org.apache.hadoop.io.SequenceFile $ Reader.initialize (SequenceFile.java:1811) at org.apache.hadoop.io .SequenceFile $ Reader. (SequenceFile.java:1760) org.apache.hadoop.io.SequenceFile $ Reader. (SequenceFile.java:1774) at org.apache.hadoop.mapreduce.lib.input.SequenceFileRecordReader.initialize (SequenceFileRecordReader .java : 50) at org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.initialize (MapTask.java:478) at org.apache.hadoop.mapred.MapTask.runNewMapper (MapTask.java: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 {
    }
  }