系統環境:
Hbase:0.90.3
hive:0.7.0
hive 0.7.0自帶的lib下包含文件“hbase-0.89.0-SNAPSHOT.jar”,我的hbase版本是0.90.3,首先拷貝hbase-0.90.3.jar到hive/lib下,然后刪除“hbase-0.89.0-SNAPSHOT.jar”。
創建hive表、hbase表:
- 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");??
?其中屬性hbase.table.name值"xyz"為hbase的表名,屬性hbase.columns.mapping,"cf1:val"為列族名稱。
在hive 客戶端執行上面語句后,會在hive中生成表"hbase_table_1",在hbase中生成表"xyz"
?
導入測試數據:
- hive>?CREATE?TABLE?pokes?(foo?INT,?bar?STRING);??
- hive>?LOAD?DATA?LOCAL?INPATH?'./examples/files/kv1.txt'?OVERWRITE?INTO?TABLE?pokes;??
- hive>?INSERT?OVERWRITE?TABLE?hbase_table_1?SELECT?*?FROM?pokes;??
- hive>?select?*?from?hbase_table_1;??
?
troubleshooting:
- FAILED:?Error?in?metadata:?MetaException(message:org.apache.hadoop.hbase.MasterNotRunningException:?CNC-JN-R-541:60000??
- ????????at?org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getMaster(HConnectionManager.java:394)??
- ????????at?org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:83)??
- ????????at?org.apache.hadoop.hive.hbase.HBaseStorageHandler.getHBaseAdmin(HBaseStorageHandler.java:74)??
- ????????at?org.apache.hadoop.hive.hbase.HBaseStorageHandler.preCreateTable(HBaseStorageHandler.java:158)??
- ????????at?org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createTable(HiveMetaStoreClient.java:344)??
- ????????at?org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:470)??
- ????????at?org.apache.hadoop.hive.ql.exec.DDLTask.createTable(DDLTask.java:3146)??
- ????????at?org.apache.hadoop.hive.ql.exec.DDLTask.execute(DDLTask.java:213)??
- ????????at?org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:130)??
- ????????at?org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57)??
- ????????at?org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1063)??
- ????????at?org.apache.hadoop.hive.ql.Driver.execute(Driver.java:900)??
- ????????at?org.apache.hadoop.hive.ql.Driver.run(Driver.java:748)??
- ????????at?org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:164)??
- ????????at?org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:241)??
- ????????at?org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:456)??
- ????????at?sun.reflect.NativeMethodAccessorImpl.invoke0(Native?Method)??
- ????????at?sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)??
- ????????at?sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)??
- ????????at?java.lang.reflect.Method.invoke(Method.java:597)??
- ????????at?org.apache.hadoop.util.RunJar.main(RunJar.java:156)??
- )??
?
出現這個錯誤的原因是我引入的hbase包和hive自帶的hive包沖突,刪除hive/lib下的?hbase-0.89.0-SNAPSHOT.jar, OK了。
?
?
?
當使用hive相關管理已經存在的hbase 多列table時,出現上面錯誤,而且列族“department ”的確存在,最終發現原因是:在hive中使用CREATE EXTERNAL TABLE 創建表的時候,"hbase.columns.mapping"的值中不能包含空格
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
