【问题标题】:error in running hbase java program运行hbase java程序时出错
【发布时间】:2017-08-14 09:50:46
【问题描述】:

这是我下面的 java hbase createtable 程序:-

 public class createtable 
 {

  public static void main(String[] args) throws IOException 

  {   
       Configuration conf = HBaseConfiguration.create();    
       conf.set("hbase.zookeeper.quorum", "sandbox.hortonworks.com");
       conf.set("hbase.zookeeper.property.clientPort", "2181");
       conf.set("zookeeper.znode.parent", "/hbase-unsecure");
       HBaseAdmin admin = new HBaseAdmin(conf);
       HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("people"));
       tableDescriptor.addFamily(new HColumnDescriptor("personal"));
       tableDescriptor.addFamily(new HColumnDescriptor("contactinfo"));
       admin.createTable(tableDescriptor);
       Put put = new Put(Bytes.toBytes("doe-john-m-12345");     
   }

在我运行命令时创建程序的 jar (table-0.0.1-SNAPSHOT.jar) 之后 hadoop jar table-0.0.1-SNAPSHOT.jar table.createtable

我来了

   Exception in thread "main" java.lang.NoClassDefFoundError:org/apachehadoop/hbase/HBaseConfiguration at 
    table.createtable.main(createtable.java:17)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at  sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at  sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav     a:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:234)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:148)                           Causedby:
     java.lang.ClassNotFoundException:org.apache.hadoop.hbase.HBase
     Configuration     
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

 how do i resolve this error ??

【问题讨论】:

标签: maven hadoop mapreduce hbase apache-zookeeper


【解决方案1】:

您的代码看不到 hbase.jar 。尝试在你的 pom.xml

中添加这部分
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase -->
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase</artifactId>
    <version>0.90.2</version>
</dependency>

然后运行它。

【讨论】:

  • 我是否必须添加 hbase 版本(0.90.2),添加 hbase jar 后仍然显示相同的错误
  • 请添加版本
  • 添加依赖后我的hbase版本是1.2.6 -> pom.xml中缺少工件org.apache.hbase:hbase:jar:1.2.6
  • 把这个添加到你的 pom.xml org.apache.hbasehbase-common1.2.6
  • 已经添加了这些 jars.. hbase-client >> hbase-common >> hadoop-common >> hadoop-common >> hadoop-client >>hbase 1.2.6
【解决方案2】:

请阅读此博客:https://my-bigdata-blog.blogspot.com/2017/08/hbase-programming-on-map-reduce-with.html

两点让它发挥作用

1) 你的代码应该有 TableMapReduceUtil.addDependencyJars(job);

2) 在命令行 - 在执行命令之前执行以下操作:

导出 HADOOP_CLASSPATH=your-jar-path

导出 HADOOP_CLASSPATH=$HADOOP_CLASSPATH:hbase classpath

这会添加 hbase 库以供执行。你在 maven/netbeans 中添加的那个是用来编译的。

【讨论】:

  • 请解释第 2 步的作用以及为什么需要它
  • 第 2 步添加执行的 hbase 库。您在 maven/netbeans 中添加的那个是用于编译的。该 hbase 类路径应该在引号中执行。无法在此处添加它们..
  • 好的..我认为问题出在 hadoop env.sh 中的 HADOOP_CLASSPATH 中。我必须在导出 HADOOP_CLASSPATH 中设置什么??
【解决方案3】:

我解决了这个问题,因为在制作 fat jar 时存在问题,并且新的 hbase 版本中的 jar 被许多依赖项弃用了。所以我还添加了 hbase-client-1.2.6-jar 和 hbase-common-1.2.6 -jar 在外部 Eclipse 然后构建 fat jar ...这解决了我的问题。

【讨论】:

    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多