tec*_*oma 54 hadoop hive impala
我最近开始研究使用Hive和Impala查询位于HDFS上的大量CSV数据.正如我所期望的那样,与Hive相比,我对Impala的响应时间要好得多.
我想知道是否有一些类型的查询/用例仍然需要Hive以及Impala不适合的地方.
对于HDFS上的相同数据,Impala与Hive相比如何提供更快的查询响应?
Cha*_*guy 103
您应该将Impala视为"HDFS上的SQL",而Hive则更像是"Hadoop上的SQL".
换句话说,Impala甚至根本不使用Hadoop.它只是在所有节点上运行守护进程,这些守护进程缓存HDFS中的一些数据,这样这些守护进程可以快速返回数据而无需完成整个Map/Reduce作业.
这样做的原因是运行Map/Reduce作业会产生一定的开销,因此通过完全缩短Map/Reduce,可以在运行时获得相当大的收益.
话虽这么说,Impala并没有取代Hive,但它对于非常不同的用例非常有用.与Hive相比,Impala不提供容错功能,因此如果在查询过程中出现问题,那么它就会消失.对于ETL类型的作业而言,一个作业的失败将是昂贵的,我会推荐Hive,但Impala对于小型即席查询非常棒,例如对于想要查看并分析一些数据的数据科学家或业务分析师而言没有建立稳健的工作.另外根据我的个人经验,Impala仍然不是很成熟,有时当数据量大于可用内存时我会看到一些崩溃.
Tar*_*riq 30
恕我直言,HDFS上的SQL和Hadoop上的SQL是相同的.毕竟Hadoop是HDFS(还有MapReduce).因此,当我们在HDFS上说SQL时,可以理解它是Hadoop上的SQL(可能有或没有MapReduce).
回到实际问题,Impala提供了更快的响应,因为它使用MPP(大规模并行处理),而不像Hive那样使用MapReduce,这涉及一些初始开销(正如Charles先生所指定的那样).大规模并行处理是一种计算类型,它使用许多独立运行的CPU来执行单个程序,其中每个CPU都有自己的专用内存.事实上,基于MPP的Impala不涉及MapReduce作业的开销.作业设置和创建,插槽分配,拆分创建,地图生成等,使其快速发展.
但这并不意味着Impala可以解决您的所有问题.作为高度内存密集型(MPP),它不适合需要大量数据操作(如连接等)的任务,因为您无法将所有内容都安装到内存中.这是Hive更适合的地方.
因此,如果您需要实时,对数据子集的即席查询将用于Impala.如果你有批处理需要超过你的大数据去Hive.
HTH
impala中有一些关键功能使其速度更快.
它不使用map/reduce,它们在单独的jvms中分叉是非常昂贵的.它运行单独的Impala守护程序,它会拆分查询并并行运行它们并在最后合并结果集.
它在内存中完成大部分操作.
它使用hdfs进行存储,对于大文件来说速度很快.它尽可能地从查询到结果缓存到数据.
它支持新的文件格式,如镶木地板,这是一种柱状文件格式.因此,如果您使用此格式,对于大多数时间只访问少数列的查询来说会更快.
| 归档时间: |
|
| 查看次数: |
33296 次 |
| 最近记录: |