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. 真正的写操作。

Hadoop--HDFS之DataNode

  HDFS DataNode,提供真实文件数据的存储服务。上篇博客HDFS NameNode 讲的是HDFS元数据,本篇主要讲解HDFS存储的真实数据。这些真实数据重点由两个部分组成,一、Block块(数据存储单元),二、文件备份数,掌握Block块信息,副本数的设置。

Block块

  • 文件块(block):最基本的存储单位。
  1. 对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block
  2. HDFS,默认Block大小是128MB(2.0版本),以一个256MB文件,共有256/128=2个Block;
  3. HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间

Hadoop--HDFS之NameNode

  之前就打算写一下Hadoop系列博客的,由于写别的东西去了,一直也没抽空出来,上篇Hadoop–HDFS架构和Shell对HDFS的一个简单概述,还是两三个月前的事情了。做了这么久的Hadoop了,在这里算是自我总结一下吧,本篇博客主要讲解一下Hadoop HDFS的NameNode

  • 重点掌握
  1. NameNode 的作用;
  2. NameNode 元数据的底层结构;
  3. SecondaryNameNode 的作用以及工作流程,以及为什么需要SecondaryNameNode。

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