前言
Hive将SQL转为MapReduce执行,但是对于简单的查询,使用MapReduce的效率太低,于是开发了fetch功能来避免MR的执行。
网上有大量的文章介绍了如何使用,却少有介绍其原理的,于是自己debug学习了一下整理成笔记分享出来。
流程
入口
由于我使用的是hive的cli进行debug,所以会先进入CliDriver,关于这个环节更详细的介绍可以参考Hive 源码解析之 Hive 基本框架和执行入口
读取文件
读取切片
- InputFormatSplit
虽然避免了MR计算,读取文件依旧是无法避免的。Hive针对fetch的任务自定义了一类InputFormatSplit
FetchInputFormatSplit在FetchOperator的getNextSplits中被创建出来,这个方法应该是读取文件返回切片构成的数组。