2015-07-10 47 views
0

我使用Hive 0.14和Hbase 0.98.8 我想使用HiveQL訪問HBase「表」。HiveQL到HBase

我創建了一個表,一個複雜的複合rowkey:

CREATE EXTERNAL TABLE db.hive_hbase (rowkey struct<p1:string, p2:string, p3:string>, column1 string, column2 string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
COLLECTION ITEMS TERMINATED BY ';' 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
WITH SERDEPROPERTIES ("hbase.columns.mapping" = 
":key,cf:c1,cf:c2") 
TBLPROPERTIES("hbase.table.name"="hbase_table"); 

表是越來越成功創建,但HiveQL永遠走:

SELECT * from db.hive_hbase WHERE rowkey.p1 = 'xyz'; 

查詢,而無需使用rowkey的罰款和還使用帶過濾器的hbase shell正在工作。 我在日誌中找不到任何東西,但我認爲複雜的組合鍵和性能可能存在問題。

有沒有人面臨同樣的問題?提示解決它?其他想法,我可以嘗試什麼?

謝謝

更新15年7月16日: 我改變了log4j屬性爲 'DEBUG',發現了一些有趣的信息:

它說:

2015-07-15 15:56:41,232 INFO ppd.OpProcFactory (OpProcFactory.java:logExpr(823)) - Pushdown Predicates of FIL For Alias : hive_hbase 
2015-07-15 15:56:41,232 INFO ppd.OpProcFactory (OpProcFactory.java:logExpr(826)) -  (rowkey.p1 = 'xyz') 

但有些線路後:

2015-07-15 15:56:41,430 DEBUG ppd.OpProcFactory (OpProcFactory.java:pushFilterToStorageHandler(1051)) - No pushdown possible for predicate: (rowkey.p1 = 'xyz') 

所以我的猜測是:HiveQL over HBase不會在Hbase中執行任何謂詞下推,而是啓動MapReduce作業。

有沒有謂詞下推錯誤?

+0

我添加了一些新的信息:可能有一個錯誤與謂詞下推(也許在線的大型數據集?!) – meecrob

回答

0

我試過類似的情況使用Hive 0.13,它工作正常。我得到了結果。你正在研究什麼版本的蜂巢?

+0

我正在使用Hive 0.14。 它適用於小數據集,但它需要永遠持續使用。 1.000.000條記錄。 如果我直接在HBase中聲明,大約需要1秒。 – meecrob