使用 Impala 访问 Hbase 表时所有 SQL 操作都可以工作吗?

Posted

技术标签:

【中文标题】使用 Impala 访问 Hbase 表时所有 SQL 操作都可以工作吗?【英文标题】:Will all SQL operation work while accessing Hbase tables using Impala? 【发布时间】:2016-06-30 14:34:30 【问题描述】:

HBase 不允许对其表进行连接操作。为了克服这个问题,我计划创建 HBase 表并通过 Impala 访问它。

Impala 允许所有连接以及 group by 和其他 SQL 操作。我有几个相关的问题 -

    有人测试过这种方法吗?

    所有可用的 SQL 操作是否都能正常工作 impala 与 Hive 一起使用?

我尝试在 cloudera 的文档中找到答案,但没有明确的答案。

【问题讨论】:

感谢您的回复,但我的问题与带有 HBase 的 Impala 而不是 Hive 相关。 在第一季度的回答中,我在谈论 impla 与 hive 的 Hbase 外部表。通过 spark 流,我们首先将数据摄取到 Hbase,并在此基础上创建了外部表。我们已经在此基础上进行了临时查询。这不是你要找的吗?图表中的第一点还指出“Impala 供程序员在 hdfs(即内部表)和 hbase(即外部表)上运行查询” 感谢@RamPrasadG,感谢您的努力。 【参考方案1】:

“明确答案”一词取决于您要寻找的参数...

Q1:有人测试过这种方法吗?

是的,Impala 的这种方法 - hbase 外部表是可能的,因为我们对即席查询也是如此。但是,我们的系统尚未进行产品电离。 一件事是在我们的数据摄取步骤通过 spark steaming 之后,我们正在使用 Impala(Hbase 外部表)来查询(使用您提到的连接和分组依据)原始数据(即临时查询,在进行任何处理之前......)。由于我们使用的是 cloudera,我们的选择很明显,即 impala 可以更快地响应。 之前我们曾经对 Hive(Hbase 外部表)做同样的事情。

注意(外部表上下文中的附加信息):

Impala 不会取代 Hive,它适用于非常不同的用例。与 Hive 相比,Impala 不提供容错功能,因此如果您的查询过程中出现问题,那么问题就消失了。用户必须重新发出查询。 对于 FT 至关重要的 ETL 工作,hive 非常适合。

Impala 比 Apache Hive 更快,但这并不意味着它是所有大数据问题的一站式 SQL 解决方案。 Impala 是内存密集型的,并且不能有效地运行像连接这样的繁重数据操作,因为不可能将所有内容都推送到内存中。这是 Hive 来救援的时候。如果应用程序对大数据有批处理需求,那么组织必须选择 Hive。如果他们需要对数据子集的即席查询进行实时处理,那么 Impala 是更好的选择。

Q2 : 所有可用的 SQL 操作是否都能正常工作 impala 与 Hive 一起使用?

Impala 的 Hbase 外部表或 Impala SQL 的内部表都不会改变。 Impala (SQL syntax follows the SQL-92 standard) and Hive share the same metastore database and their tables are often used interchangeably.

Please see the below differences as described by this.

请参阅下图以获取来自此article 的更多信息,因为我不应该在 SO 中使用纯链接,我使用已发布文章中的图表以便更好地理解。

【讨论】:

以上是关于使用 Impala 访问 Hbase 表时所有 SQL 操作都可以工作吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Impala 不能在 hbase 表上工作?

使用 Impala 查询加盐的 Hbase 行键

Impala/hbase 与浮点数据的矛盾

如何从 hive 或 impala 读取 Hbase 当前和以前版本的数据?

使用 Impala 在 Bash 数组中获取 HBase 列

“order by”的 Hive、Impala、HBASE 和 SQL 比较