我最近开始研究使用Hive和Impala查询HDFS上的大量CSV数据。正如我所期望的那样,与Hive相比,我使用Impala获得了更好的响应时间,对于我到目前为止使用的查询。
我想知道是否有一些类型的查询/用例仍然需要Hive,而Impala不太适合。
与Hive相比,Impala如何为HDFS上的相同数据提供更快的查询响应?
发布于 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仍然不是很成熟,当数据量超过可用内存时,我有时会看到一些崩溃。
发布于 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
发布于 2013-09-28 03:34:06
在impala中有一些关键的特性使得它的速度很快。
https://stackoverflow.com/questions/16755599
复制相似问题