Impala 与蜂巢。 Impala 如何绕过 MapReduce?

Impala vs Hive. How Impala circumvents MapReduce?

Impala 如何在查询处理中实现比 Hive 更低的延迟?

我正在浏览 http://impala.apache.org/overview.html,其中指出:

To avoid latency, Impala circumvents MapReduce to directly access the data through a specialized distributed query engine that is very similar to those found in commercial parallel RDBMSs. The result is order-of-magnitude faster performance than Hive, depending on the type of query and configuration.

如何在不使用 MapReduce(如在 Hive 中)的情况下Impala 获取数据?

能不能说Impala更接近HBase,应该和HBase比,而不是和Hive比?

编辑:

或者我们可以说,传统上,Hive 位于 MapReduce 之上,并且确实需要更少的内存来处理,而 Impala 在内存中执行所有操作,因此它需要更多的内存来工作,因为已经有了数据被缓存在内存中并根据请求采取行动?

刚看完Impala Architecture and Components

Impala is a massively parallel processing (MPP) database engine. It consists of different daemon processes that run on specific hosts.... Impala is different from Hive and Pig because it uses its own daemons that are spread across the cluster for queries.

它通过在每个能够接受查询请求的节点上有一个长的 运行 守护进程来绕过 MapReduce 容器。没有像 HiveServer2 那样处理请求的单点故障;所有 impala 引擎都能够立即响应查询请求,而不是排队 MapReduce YARN 容器。

然而,

Impala 确实依赖于 Hive Metastore 服务,因为它只是将存储在 RDBMS 中的元数据映射到 Hadoop 文件系统的有用服务。 Pig、Spark、PrestoDB 和其他查询引擎也共享 Hive Metastore,无需通过 HiveServer 进行通信。

Impala 中没有数据 "already cached"。与 Spark 类似,您必须将数据读入很大一部分内存,以便操作快速。与 Spark 不同,守护进程和状态存储服务保持活动状态以处理后续查询。

Impala可以查询HBase,但是在架构上不太相似,根据我的经验,设计良好的HBase table比Impala查询速度更快。 Impala 可能更接近 Kudu。

另外值得一提的是,不再真正推荐使用 MapReduce Hive。 Tez 要好得多,而且 Hortonworks states Hive LLAP is better than Impala,尽管正如你引用的那样,它在很大程度上 "depends on the type of query and configuration."

Impala使用"Impala Daemon"服务直接从dataNode读取数据(必须和dataNode安装在同一个主机上)。他只缓存文件的位置和内存中的一些统计数据不缓存数据本身。

这就是为什么 impala 无法读取在 table 中创建的新文件。您必须使或刷新(取决于您的情况)告诉 impala 缓存新文件并能够直接读取它们

因为impala在内存中,你需要有足够的内存来存储查询读取的数据,如果你查询将使用比你的内存更多的数据(复杂查询聚合巨大tables), 将 hive 与 spark engine 一起使用而不是默认的 map reduce

set hive.execution.engine=spark; 就在查询

之前

您可以在带有 Spark 引擎的 Hive 中使用相同的查询

impala 是 cloudera 产品,您不会为 hortonworks 和 MapR(或其他)找到它。

例如,cloudera 不包含 Tez。

这完全取决于您使用的平台