Brief introduction
With the HBase version updated, there are some dependencies that will follow the update, today encountering a dependency on the order of the package reference! The source code below, in the Windows side directly run the error, but in the way of the jar package in the cluster can be run! The error prompt will also be pasted below.
Operating Source:
PackageCom.iie.Hbase_demo;Importorg.apache.hadoop.conf.Configuration;Importorg.apache.hadoop.hbase.HBaseConfiguration;ImportOrg.apache.hadoop.hbase.HColumnDescriptor;ImportOrg.apache.hadoop.hbase.HTableDescriptor;ImportOrg.apache.hadoop.hbase.TableName;Importorg.apache.hadoop.hbase.client.*;Importorg.apache.hadoop.hbase.util.Bytes;Importjava.io.IOException;ImportJava.sql.DriverManager;Import Staticorg.apache.hadoop.hbase.client.ConnectionFactory.createConnection; Public classHbaseput { Public StaticConfiguration config =NULL; Static{config=hbaseconfiguration.create (); Config.set ("Hbase.zookeeper.quorum", "10.199.33.12:2181"); System.out.println ("Successfully connected to ZK"); } /*** CREATE TABLE * *@paramtableName Table name *@paramFamily Column Family*/ Public Static voidcreatetable (String tableName, string[] family) {htabledescriptor table=NewHtabledescriptor (tablename.valueof (TableName)); Try(Connection Connection =connectionfactory.createconnection (config)) { Try(Admin admin =connection.getadmin ()) { for(inti = 0; i < family.length; i++) {table.addfamily (NewHcolumndescriptor (Family[i])); } if(Admin.tableexists (tablename.valueof (TableName))) {System.out.println ("Table exists!!"); System.exit (0); } Else{admin.createtable (table); System.out.println (The Create Table Success!!! Table Name: ["+ TableName +"] "); } } } Catch(IOException e) {e.printstacktrace (); } } //connection to the database Public StaticConnection getconnection ()throwsexception{String URL= "Jdbc:mysql://10.199.33.13:3306/test"; String User= "Root"; String Password= "111111"; Class.forName ("Com.mysql.jdbc.Driver"); Connection Conn=(Connection) drivermanager.getconnection (URL, user, password); returnConn; } /*** Add Data * *@paramRowKey RowKey *@paramtableName Table name *@paramColumn Name *@paramValue Values*/ Public Static voidaddData (String RowKey, String tableName, string[] column, string[] value) {Try(Connection Connection =createconnection (config); Table Table=connection.gettable (tablename.valueof (TableName))) {Put put=NewPut (Bytes.tobytes (RowKey));//converted to a byte array when stored in HBasehcolumndescriptor[] Columnfamilies =table.gettabledescriptor (). Getcolumnfamilies (); for(inti = 0; i < columnfamilies.length; i++) {String familyname=columnfamilies[i].getnameasstring (); if(Familyname.equals ("UserInfo")) { for(intj = 0; J < Column.length; J + +) {Put.addcolumn (Bytes.tobytes (familyname), Bytes.tobytes (Column[j]), Bytes.tobytes (Value[j])) ; }} table.put (Put); System.out.println ("ADD Data Success!!! -"); } } Catch(IOException e) {e.printstacktrace (); } } Public Static voidMain (string[] args)throwsIOException {string[] family= {"UserInfo"}; Hbaseput.createtable ("ZXF", family); string[] Column= {"Name", "Age", "email", "phone"}; String[] Value={"Zengxuefeng", "$", "[email protected]", "18463101815"}; Hbaseput.adddata ("User", "ZXF", Column,value); }}
Error message:
successfully connected ZKjava.io.IOException:java.lang.reflect.InvocationTargetException at Org.apache.hadoop.hbase.client.ConnectionFactory.createConnection (Connectionfactory.java:240) at Org.apache.hadoop.hbase.client.ConnectionFactory.createConnection (Connectionfactory.java:218) at Org.apache.hadoop.hbase.client.ConnectionFactory.createConnection (Connectionfactory.java:119) at Com.iie.Hbase_demo. Hbaseput.createtable (Hbaseput.java:35) at Com.iie.Hbase_demo. Hbaseput.main (Hbaseput.java:94) caused by:java.lang.reflect.InvocationTargetException at Sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method) at Sun.reflect.NativeConstructorAccessorImpl.newInstance (Nativeconstructoraccessorimpl.java:62) at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance (Delegatingconstructoraccessorimpl.java:45) at Java.lang.reflect.Constructor.newInstance (Constructor.java:422) at Org.apache.hadoop.hbase.client.ConnectionFactory.createConnection (Connectionfactory.java:238) ... 4morecaused By:java.lang.VerifyError:classOrg.apache.hadoop.hbase.protobuf.generated.clientprotos$result OverridesFinalMethod Getunknownfields. () lcom/google/protobuf/Unknownfieldset; At Java.lang.ClassLoader.defineClass1 (Native Method) at Java.lang.ClassLoader.defineClass (Classloader.java:760) at Java.security.SecureClassLoader.defineClass (Secureclassloader.java:142) at Java.net.URLClassLoader.defineClass (URLClassLoader.java:467) at java.net.urlclassloader.access$(urlclassloader.java:73) at java.net.urlclassloader$1.run (urlclassloader.java:368) at java.net.urlclassloader$1.run (urlclassloader.java:362) at java.security.AccessController.doPrivileged (Native Method) at Java.net.URLClassLoader.findClass (Urlclasslo Ader.java:361) at Java.lang.ClassLoader.loadClass (Classloader.java:424) at Sun.misc.launcher$appclassloader.loadclass (Launcher.java:331) at Java.lang.ClassLoader.loadClass (Classloader.java:357) at Org.apache.hadoop.hbase.protobuf.ProtobufUtil.<clinit> (protobufutil.java:210) at Org.apache.hadoop.hbase.ClusterId.parseFrom (Clusterid.java:64) at Org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode (Zkclusterid.java:75) at Org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId (Zookeeperregistry.java:105) at Org.apache.hadoop.hbase.client.connectionmanager$hconnectionimplementation.retrieveclusterid ( Connectionmanager.java:919) at org.apache.hadoop.hbase.client.connectionmanager$hconnectionimplementation.<init> (connectionmanager.java:657) ... 9Morejava.io.IOException:java.lang.reflect.InvocationTargetException at Org.apache.hadoop.hbase.client.ConnectionFactory.createConnection (Connectionfactory.java:240) at Org.apache.hadoop.hbase.client.ConnectionFactory.createConnection (Connectionfactory.java:218) at Org.apache.hadoop.hbase.client.ConnectionFactory.createConnection (Connectionfactory.java:119) at Com.iie.Hbase_demo. Hbaseput.adddata (Hbaseput.java:73) at Com.iie.Hbase_demo. Hbaseput.main (Hbaseput.java:97) caused by:java.lang.reflect.InvocationTargetException at Sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method) at Sun.reflect.NativeConstructorAccessorImpl.newInstance (Nativeconstructoraccessorimpl.java:62) at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance (Delegatingconstructoraccessorimpl.java:45) at Java.lang.reflect.Constructor.newInstance (Constructor.java:422) at Org.apache.hadoop.hbase.client.ConnectionFactory.createConnection (Connectionfactory.java:238) ... 4morecaused by:java.lang.NoClassDefFoundError:Could not initializeclassOrg.apache.hadoop.hbase.protobuf.ProtobufUtil at Org.apache.hadoop.hbase.ClusterId.parseFrom (Clusterid.java: 64) at Org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode (Zkclusterid.java:75) at Org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId (Zookeeperregistry.java:105) at Org.apache.hadoop.hbase.client.connectionmanager$hconnectionimplementation.retrieveclusterid ( Connectionmanager.java:919) at org.apache.hadoop.hbase.client.connectionmanager$hconnectionimplementation.<init> (connectionmanager.java:657) ... 9Moreprocess finished with exit code0
Workaround:
The cause of this error is: PROTOBUF This JAR package reference order problem, he referred to hive, after the final definition of hive no longer allow hbase reference caused, this error has been looking for a long time!
Change the order of the above two references in the Pom file. As shown below:
And then run the program is the perfect solution to this problem!!!
Hope to be of help to everyone.
Problems encountered by HBase's Java API and how to resolve them