2

我们正在尝试通过 Impala 连接器将 MS 9.4 连接到 HBase。

首先,我们使用以下创建表(如我们在文档中看到的)创建了将它们与 HBase 表相似的配置单元表:

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 数据源)、主机和端口(均用于 Impala 安装在我们的 AWS 基础设施中)和 impala/impala 用于凭证。

问题是当我们完成向导并选择默认命名空间(这是唯一可用的。没有创建任何其他 ns)时,我们可以看到我们之前创建的 hive 表,而不是 hbase 表。

我是说:

hiveTableName1
hiveTableName2

代替

hbaseTableName1
hbaseTableName2

而且,由于这些是唯一可用的表,我们只能使用这两个表执行我们的报告:通过一个字段将这两个表连接起来非常简单。两个表都有 200.000 条记录,连接需要 1 分钟以上才能完成。我确信我们在这里遗漏了一些东西,将 hive 表链接到 hbase 表的过程并不完全正确。有没有办法能够连接到这两个 hbase 表而不是 hive 表?任何帮助将不胜感激。

4

1 回答 1

0

1、HBase不支持SQL,反正也不支持“join”的概念。

2.在 HBase 表上映射 Hive 表意味着每个 Hive 查询都会在 HBase 端触发一次完整扫描,然后将结果馈送到执行过滤器和连接的 MapReduce 批处理作业。

底线:1 分钟对于您正在做的事情来说非常快。

如果您期望亚秒级的结果,请尝试一些“小数据”技术(例如 MySQL、Oracle,甚至 MS Access)或忘记连接。对于亚分钟结果,您可以尝试 Apache Phoenix:它是一个带有索引和某种 SQL 的 HBase 包装器。虽然不确定 ODBC/JDBC 驱动程序。

于 2015-08-21T11:10:42.123 回答