与蜂巢相比,impala如何提供更快的查询响应
我最近开始研究使用Hive和Impala查询位于HDFS上的大量CSV数据集。正如我期待的那样,与Hive相比,Impala与我迄今使用的查询的响应时间更长。与蜂巢相比,impala如何提供更快的查询响应
我想知道是否有某些类型的查询/用例仍然需要Hive,而Impala并不适合。
与HDive相比,Impala如何为HDFS上的相同数据提供更快的查询响应?
您应该将Impala视为“SQL on HDFS”,而Hive更多地是“SQL on Hadoop”。
换句话说,Impala根本就不使用Hadoop。它只在所有节点上运行守护进程,缓存HDFS中的一些数据,这样这些守护进程可以快速返回数据,而无需通过整个Map/Reduce作业。
原因是运行Map/Reduce作业时存在一定的开销,所以通过短路Map/Reduce,您可以在运行时获得相当大的收益。
这就是说,Impala不会取代Hive,这对于非常不同的使用情况非常有用。与Hive相比,Impala不提供容错功能,因此如果在查询过程中出现问题,那么它就消失了。当然,对于ETL类型的工作,如果某项工作失败会导致成本高昂,我会推荐Hive,但对于小型临时查询,Impala可能非常棒,例如对于只想查看和分析某些数据的数据科学家或业务分析师没有建立稳健的工作。另外从我个人的经验来看,Impala还不是很成熟,有时当数据量大于可用内存时,我会看到一些崩溃。
恕我直言,HDFS上的SQL和Hadoop上的SQL都是一样的。毕竟Hadoop是HDFS + MapReduce。所以当我们在HDFS上说SQL时,可以理解它是Hadoop上的SQL。
回到实际问题,Impala提供了更快的响应,因为它使用MPP
(大规模并行处理),不像Hive,它在底层使用MapReduce,涉及一些初始开销(正如Charles先生指定的那样)。大规模并行处理是一种计算方式,它使用许多独立的CPU并行执行单个程序,其中每个CPU都有自己的专用内存。基于MPP的Impala并不涉及MapReduce作业的开销,作业设置和创建,插槽分配,分割创建,地图生成等,使其非常快速。
但这并不意味着Impala是解决您所有问题的方法。由于内存密集程度高(MPP),它不适合需要大量数据操作(如连接等)的任务,因为您无法将所有内容都放入内存中。这就是Hive更适合的地方。
因此,如果您需要实时,则可以针对部分数据对Impala进行临时查询。如果你有批量处理需要通过你的大数据去Hive。
HTH
黑斑羚有一些关键特征,使其快速。
它不使用地图/减少它们在 不同JVM叉非常昂贵。它运行单独的Impala Daemon,分割查询 ,并行运行它们并在结尾处合并结果集。
它在内存中执行大部分操作。
它使用hdfs作为其快速存储大文件的存储。它尽可能地从查询缓存到数据结果。
它支持像parquet这样的新文件格式,它是列状文件 格式。因此,如果您使用此格式,那么在大多数情况下您只能访问几列 的查询会更快。
但是,parquet文件格式如何帮助查询RDBMS查询......我正在探索Impala,所以只是好奇。如果你有任何明确的文件,请分享。谢谢 –
实木复合地板是柱状存储和使用实木复合地板,您可以在柱状数据库中获得所有这些优势。当您在大多数查询中使用少于列中的所有列时,它的速度会更快。 –
蜂巢现在也支持镶木地板,所以你的第四点不再是Impala和Hive之间的区别。 –
谢谢查尔斯的解释。 “与Hive相比,Impala不提供容错功能”,这是否意味着如果某个节点在查询处理过程中进行,那么它将失败。你是否有其他的想法。 – techuser
@Integrator从2013年5月的一次采访中,Cloudera的一位产品经理证实,在当前的实施中,如果一个节点在查询中失败,那么该查询将会中止,并且用户需要重新发出该查询(http: //www.datanami.com/datanami/2013-05-01/cloudera_releases_impala_into_the_wild.html) –
谢谢你的回答。 – techuser