微观策略 - HBase 连接
Posted
技术标签:
【中文标题】微观策略 - HBase 连接【英文标题】:Microstrategy - HBase connection 【发布时间】:2015-08-21 07:31:17 【问题描述】:我们正在尝试通过 Impala 连接器将 MS 9.4 连接到 HBase。
首先,我们使用以下创建表(如我们在文档中看到的)创建了将它们与 HBase 表相似的 hive 表:
CREATE TABLE hiveTableName1
(key int, columnName1 codClient, columnName2 clientName)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,columnfamily1:columnName1,columnfamily1:columnName2")
TBLPROPERTIES ("hbase.table.name" = "hbaseTableName1");
我们这样做了两次,因为我们想要创建两个 hive 表及其对应的 hbase 表,以便稍后使用 MS 在它们之间执行连接。
对于 MS 与 HBase 之间的连接,我们按照步骤选择 MicroStrategy ODBC Driver for Impala Wire Protocol,并填写数据源名称(之前使用 Impala 驱动程序创建的 Impala 数据源)、主机和端口(两者都是用于在我们的 AWS 基础设施中安装 Impala)和 impala/impala 用于凭证。
问题是当我们完成向导并选择默认命名空间(这是唯一可用的。没有创建任何其他 ns)时,我们可以看到我们之前创建的 hive 表,而不是 hbase表格。
我的意思是:
hiveTableName1
hiveTableName2
而不是
hbaseTableName1
hbaseTableName2
而且,由于这些是唯一可用的表,因此我们只能使用这两个表执行我们的报告:通过一个字段将这两个表连接起来非常简单。 两个表都有 200.000 条记录,连接需要 1 分钟以上才能完成。 我确信我们在这里遗漏了一些东西,将 hive 表链接到 hbase 表的过程并不完全正确。 有没有办法能够连接到这两个 hbase 表而不是 hive 表? 任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:1. HBase不支持SQL,反正也不支持“join”的概念。
2. 在 HBase 表上映射 Hive 表意味着每个 Hive 查询都会在 HBase 端触发一次完整扫描,然后将结果提供给 MapReduce 批处理作业,该作业执行过滤器和连接。
底线:1 分钟对你正在做的事情来说是相当快的。
如果您期望亚秒级的结果,请尝试一些“小数据”技术(例如 mysql、Oracle 甚至 MS Access)或忘记连接。 对于亚分钟结果,您可以尝试 Apache Phoenix:它是一个带有索引和某种 SQL 的 HBase 包装器。不过不确定 ODBC/JDBC 驱动程序。
【讨论】:
非常感谢您的快速回答,Samson。由于对于 MS - HBase 连接我们不得不使用 MS Impala 连接器,并且 Impala 提供了 sql 连接功能,我们认为两个表之间的连接是一个很好的性能测试。假设这个 Impala 连接以某种方式被“翻译”以在 hbase 上执行必要的查询,不是吗? 无论如何,根据您的第二点,我认为将 Hive 表映射到 HBase 以使用 MS Impala 连接器对于低延迟数据库访问似乎不是一个好主意。这就是为什么我在这里看不到使用 hbase 的意义(因为我们仍然必须通过 hive,在使用 MS 的列表中)Phoenix 是另一个选择。但是MS 10 版本才提供Phoenix 连接器,所以我们应该升级。我认为这可能是一个更好的选择。尽管使用 Oracle 或 Mongo 等任何其他数据库似乎不是一个坏主意。 Impala 声称它“比 Hive 更快”(愤世嫉俗者补充说:“什么不是?”)但这是使用自己的查询处理器和自己的存储引擎。链接 Hive 和 HBase 意味着最薄弱的环节等。 未来,也许 Presto 将成为您的选择。 Teradata 开始支持它,包括开源核心(由 Facebook 提供)和一些未来的付费扩展。以上是关于微观策略 - HBase 连接的主要内容,如果未能解决你的问题,请参考以下文章