如何在Hive&中访问HBase表反之亦然?

时间:2015-05-08 15:07:02

标签: hive hbase sqoop apache-hive

作为开发人员,我通过使用sqoop job从现有MySQL表导入数据为我们的项目创建了HBase表。问题是我们的数据分析师团队熟悉MySQL语法,这意味着他们可以轻松地查询HIVE表。对他们来说,我需要在HIVE中公开HBase表。我不想通过在HIVE中再次填充数据来复制数据。此外,复制数据可能会在将来出现一致性问题。

我可以在HIVE 中公开HBase表而不重复数据吗?如果是,我该怎么办?另外,如果我的HBase表中的insert/update/delete数据更新数据会出现在HIVE中而没有任何问题吗?

有时,我们的数据分析团队会在HIVE中创建表格并填充数据。我可以将它们暴露给HBase吗?如果是,怎么样?

2 个答案:

答案 0 :(得分:6)

HBase-Hive集成:

在HBase表的hive中创建external table,可以查询在Hive中查询的HBase数据,而无需复制数据。您可以只更新或删除HBase表中的数据,也可以在Hive中查看修改后的表。

示例:

考虑您有一个包含idnameemail列的hbase表。

针对配置单元的示例外部表命令:

CREATE EXTERNAL TABLE hivehbasetable(key INT, id INT,  username STRING, password STRING, email STRING) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,id:id,name:username,name:password,email:email") TBLPROPERTIES("hbase.table.name" = "hbasetable");

有关Hive-Hbase集成的更多信息,请查看here

答案 1 :(得分:0)

使用Apache Phoenix

一种快速的解决方案是在HBase表上使用apache phoenix层。 Apache Phoenix是一个接口,该接口允许在Hbase NoSql DB上使用OLTP SQL查询。这没有任何额外的开销,而是使用SQL查询生成HBase中存在的数据视图。

有关更多详细信息,请参阅以下链接: