Hive LLAP支持哪些执行引擎?Spark、MR能否使用LLAP?
好问题!很多刚接触Hive LLAP的朋友都会有这个疑惑,我来给你掰扯清楚:
Hive LLAP与Spark/MR引擎的兼容性说明
核心结论
LLAP 仅支持Hive原生的Tez执行引擎,Spark和MapReduce(MR)这两个引擎是没办法直接用上LLAP的功能的。
具体原因
- LLAP从设计之初就绑定了Tez:LLAP是专门为Hive on Tez打造的增强组件,它靠常驻内存的LLAP守护进程来缓存数据、预编译查询片段,这些优化逻辑和Tez的任务调度、执行模型深度绑定。而Spark和MR的执行架构完全是另一套路子,根本适配不了LLAP的内存缓存和处理机制。
- MR本身的属性就和LLAP不搭:MR是基于磁盘的批处理引擎,追求的是高吞吐量而非低延迟,LLAP的那些低延迟优化(比如内存缓存、增量处理)和MR的执行模式完全不匹配,Hive官方也从来没打算给MR适配LLAP。
- Spark有自己的一套优化体系:Spark本身就有成熟的内存管理和缓存机制(比如RDD缓存、Spark SQL的列式存储缓存),它和Hive LLAP是两套独立的优化方案。虽然你可以通过Hive on Spark来运行Hive查询,但没法复用LLAP的守护进程集群和缓存能力。
替代方案
如果想用Spark获得类似LLAP的低延迟查询效果,可以试试这些办法:
- 开启Spark SQL的
spark.sql.cache.enabled配置,把常用的表或者查询结果缓存起来 - 搭配使用Spark的列式存储格式(比如Parquet、ORC),再加上分区、桶表的优化
- 部署Spark Thrift Server提供交互式查询服务,能达到类似LLAP的低延迟访问体验
内容的提问来源于stack exchange,提问作者tooptoop4




