1. 首页
  2. 大数据
  3. Impala教程

【Impala教程】(一)Impala概述、特点及优势

概念

Impala是Cloudera公司推出的,是CDH平台首选的PB级大数据实时查询分析引擎。它提供对HDFS、HBASE的交互式查询功能,基于HIVE使用内存计算,兼顾数据仓库,具有实时,批处理,多并发的特点。
【Impala教程】(一)Impala概述、特点及优势

优势

  • 快速
    最大的优势就是快!!因为它是基于内存计算的,能够对海量大数据进行交互式实时查询分析,上面那张图我们也可以看出来,Hive会经过MR,但是Impala不经过MR,直接读取HDFS数据。
hive> select count(1) from emp_import;
OK
7
Time taken: 307.057 seconds, Fetched: 1 row(s)
[cm-slave2:21000] > select count(1) from emp_import;
Query: select count(1) from emp_import
+----------+
| count(1) |
+----------+
| 7        |
+----------+
Fetched 1 row(s) in 0.58s

HIVE需要执行307s的job,impala只需要0.5s,简直完胜!

  • 兼容HSQL
    也就是说,你会用HIVE,学这个分分钟的事。它具有数据仓库特性,可以对HIVE数据直接做分析,其实impala是完全依赖hive的,离开hive它就活不下去。
  • 多种存储格式可以选择(Parquet, Text, Avro, RCFile, SequeenceFile)。
  • 可以与HIVE HBASE配合使用
    impala支持列式存储,可以和hbase整合,很好理解,因为hive可以和hbase整合,而impala是和hive共生的,所以impala也必定能和hbase整合。

缺陷

  • 对内存依赖非常大,官方建议需要128G内存。
  • 完全依赖hive,hive出问题了impala就一定会出问题
  • 稳定性不如hive,毕竟hive出来的时间比较久,而且转化为MR,MR稳定性高。
  • 不支持用户定义函数UDF
  • 经过实践分区超过一万时,能会极度下降

与HIVE的区别和联系

相同点

  • 数据存储:使用相同的存储数据池都支持把数据存储于HDFS, HBase。
  • 元数据:两者使用相同的元数据。
  • SQL解释处理:比较相似都是通过词法分析生成执行计划。

区别

  • 执行计划
    Hive: 依赖于MapReduce执行框架,执行计划分成map->shuffle->reduce->map->shuffle->reduce…的模型。Impala: 把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询,而不用像Hive那样把它组合成管道型的map->reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle。
  • 数据流
    Hive: 采用推的方式,每一个计算节点计算完成后将数据主动推给后续节点。
    Impala: 采用拉的方式,后续节点通过getNext主动向前面节点要数据,以此方式数据可以流式的返回给客户端,且只要有1条数据被处理完,就可以立即展现出来,而不用等到全部处理完成,更符合SQL交互式查询使用。
  • 内存使用
    Hive: 在执行过程中如果内存放不下所有数据,则会使用外存,以保证Query能顺序执行完。每一轮MapReduce结束,中间结果也会写入HDFS中,同样由于MapReduce执行架构的特性,shuffle过程也会有写本地磁盘的操作。
    Impala: 在遇到内存放不下数据时,当前版本0.1是直接返回错误,而不会利用外存,以后版本应该会进行改进。这使用得Impala目前处理Query会受到一定的限制,最好还是与Hive配合使用。Impala在多个阶段之间利用网络传输数据,在执行过程不会有写磁盘的操作(insert除外)。
  • 调度
    Hive: 任务调度依赖于Hadoop的调度策略。
    Impala: 调度由自己完成,目前只有一种调度器simple-schedule,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器。调度器目前还比较简单,在SimpleScheduler::GetBackend中可以看到,现在还没有考虑负载,网络IO状况等因素进行调度。但目前Impala已经有对执行过程的性能统计分析,应该以后版本会利用这些统计信息进行调度吧。
  • 容错
    Hive: 依赖于Hadoop的容错能力。
    Impala: 在查询过程中,没有容错逻辑,如果在执行过程中发生故障,则直接返回错误(这与Impala的设计有关,因为Impala定位于实时查询,一次查询失败,再查一次就好了,再查一次的成本很低)。但从整体来看,Impala是能很好的容错,所有的Impalad是对等的结构,用户可以向任何一个Impalad提交查询,如果一个Impalad失效,其上正在运行的所有Query都将失败,但用户可以重新提交查询由其它Impalad代替执行,不会影响服务。对于State Store目前只有一个,但当State Store失效,也不会影响服务,每个Impalad都缓存了State Store的信息,只是不能再更新集群状态,有可能会把执行任务分配给已经失效的Impalad执行,导致本次Query失败。
  • 应用场景
    Hive: 复杂的批处理查询任务,数据转换任务。因为HIVE对复杂数据类型(比如arrays和maps)和窗口分析更广泛的支持。
    Impala:实时数据分析,因为不支持UDF,能处理的问题域有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析。

BDStar原创文章。发布者:Liuyanling,转载请注明出处:http://bigdata-star.com/archives/1339

发表评论

登录后才能评论

联系我们

562373081

在线咨询:点击这里给我发消息

邮件:562373081@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code