Impala服务器是一个分布式,大规模并行处理(MPP)数据库引擎。它包括运行在CDH集群主机上的不同后台进程。
1,客户端
有三类客户端可以与Impala进行交互:
基于驱动程序的客户端(ODBC Driver和JDBC Driver,其中JDBC Driver支持Hive1与Hive2风格的驱动形式);
Hue接口,可以通过Hue Beeswax接口来与Impala进行交互;
Impala Shell命令行接口,类似关系数据库提供一些命令行即可,可以直接使用SQL语句与Impala交互。
2,Hive Metastore
Impala和Hive共享 Metastore,来存储元数据。
3,Cloudera Impala
Impala会在HDFS集群的Datanode上启动进程,协调位于集群上的多个Impala进程(impalad),以及执行查询。在Impala架构中,每个Impala节点都可以接收来自客户端的查询请求,然后负责解析查询,生成查询计划,并进行优化,协调查询请求在其他的多个Impala节点上并行执行,最后有负责接收查询请求的Impala节点来汇总结果,响应客户端。
4,HBase和HDFS
HBase和HDFS存储着实际需要查询的大数据。
1,Impala Daemon进程是运行在集群每个节点上的守护进程,是Impala的核心组件之一。每个节点上这个进程名称为impalad。
2,impalad 负责读写数据文件,接收来自impala-shell、Hue、JDBC或者ODBC的查询请求,与集群中的其他节点分布式并行地工作,并将本节点的查询结果返回给中心协调者节点。
3,用户可以向集群节点中的任何一个节点提交查询请求,提交查询的这个节点将作为这个查询的“协调者节点(coordinator node )”,其他节点的运算结果会被传输到协调者节点,协调者节点将最终运算结果返回。运行在生产环境上的Impala集群,我们必须考虑到各个节点的负载均衡,建议使用JDBC/ODBC接口以round-robin的方式将每个查询提交到不同节点的impalad进程上。
4,下面是Impala的架构图:
上面可以看出,位于Datanode上的每个impalad进程,都具有Query Planner、Query Coordinator、Query Exec Engine这几个组件,每个Impala节点在功能集合上是对等的,也就是说,任何一个节点都能接收外部查询请求。
5,impalad 进程通过持续地和statestore 通信来确认自己所在的节点是否健康,是否可以接受新的任务请求。
6,当Impala集群中创建,修改或者删除了对象,或者进行了Insert/Load Data操作,catalogd进程要向所有节点广播消息,以保证所有impalad节点都能够及时地了解整个集群中对象元数据的最新状态。
1,impala 的另一个核心组件statestore,负责检测整个集群中所有节点上进程的健康状况,并不断地将监控状况的结果转发给集群的Impalad进程节点。Statstore 进程名称为 statestored。
2,一个impala 集群上仅需要一个statestored进程节点。当impala 集群中有节点因硬件故障,网络错误,软件问题或是其他的原因导致节点不可用,statestore讲确保这一信息及时地传达到所有的impalad进程节点上,当有新的查询请求时,impalad进程节点将不会把查询请求发送到不可用的节点上。
3,Statestore的目的是在集群故障时对impalad进程节点同步信息,所以对于一个正常运行的impala集群来说,它并不是一个关键进程。如果statestore不可用,impalad进程节点之间仍然可以相互协调正常对外提供分布式查询。在statestore不可用的情况下,impalad进程节点失败,只是让集群不再那么强劲。当statestore恢复正常时,它将重新与impalad进程节点建立通信,恢复对集群的监控功能。