2017-08-14 101 views
1

这是我的Java HBase的CREATETABLE以下程序: -错误运行HBase的java程序

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程序的(表0.0.1-SNAPSHOT.jar)当我运行命令 后Hadoop的罐子表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 ?? 
+0

我只是在另一个问题上回答了[这里] [1] - https://stackoverflow.com/questions/10980072/hbase-classnotfoundexception/45676822#45676822 – Kamal

回答

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> 

加入这一块,然后运行它。

+0

我是否需要添加hbase版本(0.90.2) ,其添加hbase jar后仍然显示相同的错误 –

+0

添加版本请 – Satya

+0

我的hbase版本是1.2.6添加依赖项后 - >缺少神器org.apache.hbase:hbase:jar:1.2.6在pom.xml中添加 –

1

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

两个点,使其工作

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

2)在命令行 - 执行命令之前:

出口HADOOP_CLASSPATH =您的-JAR路径

出口HADOOP_CLASSPATH = $ HADOOP_CLASSPATH:hbase classpath

这增加了对HBase的图书馆执行。你在maven/netbeans中添加的是用于编译的。

+0

请解释步骤2做了什么以及为什么需要 – quinz

+0

步骤2添加hbase库以供执行。你在maven/netbeans中添加的是用于编译的。该hbase类路径应该在引号中执行。不能在这里添加它们.. – Kamal

+0

好的..我认为问题是在hadoop env.sh中的HADOOP_CLASSPATH ..我必须在导出HADOOP_CLASSPATH中设置? –

0

我解决了这个问题,因为在制作fat jar时出现问题,并且在新的hbase版本jars被许多依赖关系弃用。所以我还添加了hbase-client-1.2.6-jar和hbase-common-1.2。 6罐外日蚀,然后建立脂肪罐......这解决了我的问题。