[ 
https://issues.apache.org/jira/browse/HIVE-10990?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14715152#comment-14715152
 ] 

Nick Dimiduk commented on HIVE-10990:
-------------------------------------

Diff people are posting different stack traces, I see two errors from folks' 
comments:

# {{java.lang.IllegalArgumentException: Family name can not be empty}}
# {{java.lang.NoSuchMethodError: 
org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V}}

The first seems like an invalid DDL. Somehow you're trying to create a table 
without specifying a column family.

The second is a subtle ABI incompatibility around 
{{HTableDescriptor#addFamily}} introduced after HBASE-12046, a change present 
in HBase 1.0+. See [javadoc from 
master|http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/HTableDescriptor.html#addFamily(org.apache.hadoop.hbase.HColumnDescriptor)]
 vs. [javadoc from 0.94 
branch|http://hbase.apache.org/0.94/apidocs/org/apache/hadoop/hbase/HTableDescriptor.html#addFamily(org.apache.hadoop.hbase.HColumnDescriptor)].
 Bottom line is you cannot use a client compiled vs. 0.98 with a runtime using 
1.0+. In this case the difference is only in return type and the [hive 
code|https://github.com/apache/hive/blob/master/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseStorageHandler.java#L214]
 in question is ignoring it. Thus, you just need to recompile hive vs. the 
correct runtime hbase version; no source change required.

To create a binary that supports either version, you'll need to use reflection 
to invoke the {{addFamily}} method. That will fix this one API change, but 
there are probably others lurking.

Let me also point out that HBase has never guaranteed ABI compatibility between 
minor release versions. For the post-1.0 world, we're calling this out 
explicitly in the [compatibility 
promise|http://hbase.apache.org/book.html#hbase.versioning.post10] (see table 
3, "compatibility matrix", there's a row for client binary compatibility). For 
the pre-1.0 releases, we always suggest clients recompile their applications 
vs. the newest hbase version jars after an upgrade.

> Compatibility Hive-1.2 an hbase-1.0.1.1
> ---------------------------------------
>
>                 Key: HIVE-10990
>                 URL: https://issues.apache.org/jira/browse/HIVE-10990
>             Project: Hive
>          Issue Type: Bug
>          Components: Beeline, HBase Handler, HiveServer2
>    Affects Versions: 1.2.0
>            Reporter: gurmukh singh
>            Assignee: Swarnim Kulkarni
>
> Hive external table works fine with Hbase.
> Hive-1.2 and hbase-1.0.1.1, hadoop-2.5.2
> Not able to create a table from hive in hbase.
> 1: jdbc:hive2://edge1.dilithium.com:10000/def> TBLPROPERTIES 
> ("hbase.table.name" = "xyz");
> FAILED: Execution Error, return code 1 from 
> org.apache.hadoop.hive.ql.exec.DDLTask. 
> org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V
> Error: Error while processing statement: FAILED: Execution Error, return code 
> 1 from org.apache.hadoop.hive.ql.exec.DDLTask. 
> org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V
>  (state=08S01,code=1)
> [hdfs@edge1 cluster]$ hive
> 2015-06-12 17:56:49,952 WARN  [main] conf.HiveConf: HiveConf of name 
> hive.metastore.local does not exist
> Logging initialized using configuration in 
> jar:file:/usr/local/cluster/apache-hive-1.2.0-bin/lib/hive-common-1.2.0.jar!/hive-log4j.properties
> SLF4J: Class path contains multiple SLF4J bindings.
> SLF4J: Found binding in 
> [jar:file:/usr/local/cluster/apache-hive-1.2.0-bin/auxlib/slf4j-log4j12-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in 
> [jar:file:/usr/local/cluster/hadoop-2.5.2/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an 
> explanation.
> SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
> hive> CREATE TABLE hbase_table_1(key int, value string)
>     > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
>     > WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
>     > TBLPROPERTIES ("hbase.table.name" = "xyz");
> FAILED: Execution Error, return code 1 from 
> org.apache.hadoop.hive.ql.exec.DDLTask. 
> org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V
> =======================
> scan complete in 1535ms
> 14 driver classes found
> Compliant Version Driver Class
> no        5.1     com.mysql.jdbc.Driver
> no        5.1     com.mysql.jdbc.NonRegisteringDriver
> no        5.1     com.mysql.jdbc.NonRegisteringReplicationDriver
> no        5.1     com.mysql.jdbc.ReplicationDriver
> yes       1.2     org.apache.calcite.avatica.remote.Driver
> yes       1.2     org.apache.calcite.jdbc.Driver
> yes       1.0     org.apache.commons.dbcp.PoolingDriver
> yes       10.11   org.apache.derby.jdbc.AutoloadedDriver
> yes       10.11   org.apache.derby.jdbc.Driver42
> yes       10.11   org.apache.derby.jdbc.EmbeddedDriver
> yes       10.11   org.apache.derby.jdbc.InternalDriver
> no        1.2     org.apache.hive.jdbc.HiveDriver
> yes       1.0     org.datanucleus.store.rdbms.datasource.dbcp.PoolingDriver
> no        5.1     org.gjt.mm.mysql.Driver



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to