【发布时间】:2015-07-29 11:35:54
【问题描述】:
我是 hadoop 和大数据的新手,最近只是想弄清楚将我的数据存储移动到 hbase 的可能性,我遇到了一个问题,你们中的一些人可能会帮助我。就像这样,
我有一个 hbase 表 "hbase_testTable" 列族:"ColFam1"。我已将 "ColFam1" 的版本设置为 10,因为我必须将历史记录保持到此列族的 10 次更新。哪个工作正常。当我尝试通过具有显式时间戳值的 hbase shell 添加新行时,它可以正常工作。基本上我想使用时间戳作为我的版本控制。所以我将时间戳指定为
put 'hbase_testTable' '1001','ColFam1:q1', '1000$', 3
'3' 是我的版本。一切正常。
现在我正在尝试与 HIVE 外部表集成,并且我已将所有映射设置为与 hbase 表匹配,如下所示:
create external table testtable (id string, q1 string, q2 string, q3 string)
STOREd BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH
SERDEPROPERTIES ("hbase.columns.mapping" = ":key,colfam1:q1, colfam1:q2, colfam1:q3")
TBLPROPERTIES("hbase.table.name" = "testtable", "transactional" = "true");
正常插入也能正常工作。它更新 HBase 表,反之亦然。
即使外部表设置为“事务性”,我也无法更新 HIVE 上的数据。它给了我一个错误:
FAILED: SemanticException [Error 10294]: Attempt to do update or delete
using transaction manager that does not support these operations
也就是说,对 hbase 表所做的任何更新都会立即反映在 hive 表上。
我可以通过尝试将带有新数据的列的“rowid”插入配置单元外部表来使用配置单元外部表更新 Hbase 表。
是否可以控制写入引用的 hbase 表的时间戳(如 4、5、6、7..等)请帮助。
【问题讨论】: