Hive--执行流程和源码解析

  Hive,在工作中使用相对较多,并且比较简单便捷,今天在家闲着没事,就写一遍博客来对hive的执行流程做一些分析,还有阅读一下它的源码,看看这个hive是怎么编译这个HiveQL,怎么去解析,怎么和我们hdfs上的数据关联,在mapreduce阶段怎么进行计算的。由于这个源码比较多,不是很好截图,有时候我会一部分一部分的截取。最主要的还是你们自己按照这个流程去看几遍,可以看看具体的细节。

  • 下面我们来看一张经典的图,本博客也是围绕这张图展开的讲解:
  • Hive与Hadoop的调用关系图:

Hadoop--MapReduce源码分析

  本片博客Hadoop的MapReduce源码分析,主要对上篇博客Hadoop-MapReduce详解/做进一步的理解。MapReduce源码分析东西太多,截图都截累了,前面比较详细一点靠后面可能只把主要的贴了上来,空闲了我在做一些补充吧!

  • MapReduce过程概述
  1. Job提交任务,会做初始化配置文件、检查Output Path、请求RM获取JobId、复制资源文件到HDFS等操作然后提交job作业;
  2. RM接收到作业后会初始化Job对象,然后启动一个NM会从HDFS获取资源文件分配一个Container,在Container中启动一个AM,在过程中会把文件分割为多个输入分片;
  3. 每个输入分片会让一个map任务来处理输出多个键值对,输出的结果会暂且放在一个环形内存缓冲区中;
  4. 紧接着就是分区,目的是把k2分配到不同的reduce task;
  5. map输出时可能会有很多的溢出文件,要将这些文件合并。合并的过程中会不断地进行排序和combia操作,最后合并成了一个已分区且已排序的文件。
  6. reduce阶段,接收到不同map任务传来的数据,如果接收数据大超过阈值就会溢出写入磁盘,溢出文件增多合并成大的有序的文件(反复地执行排序,合并操作)
  7. MapReduce会让写入磁盘的数据尽可能地少,并且最后一次合并的结果并没有写入磁盘,而是直接输入到reduce函数。

Hadoop--MapReduce详解

  前面的几篇博客主要介绍了Hadoop的存储HDFS,接下来几篇博客主要介绍Hadoop的计算框架MapReduce。当然这方面的技术博客已经特别多而且都写得很优秀,我写本篇博客之前也有过相关阅读,受益匪浅。对一些博客和资料的参考都会才博客下方参考资料中列出。

  • 本片博客主要讲解:
  1. 理解MapReduce具体是个什么东西
  2. 通过具体代码来体现一下MapReduce
  3. MapReduce具体的流程和运行机制

Hadoop--HDFS之读写流程

  之前的博客,HDFS NameNodeHDFS DataNode 让我们对HDFS两个重要的角色,NameNode和DataNode有了一定的认识。NameNode负责维护元数据信息,DataNode负责Block块数据的存储。HDFS的设计就是一次写入,多次读取,不支持文件修改,所以呢,文件的读写就变得相当重要,下面我们就一起来看一看HDFS文件的读写流程吧!

写入文件

  • DataNode的写操作流程 可以分为两部分:
  1. 准备工作,包括与NameNode的通信等;
  2. 真正的写操作。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器