impala

impala也是部门现在用的比较多的技术,整理个大概,方便以后用到的时候用起来更加轻松愉快。

Impala架构

Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具(实时SQL查询引擎Impala)。

MacDown Screenshot

Datanode上的每个impalad进程,都具有Query Planner,QueryCoordinator,Query ExecEnginer这几个组件,当有一个节点发生故障后,由于HDFS的数据冗余备份机制,只要挂掉的节点上的数据在其他节点上有备份,仍然可以计算。

Impala主要由Impalad, State Store和CLI组成。

  1. Impalad: 与DataNode运行在同一节点上,由Impalad进程表示,它接收客户端的查询请求(Coordinator通过JNI调用java前端解释SQL查询语句,生成查询计划树,再通过调度器把执行计划分发给具有相应数据的其它Impalad进行执行),读写数据,并行执行查询,并把结果通过网络流式的传送回给Coordinator,由Coordinator返回给客户端。同时Impalad也与State Store保持连接,用于确定哪个Impalad是健康和可以接受新的工作。

  2. Impala State Store: 跟踪集群中的Impalad的健康状态及位置信息,创建多个线程来处理Impalad的注册订阅和与各Impalad保持心跳连接,各Impalad都会缓存一份State Store中的信息,当State Store离线后,因为Impalad有State Store的缓存仍然可以工作,但会因为有些Impalad失效了,而已缓存数据无法更新,导致把执行计划分配给了失效的Impalad,导致查询失败。

  3. CLI: 提供给用户查询使用的命令行工具,同时Impala还提供了Hue,JDBC, ODBC使用接口。

Impala处理数据流程:

MacDown Screenshot

Impala与Hive的异同

  1. 数据存储:使用相同的存储数据池,都支持把数据存储于HDFS, HBase。

  2. 元数据:两者使用相同的元数据。

  3. SQL解释处理:比较相似都是通过词法分析生成执行计划。

  4. 执行计划:Hive依赖于MapReduce执行框架;Impala把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询,而不用像Hive那样把它组合成管道型的map->reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle。

  5. 数据流:Hive采用推的方式,每一个计算节点计算完成后将数据主动推给后续节点;Impala采用拉的方式,后续节点通过getNext主动向前面节点要数据,以此方式数据可以流式的返回给客户端,且只要有1条数据被处理完,就可以立即展现出来,而不用等到全部处理完成。

  6. 内存使用:Hive在执行过程中如果内存放不下所有数据,则会使用外存,中间结果也会写入HDFS中,shuffle过程也会有写本地磁盘的操作;Impala在遇到内存放不下数据时,版本1.0.1是直接返回错误,而不会利用外存,以后版本应该会进行改进。Impala在多个阶段之间利用网络传输数据,在执行过程不会有写磁盘的操作(insert除外)。

  7. 调度:Hive任务调度依赖于Hadoop的调度策略;Impala调度由自己完成,目前只有一种调度器simple-schedule,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器。

  8. 容错:Hive依赖于Hadoop的容错能力;Impala在查询过程中,没有容错逻辑,如果在执行过程中发生故障,则直接返回错误(这与Impala的设计有关,因为Impala定位于实时查询,一次查询失败,再查一次就好了,再查一次的成本很低)。但从整体来看,Impala是能很好的容错,所有的Impalad是对等的结构,用户可以向任何一个Impalad提交查询,如果一个Impalad失效,其上正在运行的所有Query都将失败,但用户可以重新提交查询由其它Impalad代替执行,不会影响服务。对于State Store目前只有一个,但当State Store失效,也不会影响服务,每个Impalad都缓存了State Store的信息,只是不能再更新集群状态,有可能会把执行任务分配给已经失效的Impalad执行,导致本次Query失败。

  9. 适用面:Hive复杂的批处理查询任务,数据转换任务;Impala实时数据分析,因为不支持UDF,能处理的问题域有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析。

参考:https://www.cnblogs.com/Rainbow-G/articles/4282444.html; https://blog.csdn.net/javajxz008/article/details/50523332;