gpt4 book ai didi

java - 线程 "main"java.lang.NoClassDefFoundError : org/apache/hadoop/hbase/HBaseConfiguration 中的异常

转载 作者:可可西里 更新时间:2023-11-01 14:18:05 26 4
gpt4 key购买 nike

我正在使用 Hadoop 1.0.3 和 HBase 0.94.22。我正在尝试运行映射器程序以从 Hbase 表中读取值并将它们输出到文件中。我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:340)
at org.apache.hadoop.util.RunJar.main(RunJar.java:149)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguration
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

代码如下

import java.io.IOException;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;


public class Test {

static class TestMapper extends TableMapper<Text, IntWritable> {
private static final IntWritable one = new IntWritable(1);

public void map(ImmutableBytesWritable row, Result value, Context context) throws IOException, InterruptedException
{
ImmutableBytesWritable userkey = new ImmutableBytesWritable(row.get(), 0 , Bytes.SIZEOF_INT);
String key =Bytes.toString(userkey.get());
context.write(new Text(key), one);

}
}


public static void main(String[] args) throws Exception {

HBaseConfiguration conf = new HBaseConfiguration();
Job job = new Job(conf, "hbase_freqcounter");
job.setJarByClass(Test.class);
Scan scan = new Scan();

FileOutputFormat.setOutputPath(job, new Path(args[0]));
String columns = "data";
scan.addFamily(Bytes.toBytes(columns));
scan.setFilter(new FirstKeyOnlyFilter());
TableMapReduceUtil.initTableMapperJob("test",scan, TestMapper.class, Text.class, IntWritable.class, job);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
System.exit(job.waitForCompletion(true)?0:1);

}

}

我将上述代码导出到一个 jar 文件,并在命令行上使用以下命令运行上述代码。

hadoop jar/home/testdb.jar 测试

其中 test 是应写入映射器结果的文件夹。

我检查了其他一些链接,例如 Caused by: java.lang.ClassNotFoundException: org.apache.zookeeper.KeeperException建议在类路径中包含 zookeeper 文件,但在 eclipse 中创建项目时,我已经包含了 hbase 的 lib 目录中的 zookeeper 文件。我包含的文件是 zookeeper-3.4.5.jar。 Ans 也访问了这个链接 HBase - java.lang.NoClassDefFoundError in java ,但我正在使用映射器类从 hbase 表中获取值,而不是从任何客户端 API 中获取值。我知道我在某个地方犯了一个错误,你们能帮帮我吗??

我注意到另一件奇怪的事情,当我删除主函数中除了第一行“HBaseConfiguration conf = new HBaseConfiguration();”之外的所有代码,然后将代码导出到一个 jar 文件并尝试编译该 jar文件为 hadoop jar test.jar 我仍然得到同样的错误。看来我没有正确定义 conf 变量,或者我的环境存在一些问题。

最佳答案

我得到了问题的修复,我没有在 hadoop-env.sh 文件中添加 hbase 类路径。下面是我为使工作正常进行而添加的。

$ export HADOOP_CLASSPATH=$HBASE_HOME/hbase-0.94.22.jar:\
$HBASE_HOME/hbase-0.94.22-test.jar:\
$HBASE_HOME/conf:\
${HBASE_HOME}/lib/zookeeper-3.4.5.jar:\
${HBASE_HOME}/lib/protobuf-java-2.4.0a.jar:\
${HBASE_HOME}/lib/guava-11.0.2.jar

关于java - 线程 "main"java.lang.NoClassDefFoundError : org/apache/hadoop/hbase/HBaseConfiguration 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26364057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com