大数据时代快速SQL引擎-Impala( 五 )

从上图可以看出 , Impala自身包含三个模块:Impalad、Statestore和Catalog , 除此之外它还依赖Hive Metastore和HDFS , 其中Imapalad负责接受用户的查询请求 , 也意味着用户的可以将请求发送给任意一个Impalad进程 , 该进程在本次查询充当协调者(coordinator)的作用 , 生成执行计划并且分发到其它的Impalad进程执行 , 最终汇集结果返回给用户 , 并且对于当前Impalad和其它Impalad进程而言 , 他们同时也是本次查询的执行者 , 完成数据读取、物理算子的执行并将结果返回给协调者Impalad 。 这种无中心查询节点的设计能够最大程度的保证容错性并且很容易做负载均衡 。 正如图中展示的一样 , 通常每一个HDFS的DataNode上部署一个Impalad进程 , 由于HDFS存储数据通常是多副本的 , 所以这样的部署可以保证数据的本地性 , 查询尽可能的从本地磁盘读取数据而非网络 , 从这点可以推断出Impalad对于本地数据的读取应该是通过直接读本地文件的方式 , 而非调用HDFS的接口 。 为了实现查询分割的子任务可以做到尽可能的本地数据读取 , Impalad需要从Metastore中获取表的数据存储路径 , 并且从NameNode中获取每一个文件的数据块分布 。

推荐阅读