【问题标题】:Hive - Hbase integration Transactional update with timestampHive - Hbase 集成带有时间戳的事务更新
【发布时间】: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..等)请帮助。

【问题讨论】:

    标签: hadoop hbase hiveql


    【解决方案1】:

    时间戳是 Hbase 版本控制中的重要元素之一。您正在尝试创建自己的时间戳,该时间戳在 Hbase 级别上运行良好。 一点,是你应该非常小心,具有唯一性和非负性。您可以查看 HBase-Definitve 指南中的自定义版本控制。

    现在您在 Hbase 之上有了 Hive。根据文档,

    there is currently no way to access the HBase timestamp attribute, and queries always access data with the latest timestamp.
    

    那是阅读部分。至于放数据,你可以看here。 它仍然说,您必须提供有效的时间戳,而不是任何其他值。

    预计未来版本将公开时间戳属性。 我希望您对如何处理 Hive-Hbase 集成中的自定义时间戳有更好的了解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      相关资源
      最近更新 更多