作为开发人员,我通过使用sqoop job
从现有MySQL表导入数据为我们的项目创建了HBase表。问题是我们的数据分析师团队熟悉MySQL语法,这意味着他们可以轻松地查询HIVE
表。对他们来说,我需要在HIVE中公开HBase表。我不想通过在HIVE中再次填充数据来复制数据。此外,复制数据可能会在将来出现一致性问题。
我可以在HIVE 中公开HBase表而不重复数据吗?如果是,我该怎么办?另外,如果我的HBase表中的insert/update/delete
数据更新数据会出现在HIVE中而没有任何问题吗?
有时,我们的数据分析团队会在HIVE中创建表格并填充数据。我可以将它们暴露给HBase吗?如果是,怎么样?
答案 0 :(得分:6)
HBase-Hive集成:
在HBase表的hive中创建external table
,可以查询在Hive中查询的HBase数据,而无需复制数据。您可以只更新或删除HBase表中的数据,也可以在Hive中查看修改后的表。
示例:强>
考虑您有一个包含id
,name
和email
列的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中存在的数据视图。
有关更多详细信息,请参阅以下链接: