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

Hadoop 与hive相比,impala如何提供更快的查询响应,hadoop,hive,impala,Hadoop,Hive,Impala,我最近开始研究使用Hive和Impala查询HDF上的大型CSV数据集。正如我所期望的,对于我目前使用的查询,与Hive相比,使用Impala可以获得更好的响应时间 我想知道是否有一些类型的查询/用例仍然需要配置单元,而黑斑羚并不适合 对于HDFS上的相同数据,与Hive相比,Impala如何提供更快的查询响应?您应该将Impala视为“HDFS上的SQL”,而Hive更像是“Hadoop上的SQL” 换句话说,黑斑羚甚至根本不使用Hadoop。它只是在所有节点上运行守护进程,这些节点缓存HDF

我最近开始研究使用Hive和Impala查询HDF上的大型CSV数据集。正如我所期望的,对于我目前使用的查询,与Hive相比,使用Impala可以获得更好的响应时间

我想知道是否有一些类型的查询/用例仍然需要配置单元,而黑斑羚并不适合

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

您应该将Impala视为“HDFS上的SQL”,而Hive更像是“Hadoop上的SQL”

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

这样做的原因是,运行Map/Reduce作业需要一定的开销,因此通过将Map/Reduce一起短路,您可以在运行时获得相当大的收益


这就是说,黑斑羚不会取代蜂巢,它适用于非常不同的用例。与Hive相比,Impala不提供容错性,所以如果在查询过程中出现问题,那么它就消失了。对于ETL类型的工作,如果一项工作失败的成本会很高,我建议使用Hive,但对于小型即席查询,例如对于只想查看和分析一些数据而不构建健壮工作的数据科学家或业务分析师来说,Impala是非常棒的。同样从我个人的经验来看,黑斑羚还不是很成熟,有时当数据量大于可用内存时,我会看到一些崩溃。

IMHO,HDFS上的SQL和Hadoop上的SQL是一样的。毕竟Hadoop是HDFS(还有MapReduce)。所以,当我们说HDFS上的SQL时,可以理解它是Hadoop上的SQL(可以有MapReduce,也可以没有MapReduce)

回到实际问题上来,黑斑羚提供更快的响应,因为它使用了
MPP
(大规模并行处理),而Hive在引擎盖下使用MapReduce,这涉及到一些初始开销(如Charles sir所述)。大规模并行处理(Massively parallel processing,Massively parallel processing,Massively parallel processing,Massively parallel processing,Massively parallel processing,Massively parallel processing,Massively parallel processing,Massively parallel processing)是一。事实上,Impala基于MPP,不涉及MapReduce作业的开销,即。作业设置和创建、插槽分配、分割创建、地图生成等,使其速度极快

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

因此,如果您需要实时,可以使用Impala对数据子集进行特别查询。如果你对大数据有批量处理的需求,那就去Hive吧


HTH

黑斑羚有一些关键特性使其速度更快

  • 它不使用map/reduce,这是非常昂贵的 单独的JVM。它运行单独的Impala守护进程来分割查询 并并行运行它们,最后合并结果集

  • 它在内存中执行大部分操作

  • 它使用hdfs作为其存储,这对于大型文件来说是快速的。信息技术 尽可能多地缓存查询、结果和数据

  • 它支持新的文件格式,如parquet,它是柱状文件 格式。因此,如果您使用这种格式,在以下情况下进行查询会更快: 您只能访问少数列 大多数时候


  • Impala不会取代MapReduce或将MapReduce用作处理引擎。让我们先了解一下Impala和Hive之间的关键区别

  • Impala执行内存内查询处理,而Hive不执行
  • Hive使用MapReduce处理查询,而Impala使用自己的处理引擎
  • 可以使用用户定义函数(UDF)或编写自定义序列化器/反序列化器(SERDE)来扩展配置单元; 然而,黑斑羚目前不支持Hive那样的可扩展性
  • 黑斑羚依靠蜂巢运行,而蜂巢不依赖于任何其他应用程序,只需要 核心Hadoop平台(HDFS和MapReduce)
  • Impala查询是HiveQL的子集,这意味着几乎每个Impala查询(有一些限制) 可以在蜂箱里跑。但反之亦然,因为配置单元中支持的某些HiveQL功能不可用 由黑斑羚支持
  • 为什么黑斑羚在查询处理方面比蜂巢更快?以下是一些要点

  • 在处理类似SQL的查询时,Impala不会在磁盘上写入中间结果(如在Hive MapReduce中);相反 完整的SQL处理在内存中完成这使得处理速度更快

  • 与MapReduce相比,使用Impala时,查询会立即开始执行,这可能需要花费大量时间 开始处理较大的SQL查询所需的时间,这会增加更多的处理时间

  • Impala查询计划器使用智能算法在并行节点的多个阶段执行查询,以 更快地提供结果,避免排序和洗牌步骤,这在大多数情况下可能是不必要的

  • Impala拥有HDFS中每个数据块的相关信息,因此在处理查询时,它会利用这些信息在所有数据节点中更均匀地分布查询

  • 存在在每个数据节点上运行的Impala守护进程。它们负责处理查询。提交查询时,impalad(Impala守护进程)读取和写入数据文件,并通过将工作分发到Impala集群中的所有其他Impala节点来并行化查询

  • 实现快速性能的另一个关键原因是Impala首先生成程序集级代码