hadoop系列(四)HDFS的工作机制,MapReduce,yarn流程及核心原理

hadoo系列(一)hadoop集群安装

https://blog.csdn.net/qq_38130094/article/details/121777819

hadoop系列(二)HA高可用方式部署

https://blog.csdn.net/qq_38130094/article/details/121881367

hadoop系列(三) HDFS的shell操作和常用API操作

https://blog.csdn.net/qq_38130094/article/details/121916009

hadoop系列(四)HDFS的工作机制,MapReduce,yarn流程及核心原理

https://blog.csdn.net/qq_38130094/article/details/122162398

hadoop系列(五) 源码分析

https://blog.csdn.net/qq_38130094/article/details/122147830

目录

1. HDFS

1.1 hdfs概述

1.1.1 HDFS产生背景

1.1.1 HDFS的定义

1.2 HDFS优缺点

1.2.1 优点

1.2.2 缺点

1.3 HDFS组成

 1.3.1 NameNode 和 DataNode

1.4 HDFS块的大小

1.5 HDFS 副本放置策略

2. HDFS读写流程

2.1 HDFS读数据流程

2.2 HDFS 写数据流程

3. MapReduce详细工作流程

4. Name Node与2NN的工作机制

4.1 NameNode启动阶段

 4.2 Secondary NameNode工作阶段

4.3 CheckPoint时间设置

5.  DataNode工作机制

6. MapReduce概述

6.1 MapReduce定义

6.2 MapReduce 工作流程(**重要**)

7. yarn 资源调度器

7.1 Yarn工作机制

7. Yarn调度器

7.1 先进先出调度器(FIFO)

7.2 容量调度器(Capacity Scheduler)

7.3 公平调度器(Fair Scheduler)


1. HDFS

1.1 hdfs概述

        HDFS 是 Hadoop 应用程序使用的主要分布式存储。HDFS 集群主要由管理文件系统元数据的 NameNode 和存储实际数据的 DataNode 组成。HDFS 架构指南详细描述了 HDFS。HDFS 架构图描述了 NameNode、DataNode 和客户端之间的基本交互。客户端联系 NameNode 以获取文件元数据或文件修改,并直接使用 DataNode 执行实际的文件 I/O。

1.1.1 HDFS产生背景

        在数据量越来越大的背景下,造成一个操作系统存不下所有数据,那就存储到多个操作系统管理下的磁盘上,但是不方便进行管理和维护,这个时候就迫切需要一个系统来统一管理多台机器上的文件,这个就是分布式文件系统,HDFS只是分布式文件管理系统中的一个

1.1.1 HDFS的定义

        HDFS(hadoop distribut file system),首先他是一个文件系统,用来存储文件,通过目录树来定位文件,其次他也是一个分布式文件系统,由N台系统服务联合起来实现其功能,集群中各自有各自的角色

        HDFS适用于一次写入,多次读取的场景,一个文件经过创建,写入和关闭之后就不会在改变了

1.2 HDFS优缺点

1.2.1 优点

  • 1. 高容错性:数据自动保存多个副本,通过增加副本的形式来提高容错性
  • 2. 适合大数据处理:数据规模达到GB,TB甚至处理PB级别的,文件规模上能百万级别的文件数量
  • 3. 成本低廉:可以构建在廉价的机器上,通过多副本提高可靠性

1.2.2 缺点

  • 1. 不适合低延时场景:比如毫秒级别的存储数据,是做不到的
  • 2. 不能对高效的存储大量小文件:存储大量小文件会占用大量NameNode的内存,来存储文件目录和块信息,小文件的寻址时间也会超过读取时间,这就违反了HDFS的设计目标
  • 3. 不支持并发写入,文件随机修改,一个文件只能有一个写,不允许多个线程同时写,仅支持数据的append不支持文件的随机改写

这种假设简化了数据一致性问题并实现了高吞吐量数据访问。MapReduce 应用程序或网络爬虫应用程序非常适合此模型。

1.3 HDFS组成

 1.3.1 NameNode 和 DataNode

        HDFS 具有主/从架构。HDFS 集群由单个 NameNode 组成,这是一个管理文件系统命名空间并控制客户端对文件的访问的主服务器。此外,还有许多 DataNode,通常集群中每个节点一个,用于管理附加到它们运行的​​节点的存储。HDFS 公开了一个文件系统命名空间,并允许将用户数据存储在文件中。在内部,一个文件被分成一个或多个块,这些块存储在一组 DataNode 中。NameNode 执行文件系统命名空间操作,例如打开、关闭和重命名文件和目录。它还确定块到 DataNode 的映射。DataNode 负责处理来自文件系统客户端的读取和写入请求。DataNodes 还执行块创建、删除、

NameNode:

  • 1. 管理HDFS的名称空间
  • 2. 配置副本策略
  • 3. 管理数据块的映射关系
  • 4. 处理客户端读写请求

DateNode:

        1. 存储实际数据

        2. 执行数据块的读/ 写操作

Secondary NameNode:

        1. 辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推给NameNode

        2. 在紧急情况下,可以辅助恢复NameNode

client:

        1. 文件切片,文件上传HDFS时,client将文件进行切分为一个个的Block,在进行上传

        2. 与nameNode交互获取文件的信息

        2. 与DataNode交互,读/写数据

1.4 HDFS块的大小

        HDFS的文件在物理上是分块存储(Block),块的大小可以通过配置参数dfs.blocksize来进行设置,1.x默认配置的是64M,2.x和3.x默认是128M

块的大小设置是由数据的读取速度来决定的:寻址的时间为读取的时间的1%为最佳,如果寻址的时间的时间为10ms则数据的传输时间大概为10ms/1%=1s,而现在磁盘的读取速率大概为100M/s

1.5 HDFS 副本放置策略

机架感知及副本放置策略官方说明:https://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Replica_Placement:_The_First_Baby_Steps

  • 1. 第一个副本优先选择writer所在的节点,如果writer在集群外,那就随机选择一台磁盘剩余打的节点
  • 2. 第二副本:放置在第一个副本不同的的机架节点上
  • 3. 第三副本:与第二副本相同机架的不同的节点
  • 4. 多余副本:随机节点

        副本的放置对于 HDFS 的可靠性和性能至关重要。优化副本放置将 HDFS 与大多数其他分布式文件系统区分开来。这是一个需要大量调整和经验的功能。机架感知副本放置策略的目的是提高数据可靠性、可用性和网络带宽利用率

        NameNode 通过Hadoop Rack Awareness中概述的过程确定每个 DataNode 所属的机架 ID 。一个简单但非最佳的策略是将副本放置在唯一的机架上。这可以防止在整个机架发生故障时丢失数据,并允许在读取数据时使用来自多个机架的带宽。此策略在集群中均匀分布副本,这使得在组件故障时平衡负载变得容易。但是,此策略增加了写入的成本,因为一次写入需要将块传输到多个机架。

2. HDFS读写流程

2.1 HDFS读数据流程

  • 1. 客户端通过DistributedFileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址
  • 2. 挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据
  • 3. DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)
  • 4. 客户端以Packet为单位接收,先在本地缓存,然后写入目标文件 

2.2 HDFS 写数据流程

1. client(分布式客户端)与nameNode建立连接,客户端提出提交文件,nn创建元数据

2. nameNode判断元数据权限是否有效

3. nameNode触发副本放置策略,返回一个有序的DataNode列表

4. client与DataNode建立数据流;client和Datanode会建立pipline连接

5. client将数据切分为packet(64K)并使用chunk(512B)+chunksun(4B)填充

6. client将数据放入发送队列dataqueue中,并像第一个datanode发送

7. 第一个DataNode收到packet后本地保存并发送给第二个DataNode

8. 第二个DN收到packet后本地保存并发送给第三个DN

9. 这一个过程中,上游节点同时发送下一个packet

        Hdfs使用这种传输方式,副本数对于client是透明的,当block传输完成,DN们各自向NN汇报,同时client继续传输下一个block,所以client的传输和block的汇报也是并行的

3. MapReduce详细工作流程

3.1 map阶段

3.2 reduce阶段

MapReduce特征总结:

map:以一条记录为单位做映射

        映射,变换,过滤 1进N出

reduce:相同特征的一组数据为单位去计算

        分解,缩小,归纳 一组进N出

3.1 MapReduce核心思想

4. Name Node与2NN的工作机制

4.1 NameNode启动阶段

  1. 第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
  2. 客户端对元数据进行增删改的请求。
  3. NameNode记录操作日志,更新滚动日志。
  4. NameNode在内存中对元数据进行增删改

 4.2 Secondary NameNode工作阶段

  1. Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。
  2. Secondary NameNode请求执行CheckPoint。
  3. NameNode滚动正在写的Edits日志。
  4. 将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
  5. Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
  6. 生成新的镜像文件fsimage.chkpoint。
  7. 拷贝fsimage.chkpoint到NameNode。
  8. NameNode将fsimage.chkpoint重新命名成fsimage。

4.3 CheckPoint时间设置

1)通常情况下,SecondaryNameNode每隔一小时执行一次。hdfs-default.xml

<property>
  <name>dfs.namenode.checkpoint.period</name>
  <value>3600</value>
</property>

2) 一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次

<property>
  <name>dfs.namenode.checkpoint.txns</name>
  <value>1000000</value>
<description>操作动作次数</description>
</property>

<property>
  <name>dfs.namenode.checkpoint.check.period</name>
  <value>60</value>
<description> 1分钟检查一次操作次数</description>
</property >

5.  DataNode工作机制

1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。

2)DataNode启动后向NameNode注册,通过后,周期性(6小时)的向NameNode上报所有的块信息。

DN向NN汇报当前解读信息的时间间隔,默认6小时;

<property>
	<name>dfs.blockreport.intervalMsec</name>
	<value>21600000</value>
	<description>Determines block reporting interval in milliseconds.</description>
</property>

DN扫描自己节点块信息列表的时间,默认6小时(Datanode通过crc校验和来比对传输过来的数据是否一致)

<property>
	<name>dfs.datanode.directoryscan.interval</name>
	<value>21600s</value>
	<description>Interval in seconds for Datanode to scan data directories and reconcile the difference between blocks in memory and on the disk.
	Support multiple time unit suffix(case insensitive), as described
	in dfs.heartbeat.interval.
	</description>
</property>

3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。

4)集群运行中可以安全加入和退出一些机器

 hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为

<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value>
</property>

<property>
    <name>dfs.heartbeat.interval</name>
    <value>3</value>
</property>

6. MapReduce概述

6.1 MapReduce定义

        MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。

        MapReduce核心功能是将用户编写的业务逻辑代码自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上

6.2 MapReduce 工作流程(**重要**)

MapReduce流程可以细分为mapTask阶段与reduceTask阶段

在map之后,reduce之后为shuffle

         上面的流程是整个MapReduce全工作流程,但是Shuffle过程只是从第7步开始到第16步结束,具体Shuffle过程详解,如下

  • 1MapTask收集我们的map()方法输出的kv对,放到内存缓冲区中
  • 2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件
  • 3)多个溢出文件会被合并成大的溢出文件
  • 4)在溢出过程及合并的过程中,都要调用Partitioner进行分区和针对key进行排序
  • 5ReduceTask根据自己的分区号,去各个MapTask机器上取相应的结果分区数据
  • 6ReduceTask会抓取到同一个分区的来自不同MapTask的结果文件,ReduceTask会将这些文件再进行合并(归并排序)
  • 7)合并成大文件后,Shuffle的过程也就结束了,后面进入ReduceTask的逻辑运算过程(从文件中取出一个一个的键值对Group,调用用户自定义的reduce()方法)

注意:

1Shuffle中的缓冲区大小会影响到MapReduce程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行速度就越快。

2)缓冲区的大小可以通过参数调整,参数:mapreduce.task.io.sort.mb默认100M

7. yarn 资源调度器

YARN主要由ResourceManagerNodeManagerApplicationMasterContainer等组件构成。

7.1 Yarn工作机制

1MR程序提交到客户端所在的节点。

2YarnRunnerResourceManager申请一个Application

3RM将该应用程序的资源路径返回给YarnRunner

4)该程序将运行所需资源提交到HDFS上。

5)程序资源提交完毕后,申请运行mrAppMaster

6RM将用户的请求初始化成一个Task

7)其中一个NodeManager领取到Task任务。

8)该NodeManager创建容器Container,并产生MRAppmaster

9)ContainerHDFS上拷贝资源到本地。

10MRAppmasterRM 申请运行MapTask资源。

11RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。

12MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTaskMapTask对数据分区排序。

13MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask

14ReduceTaskMapTask获取相应分区的数据。

15)程序运行完毕后,MR会向RM申请注销自己

7. Yarn调度器

         目前,Hadoop作业调度器主要有三种:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。Apache Hadoop3.1.3默认的资源调度器是Capacity Scheduler。

具体设置详见:yarn-default.xml文件

<property>
    <description>The class to use as the resource scheduler.</description>
    <name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

7.1 先进先出调度器(FIFO)

7.2 容量调度器(Capacity Scheduler)

7.3 公平调度器(Fair Scheduler)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值