LLAP提供了一种混合模型,它包含一个长驻进程,用于直接与DataNode 进行IO交互,并紧密地集成在基于DAG的框架中。Caching,pre-fetching,部分query的执行,以及 access control被移动到此进程执行。
大部分Small/short queries被此进程直接处理。而如果是大型任务(如在reduce阶段中的大型shuffle) 则仍被标准的yarn containers 处理。此外,LLAP 还提供了更精细的访问控制。
类似于 DataNode 进程,LLAP 进程也可被其他应用访问,特别是在以文件为中心(file-centric)的关系型数据处理(如 join,多表查询)中。下图展示了 带有LLAP 的执行引擎的一个例子:
可以看到,Tez AM 仍作为 Application Master,处理整个任务调度。Query在初始阶段即被送往 LLAP。在Reduce阶段中,大型的 shuffles 操作在不同的 containers 中执行。多个 queries 与 applications 可以并行地访问 LLAP。
为了满足 caching 以及 JIT 优化,以及减少大部分的启动消耗(startup costs),LLAP 会在每个从节点上启动一个常驻进程。这个进程用于处理 I/O,caching,以及query中部分片段的执行。
LLAP 与集群中执行引擎共同工作,以保留 Hive 原有的性能(如可扩展性能)。LLAP 并不会替代已存在的执行引擎,而是增强它的功能。这里需要注意的几点是:
1. 这些进程是可选的。没有他们,Hive也可以正常工作
2. LLAP 并不是一个执行引擎(如MR or Tez)。一个query 的整个执行过程仍由原有的执行引擎调度与监控。LLAP级别的支持暂时仅对 Tez 可用
3. 取决于query,一个LLAP进程可以提供query的部分结果,或是转交给外部的Hive Task
4. 资源管理仍由 YARN 负责。在YARN container 分配资源后,执行引擎可以决定哪些资源可以被分配给LLAP,或者它可以启动 Apache Tez processors 在一个独立的 YARN container中。