当前位置: 首页 > 知识库问答 >
问题:

在Hbase导出的表thorws上运行MapReduce时,找不到值类“org”的反序列化器。阿帕奇。hadoop。hbase。客户后果

堵茂勋
2023-03-14

我使用Hbase导出实用工具进行了Hbase表备份。

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

这已经启动了mapreduce并将我的所有表数据传输到了输出文件夹中。根据文件,ouotput文件的文件格式为序列文件。因此,我运行以下代码从文件中提取密钥和值。

现在我想运行mapreduce从输出文件中读取键值,但遇到以下异常

Java语言lang.例外:java。io。IOException:找不到值类的反序列化程序:“org”。阿帕奇。hadoop。hbase。客户“结果”。请确保配置“io”。如果使用自定义序列化,则已正确配置序列化。位于组织。阿帕奇。hadoop。映射。LocalJobRunner$作业。运行(LocalJobRunner.java:406)的原因:java。io。IOException:找不到值类的反序列化程序:“org”。阿帕奇。hadoop。hbase。客户“结果”。请确保配置“io”。如果使用自定义序列化,则已正确配置序列化。位于组织。阿帕奇。hadoop。io。SequenceFile$读取器。位于org的init(SequenceFile.java:1964)。阿帕奇。hadoop。io。SequenceFile$读取器。在org初始化(SequenceFile.java:1811)。阿帕奇。hadoop。io。SequenceFile$读取器。(SequenceFile.java:1760)位于org。阿帕奇。hadoop。io。SequenceFile$读取器。(SequenceFile.java:1774)位于org。阿帕奇。hadoop。mapreduce。lib。输入SequenceFileRecordReader。在组织中初始化(SequenceFileRecordReader.java:50)。阿帕奇。hadoop。映射。MapTask$NewTrackingRecordReader。在组织中初始化(MapTask.java:478)。阿帕奇。hadoop。映射。MapTask。在org上运行NewMapper(MapTask.java:671)。阿帕奇。hadoop。映射。MapTask。运行(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 {
    }
  }

共有1个答案

袁雅逸
2023-03-14

因此,我将在这里回答我的问题,即需要什么才能使其发挥作用

因为我们使用HBase存储数据,而这个reducer将其结果输出到HBase表,所以Hadoop告诉我们他不知道如何序列化数据。这就是为什么我们需要帮助它。内部设置设置io。serializations变量

hbaseConf.setStrings("io.serializations", new String[]{hbaseConf.get("io.serializations"), MutationSerialization.class.getName(), ResultSerialization.class.getName()});
 类似资料:
  • 编辑:问题解决(见注释解释) 我安装了HBase。当我尝试启动“start hbase.sh”时,会出现一些错误: 错误:无法找到或加载主类org.apache.hadoop.hbase.util.HBaseConfTool 错误:无法找到或加载主类组织。阿帕奇。hadoop。hbase。动物园管理员。ZKServerTool 我的安装目录是: 我将HBASE_HOME配置为:C:\用户\Alon

  • 现在我正在编写一个 Java 程序,使用哈道普映射还原将输出写入 HBase。问题是关于合并器类的。因为现在我的 reduce 类扩展了 TableReducer,而不是化简器。那么我的合并器类呢,它应该也扩展表还原器,还是仍然扩展化简器?

  • 导出HADOOP_CLASSPATH=“

  • 我是的新手,遇到以下错误。 运行以下代码时会出现此错误(可在GitHub中获得:https://github.com/ddraj/hbase-trunk-mttr/blob/master/hbase-examples/src/main/java/org/apache/hadoop/hbase/mapreduce/sampleuploader.java) 我正在使用CDH5.2.6 我可以像这样获得

  • 我正在尝试使用Spring Cloud Stream框架构建一个简单的Kafka Streams应用程序。我可以连接到流以推送原始数据进行处理。但是当我尝试按键处理流进行事件计数时,我得到了未找到的运行应用程序时异常。我检查了我的项目包含的库,我可以找到类,它没有丢失。我不确定为什么在运行时它没有被加载! 下面是我的源文件。 <代码>com。pgp。学Kafka。分析。分析应用程序 <代码>com

  • 问题内容: 我要疯了: 已安装Hadoop / Hbase,所有正在运行; 伪分布式环境。 HBase的壳 正在运行并提出运行“列表”的正确结果;并且 通过红宝石和节俭连接时,一切正常。我们正在添加数据,它正在进入系统,我们可以查询/扫描它。一切似乎都很好。 但是,使用Java连接时: 我一直在努力寻找原因,但我真的一点头也不知道。一切似乎都已正确安装。 看起来也不错。 如果您键入任何内容,则连接