今天整理了一下项目使用的Impala数据库相关资料~
希望能给大家带来帮助~缺点请多多指教~
首先,黑斑羚和蜂巢首先明白
(1)Impala和Hive是对HDFS/Hbase数据进行SQL查询的工具。Hive将被转换成MapReduce,并由纱计划访问HDFS数据。黑斑羚直接向HDFS询问数据。
(2)Apache Hive是MapReduce的高级抽象。使用HiveQL,Hive可以生成Hadoop集群中运行的MapReduce或Spark作业。Hive最初是Facebook在2007年左右开发的,现在是Apache的开源项目。
ApacheImpala是一款高性能的特殊SQL引擎,使用的是Impala SQL,因为Impala可以直接查询数据块,不需要任何框架,所以查询延迟为毫秒级。Impala受谷歌Dremel项目的启发,由Cloudera于2012年开发,现在是一个Apache开源项目。
二、黑斑羚和蜂巢的关系
Impala是一个基于Hive的大数据实时分析查询引擎,直接使用Hive的Metadata,即Impala元数据存储在Hive的metastore中,Impala兼容Hive的sql解析,实现了Hive的SQL语义的一个子集,很多功能还在改进中。
Hadoop中Impala和Hive的关系如下图所示。Hive适合长时间批量查询分析,Impala适合实时交互的SQL查询。Impala为数据分析师提供了一个大数据分析工具,可以快速实验和验证想法。先用Hive进行数据转换,再用Impala对Hive处理后的结果数据集进行快速数据分析。
第三,黑斑羚与蜂巢相比所采用的优化技术
1.MapReduce不用于并行计算。虽然MapReduce是一个非常好的并行计算框架,但是它比交互式SQL执行更面向批处理模式。与MapReduce相比,Impala将整个查询划分为一个执行计划树,而不是一系列MapReduce任务。执行计划分发后,Impala通过拉取数据获得结果,并将结果数据组装成执行树,减少了将中间结果写入磁盘,然后从磁盘读取数据的步骤。Impala使用服务来避免启动每次查询执行的开销,也就是说,与Hive相比,它没有MapReduce启动时间。
2.更好的IO调度。Impala知道数据块的位置,可以更好的利用多个磁盘的优势。Impala支持直接数据块读取和本地代码计算校验和。
3.选择合适的数据存储格式可以获得最佳性能(Impala支持多种存储格式)。
4.最大限度的利用内存,中间结果不写入磁盘,以流的形式通过网络及时传输。
5.使用LLVM生成运行代码,并为特定查询生成特定代码。同时,使用Inline降低函数调用成本,加快执行效率。
6.充分利用可用的硬件指令(SSE4.2)。
四.黑斑羚和蜂房的异同
1.类似
数据存储:
使用相同的存储数据池支持在HDFS存储数据。
元数据:两者使用相同的元数据。
SQL解释处理:类似于通过词法分析生成执行计划。
2.差异
执行计划:
Hive:根据MapReduce执行框架,执行计划分为map->:shuffle->;reduce->;地图->;shuffle->该模型能有效地降低生产成本。如果一个查询被编译成多轮MapReduce,将会有更多的中间结果。由于MapReduce执行框架本身的特点,过多的中间进程会增加整个Query的执行时间。
impala:将执行计划表示为一个完整的执行计划树,可以更自然的将执行计划分配给每个Impala执行查询,而不是像Hive-->:Reduce模式那样组合成一个管道图,保证Impala有更好的并发性,避免不必要的中间排序和洗牌。
数据流:
蜂巢:采用推送方式。每个计算节点完成计算后,主动将数据推送到后续节点。
Impala:使用pull方法,后续节点通过getNext主动向之前的节点请求数据,这样数据就可以以流的方式返回给客户端,只要处理完一条数据,就可以立即显示出来,而不是等待所有的处理完成,更适合于SQL交互查询。
内存使用情况:
配置单元:如果在执行过程中内存不能容纳所有的数据,那么将使用外部内存来确保查询能够按顺序执行。在每轮MapReduce结束时,中间结果也将被写入HDFS。同样,由于MapReduce执行架构的特点,洗牌过程也会有写入本地磁盘的操作。
Impala:当数据无法存储在内存中时,当前的1.0.1版本直接返回错误,不使用外部内存,未来版本需要改进。这使得Impala目前对Query的处理受到一定的限制,所以最好和Hive一起使用。Impala使用网络在多个阶段之间传输数据,执行过程中没有磁盘写操作(插入除外)。
计划:
Hive:任务调度依赖Hadoop调度策略。
英帕拉:排班自己做。目前只有一种调度器,simple-schedule,会尽量满足数据的局部性,扫描数据的过程尽量靠近数据本身所在的物理机。目前调度器比较简单,从SimpleScheduler::get后端可以看出,调度没有考虑负载、网络IO状态等因素。但是目前Impala对执行过程的性能有统计分析,所以在未来的版本中应该使用这些统计信息进行调度。
容错:
Hive:要看Hadoop的容错能力。
Impala:查询过程中没有容错逻辑。如果执行过程中出现故障,会直接返回错误(这和Impala的设计有关,因为Impala位于实时查询中,一旦查询失败,再检查一次就好了,再检查的成本很低)。但总体来说,黑斑羚是容错的,所有黑斑羚都是同等结构。用户可以向任何黑斑羚提交查询。如果一个Impala失败,其上运行的所有查询都会失败,但是用户可以在不影响服务的情况下,代替其他Impala重新提交查询并执行。目前只有一个StateStore,但是State Store出现故障时,不会影响服务。每个穿刺缓存状态存储的信息,但集群状态不能再更新。执行任务有可能会被分配给过期的穿刺执行,从而导致此查询失败。
适用范围:
Hive:复杂的批量查询任务和数据转换任务。
Impala:实时数据分析。因为不支持UDF,所以能处理的问题域有限。与Hive结合使用,实时分析Hive的结果数据集。
-结束-
Ebistrategy
1.《impala Impala与Hive的比较》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《impala Impala与Hive的比较》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/shehui/1152028.html