2.2 Impala (Cloudara)
Impala 是用于处理存储在 Hadoop 集群中的大量数据的 MPP(大规模并行处理)SQL 查询引擎,由 Cloudera 公司主导开发。 它是一个用 C ++和 Java 编写的开源软件。
与其他 Hadoop 的 SQL 引擎相比,它提供了高性能和低延迟。宣称比原来基于 MapReduce 的 HiveSQL 查询速度提升 3~90 倍,且更加 灵活易用。提供类 SQL 的查询语句,能够查询存储在 Hadoop 的 HDFS 和 Hbase 中的 PB 级大数据。查询速度快是其最大的卖点。
2.2.1 架构
图 24 Impala 架构图
位于 Datanode 上的每个 impalad 进程,都具有 Query Planner, Query Coordinator, Query Exec Enginer 这几个组件,每个 impala 节点在功能上是对等的。
Impala 由 Impalad,State Store,CLI 组成:
Impalad:是 impala 的核心进程,与 Datanode 在同一个节点上,接受客户端的查询请求(接受查询请求的 impalad 为 Coordinator,Coordinator 通过 JNI 调用 java 前端解释 SQL 查询语句,生成查询计划树,再通过调度器吧执行计划分发给具有相应 数据的其他 impalad 执行),读写数据,并行执行查询,并把结果通过网络流式传给 Coordinator,有 Coordinator 返回给客户端。同 时 impalad 也与 statestore 保持连接,用于确定哪些 impalad 的健康的是可以执行新任务的。
State Store:类似 Zookeeper。跟踪集群中的 impalad 的健康状态及位置信息,并不断把健康状况发送给所有的 impalad 进程节点。一旦某个 impala 节点不可用,State Store 确保将这一信息及时传达到所有的 impalad 进程节点,当有新的查询请求时,Impalad 进程节点不会把查询请求发送到不可用的节点上。 State Store 通过创建多个线程来处理 Impalad 的注册订阅和与各个 Impalad 保持心态连接。值得注意的是,statestore 并非关键进程,即使 不可用,Impalad 进程节点间仍然可以相互协调正常对外提供分布式查询。
CLI:用户查询的命令行共组,还提供了 Hue、JDBC、ODBC 等接口。
Meta Store: Impala 使用传统的 MySQL、PostgreSQL 或 Hive 来存储表定义。 诸如表和列信息和表定义的重要细节存储在称为元存储的集中式数据库中。
2.2.2 查询流程
图 25 impala 查询处理过程
Impalad 分为 Java 前端与 C++处理后端,接受客户端连接的 Impalad 即作为这次查询的 Coordinator, Coordinator 通过 JNI 调用 Java 前端对用户的查询 SQL 进行分析生成执行计划树,不同的操作对应不用的 PlanNode,如: SelectNode, ScanNode, SortNode, AggregationNode, HashJoinNode 等等。
执行计划树的每个原子操作由一个 PlanFragment 表示,通常一条查询语句由多个 Plan Fragment 组成, PlanFragment 0 表示执行树的根,汇聚结果返回给用户,执行树的叶子结点一般是 Scan 操作,分布式并行执行。
Java 前端产生的执行计划树以 Thrift 数据格式返回给 ImpalaC++后端(Coordinator)(执行计划分为多个阶段,每一个阶段 叫做一个 PlanFragment,每一个 PlanFragment 在执行时可 以由多个 Impalad 实例并行执行(有些 PlanFragment 只能由一个 Impalad 实例执行,如聚合操作),整个执行计划为一执行计划树),由 Coordinator 根据执行计划,数据存储信息(Impala 通过 libhdfs 与 HDFS 进行交互。通过 hdfsGetHosts 方法获得文件数据 块所在节点的位置信息),通过调度器(现在只有 simple-scheduler, 使用 round-robin 算法)Coordinator::Exec 对生成的执行计划树分配给相应的后端执行器 Impalad 执行(查询会使用 LLVM 进行代码生成,编译,执行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论