如何在 Hive 中访问 HBase table,反之亦然?

How do I access HBase table in Hive & vice-versa?

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

我可以在 HIVE 中公开 HBase table 而不会复制数据 吗?如果是,我该怎么做?另外,如果我 insert/update/delete 我的 HBase 中的数据 table 更新后的数据会毫无问题地出现在 HIVE 中吗?

有时,我们的数据分析团队会创建 table 数据并将其填充到 HIVE 中。我可以将它们暴露给 HBase 吗?如果是,如何?

HBase-Hive 集成:

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

示例:

假设您有一个包含列 idnameemail.

的 hbase table

配置单元的示例外部 table 命令:

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

使用 Apache Phoenix

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

有关详细信息,请参阅这些链接: