首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与hive相比,impala如何提供更快的查询响应

问与hive相比,impala如何提供更快的查询响应
EN

Stack Overflow用户
提问于 2013-05-26 10:07:44
回答 5查看 35.1K关注 0票数 57

我最近开始研究使用Hive和Impala查询HDFS上的大量CSV数据。正如我所期望的那样,与Hive相比,我使用Impala获得了更好的响应时间,对于我到目前为止使用的查询。

我想知道是否有一些类型的查询/用例仍然需要Hive,而Impala不太适合。

与Hive相比,Impala如何为HDFS上的相同数据提供更快的查询响应?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-05-26 10:32:12

您应该将Impala看作是“HDFS上的SQL”,而Hive更像是“Hadoop上的SQL”。

换句话说,Impala甚至根本不使用Hadoop。它只是让守护进程在所有节点上运行,这些守护进程缓存HDFS中的一些数据,因此这些守护进程可以快速返回数据,而不必执行整个Map/Reduce作业。

这样做的原因是在运行Map/Reduce作业时会涉及到一定的开销,因此通过同时短路Map/Reduce,您可以在运行时获得一些相当大的收益。

也就是说,Impala不会取代Hive,它适用于非常不同的用例。与Hive相比,Impala不提供容错能力,所以如果在查询过程中出现问题,那么它就会消失。当然,对于ETL类型的作业,我会推荐Hive,但Impala对于小型即席查询来说可能非常棒,例如对于只想查看和分析一些数据而不想构建可靠作业的数据科学家或业务分析师。同样从我个人的经验来看,Impala仍然不是很成熟,当数据量超过可用内存时,我有时会看到一些崩溃。

票数 105
EN

Stack Overflow用户

发布于 2013-05-27 04:41:21

IMHO、HDFS上的SQL和Hadoop上的SQL是相同的。毕竟,Hadoop是HDFS(也是MapReduce)。因此,当我们说在HDFS上使用SQL时,可以理解为在Hadoop上使用SQL (可以使用或不使用MapReduce)。

回到实际问题,Impala提供了更快的响应,因为它使用MPP(大规模并行处理),而不像Hive在引擎盖下使用MapReduce,这涉及一些初始管理费用(如Charles sir所指定的)。大规模并行处理是一种使用多个独立的CPU并行运行来执行单个程序的计算类型,其中每个CPU都有自己的专用内存。事实上,Impala是基于MPP的,不涉及MapReduce作业的管理费用。作业设置和创建,插槽分配,分割创建,地图生成等,使其速度惊人。

但这并不意味着Impala就是你所有问题的解决方案。由于高度内存密集型(MPP),它不适合需要大量数据操作的任务,如连接等,因为您无法将所有内容都放入内存中。这就是Hive更适合的地方。

因此,如果您需要实时,可以使用Impala对您的数据子集进行即席查询。如果您的大数据需要进行批处理,请使用Hive。

HTH

票数 31
EN

Stack Overflow用户

发布于 2013-09-28 03:34:06

在impala中有一些关键的特性使得它的速度很快。

  1. 它不使用map/reduce,这对于在单独的jvm中派生是非常昂贵的。它运行单独的Impala守护进程,该守护进程拆分查询并并行运行它们,最后合并结果集。
  2. 它的大部分操作都是在内存中完成的。
  3. 它使用hdfs进行存储,对于大文件来说速度很快。它尽可能多地缓存从查询到结果到数据的所有内容。
  4. 它支持像拼图这样的新文件格式,这是一种柱状文件格式。因此,如果使用这种格式,对于大多数时候只访问几列的查询,速度会更快。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16755599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档