在hive中除全表扫锚外,hive中的HQL语句全部转化为MR任务
调用Driver中的run方法开始执行编译,解析,分析(通过元数据)生成hive.jar交给hadoop执行,添加task线程启动线程,最后通过Runtime类在jvm中执行并返回结果。
Map数量
在hadoop中通过Input和blocksize来决定MR任务的数量,例如有3个小文件在hadoop中就会生成3个Map任务但是在hive中就对其进行了优化只需要一个Map任务就可以。Hive通过combineHiveInputFormat类将这些小文件合并用以提高效率。
t3有3个小文件而我在hive中执行查询时可以看到最终它只生成了一个Map任务
Reduce数量
Hive将hql转化为MR任务,在日志中可以看到有两个参数分别是hive.exec.reducers.bytes.per.reducer