mapreduce चलने वाला मानचित्र Hbase पर निर्यात किया गया टेबल थोरवे वैल्यू क्लास के लिए deserializer नहीं मिल सका: 'org.apache.hadoop.hbase.client.Result



hdfs hadoop2 (1)

इसलिए मैं यहां अपने प्रश्न का जवाब दूंगा कि यह काम करने के लिए क्या आवश्यक था

चूंकि हम अपने डेटा को स्टोर करने के लिए एचबीज़ का उपयोग करते हैं और इस रिड्यूसर के परिणाम इसके एचबीज़ तालिका में आउटपुट करते हैं, हडोप हमें बता रहा है कि वह यह नहीं जानता कि हमारे डेटा को कैसे सीरियल करना है। यही कारण है कि हमें इसकी मदद करना है सेट अप के अंदर 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"

यह मैपरेड्यूड में लात मारी और मेरे सभी टेबल डेटा को आउटपुट फ़ोल्डर में स्थानांतरित कर दिया। दस्तावेज के अनुसार आउटपुट फ़ाइल का फ़ाइल स्वरूप अनुक्रम फ़ाइल है। इसलिए मैं फ़ाइल से अपनी कुंजी और मूल्य को निकालने के लिए कोड से नीचे चला गया।

अब मैं आउटपुट फाइल से कुंजी मान पढ़ने के लिए मैपरेड को चलाने के लिए चाहता हूं लेकिन अपवाद के नीचे हो रहा हूं

java.lang.Exception: java.io.IOException: मूल्य वर्ग के लिए एक deserializer नहीं मिल सका: 'org.apache.hadoop.hbase.client.Result' कृपया सुनिश्चित करें कि कॉन्फ़िगरेशन 'io.serializations' ठीक से कॉन्फ़िगर किया गया है, अगर आप कस्टम सीरियललाइजेशन का उपयोग कर रहे हैं at org.apache.hadoop.mapred.LocalJobRunner $ Job.run (LocalJobRunner.java:406) द्वारा कारण: java.io.IOException: मूल्य वर्ग के लिए एक deserializer नहीं मिल सका: 'org.apache.hadoop.hbase.client ।परिणाम'। कृपया सुनिश्चित करें कि कॉन्फ़िगरेशन 'io.serializations' ठीक से कॉन्फ़िगर किया गया है, अगर आप कस्टम सीरियललाइजेशन का उपयोग कर रहे हैं at org.apache.hadoop.io.SequenceFile $ Reader.init (sequencefile.java1964) at org.apache.hadoop.io.SequenceFile $ Reader.initialize (अनुक्रमफ़ाइल। java1811) at org.apache.hadoop.io पर .SequenceFile $ Reader। (SequenceFile.java:1760) at org.apache.hadoop.io.SequenceFile $ Reader। (SequenceFile.java:1774) पर org.apache.hadoop.mapreduce.lib.input.SequenceFileRecordReader.initialize (अनुक्रमफ़ाइलरेकॉर्डररेडर .java: 50) at org.apache.hadoop.mapred.MapTask $ org.apache पर org.apache.hadoop.mapred.MapTask.RunNewMapper (MapTask.java:671) पर $ NewTrackingRecordReader.in आरंभ करें (MapTask.javaety78) पर। hadoop.mapred.MapTask.run (MapTask.java:330)

यहां मेरा ड्राइवर कोड है I

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;
    }
}

यहां मेरा मैपर कोड है I

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 {
    }
  }