我在HBase
中有一个表格,我希望在EXTERNAL TABLE
hive
到目前为止,我一直在使用:
CREATE EXTERNAL TABLE events(key STRING, day INT, source STRING, ip STRING)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,c:date#b,c:source,c:ipAddress")
TBLPROPERTIES ("hbase.table.name" = "eventTable");
但是我的查询器在我的映射器中没有正确平衡,所以我试图在ip地址上进行分区:
CREATE EXTERNAL TABLE events(key STRING, source STRING)
PARTITIONED BY (ip STRING)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,c:date#b,c:source,c:ipAddress")
TBLPROPERTIES ("hbase.table.name" = "eventTable");
但是我收到有关不正确的列映射的错误:
FAILED: Error in metadata: java.lang.RuntimeException:
MetaException(message:org.apache.hadoop.hive.serde2.SerDeException
org.apache.hadoop.hive.hbase.HBaseSerDe: columns has 2 elements while hbase.columns.mapping has 3 elements (counting the key if implicit))
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
我一直在四处寻找,但我找不到任何指示如何在hbase列和hive分区列之间进行映射的文档
答案 0 :(得分:1)
我认为您无法轻松地对外部表进行分区,尤其是当底层存储是HBase时。
Hive分区策略的构建方式是来自特定分区的数据存储在单独的文件夹(“或任何其他存储”)中。由于使用HBase进行分区(如果存在)将需要使用更多表或使用HBase版本。
我认为这篇文章可以让您更好地理解分区http://blog.zhengdong.me/2012/02/22/hive-external-table-with-partitions
在这个地方https://cwiki.apache.org/Hive/hbaseintegration.html,您可以发现HBase中的分区留待将来使用。
如果您想要分区,我建议您将数据从HBase / Hive加载到HDFS / Hive表,但这也取决于您的使用情况。
此致 恐龙