我使用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 {
}
}
因此,我将在这里回答我的问题,即需要什么才能使其发挥作用
因为我们使用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连接时: 我一直在努力寻找原因,但我真的一点头也不知道。一切似乎都已正确安装。 看起来也不错。 如果您键入任何内容,则连接