Hive 表中的 HBase 快照
Posted
技术标签:
【中文标题】Hive 表中的 HBase 快照【英文标题】:HBase Snapshot in Hive table 【发布时间】:2015-08-13 14:02:12 【问题描述】:我已经创建了一个 hbase 表
create 'user_data_table','personal_data','professional_data';
然后我在表中插入了几条记录
put 'user_data_table','user1','personal_data:Location','IL'
put 'user_data_table','user1','personal_data:FName','Deb'
put 'user_data_table','user1','personal_data:LName','D'
put 'user_data_table','user1','professional_data:dept','IT'
put 'user_data_table','user1','professional_data:salary','2000'
put 'user_data_table','user2','personal_data:FName','CH'
put 'user_data_table','user2','personal_data:LName','AK'
put 'user_data_table','user2','professional_data:dept','IT'
put 'user_data_table','user2','professional_data:salary','80000'
我创建了一个快照为snapshot 'user_data_table', 'snapshot-day-1'
然后我插入/更新了如下记录。
put 'user_data_table','user1','personal_data:Location','VA'
put 'user_data_table','user1','professional_data:salary','3000'
当我尝试在我的配置单元表中引用快照时,我没有得到旧数据。相反,我每次都得到最新的数据。知道为什么它会这样。使用 hbase 快照引用创建 hive 表的命令如下。
CREATE EXTERNAL TABLE if not exists hbase_user_data_snapshot1_table(key string, Location string,FName string,LName string, dept string,salary string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,personal_data:Location,personal_data:FName,personal_data:LName,professional_data:dept,professional_data:salary",
"hive.hbase.snapshot.name"="snapshot-day-1")
TBLPROPERTIES ("hbase.table.name" = "user_data_table");
【问题讨论】:
【参考方案1】:快照意味着 (1) 不会从现有 HFile 中删除任何信息,并且 (2) 这些 HFile 在创建快照时的内容可以按需重建(隐藏任何有已附加)
但是HIVE-6584 声明...
绕过在线区域服务器 API 提供了不错的性能 提升全扫描
...所以也许他们选择“绕过”时间点恢复部分,只是将快照用作直接访问 HFile 的后门。包括自快照创建以来附加的任何内容。也许吧。
【讨论】:
那么在这种情况下,它类似于表中当前存在的内容。有什么地方可以全面了解这一点吗?我搜索了很多,但没有得到任何信息。 当我尝试从快照中恢复表时,它已恢复并且旧数据被还原,但是当我尝试在 hive 表中引用快照时,我没有得到旧数据。 【参考方案2】:DDL 错误。正确的做法如下。
CREATE EXTERNAL TABLE if not exists hbase_user_data_snapshot2_table(key string, Location string,FName string,LName string, dept string,salary string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,personal_data:Location,personal_data:FName,personal_data:LName,professional_data:dept,professional_data:salary")
TBLPROPERTIES ("hive.hbase.snapshot.name"="snapshot-day-2");
注意 TBLPROPERTIES。我们不引用表,而是引用快照名称。
【讨论】:
【参考方案3】:您需要在这样选择之前设置 Hive 变量
CREATE EXTERNAL TABLE if not exists hbase_user_data_snapshot2_table(key string, Location string,FName string,LName string, dept string,salary string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,personal_data:Location,personal_data:FName,personal_data:LName,professional_data:dept,professional_data:salary")
TBLPROPERTIES ("hive.hbase.table.name"="xxx");
-- a table may be have many snapshot,so we configure it before select,
-- that is make sense
-- and if you snapshot file is store in a special path, please use
-- SET hive.hbase.snapshot.restoredir= xxxx; to configure
SET hive.hbase.snapshot.name=snapshot-day-2;
select * from hbase_user_data_snapshot2_table;
【讨论】:
以上是关于Hive 表中的 HBase 快照的主要内容,如果未能解决你的问题,请参考以下文章