一、HDFS原理
1-1 HDFS元数据
元数据包含的内容
文件和目录的自身属性信息:这包括文件名、目录名、文件大小、创建时间、修改时间等。这些信息用于描述和组织具体的文件内容。
文件内容存储相关信息:这包括文件的分块信息、副本个数以及每个副本所在的DataNode信息等。
元数据的存储形式
内存元数据:
为了保证用户操作元数据交互高效,延迟低,NameNode把所有的元数据都存储在内存中,我们叫做内存元数据。内存中的元数据是最完整的,包括文件自身属性信息、文件块位置映射信息。 但是内存的致命问题是,断电数据丢失,数据不会持久化。因此SecondaryNameNode辅助NameNode进行元数据持久化保存
元数据文件
-
fsimage内存镜像文件
fsimage文件其实是Hadoop文件系统元数据的一个永久性的检查点,其中包含Hadoop文件系统中的所有目录和文件idnode的序列化信息;fsimage包含Hadoop文件系统中的所有目录和文件idnode的序列化信息;对于文件来说,包含的信息有修改时间、访问时间、块大小和组成一个文件块信息等;而对于目录来说,包含的信息主要有修改时间、访问控制权限等信息。
1-2 checkpoint机制
checkpont机制也叫作检查点机制,用来检查是否触发进行元数据持久处理
检查的时间间隔是60s
检查的条件如下
条件一 距离上一次保存时间过去了1个小时
条件二 文件的事务操作(文件写入,文件修改,文件删除)达到了100万次
以上两个条件满足任意一个,就会触发snn进行元数据的持久化,更新fsimage镜像文件
持久化的流程
1-NameNode管理着元数据信息,其中有两类持久化元数据文件:edits操作日志文件和fsimage元数据镜像文件。新的操作日志不会立即与fsimage进行合并,也不会刷到NameNode的内存中,而是会先写到edits中(因为合并需要消耗大量的资源),操作成功之后更新至内存。
2-有dfs.namenode.checkpoint.period和dfs.namenode.checkpoint.txns 两个配置,只要达到这两个条件任何一个,secondarynamenode就会执行checkpoint的操作。
3-当触发持久化操作时,NameNode会生成一个新的edits即edits.new文件,同时SecondaryNameNode会将edits文件和fsimage复制到本地(HTTP GET方式)。
4-secondarynamenode将下载下来的fsimage载入到内存,然后一条一条地执行edits文件中的各项更新操作,使得内存中的fsimage保存最新,这个过程就是edits和fsimage文件合并,生成一个新的fsimage文件即上图中的Fsimage.ckpt文件。
5-secondarynamenode将新生成的Fsimage.ckpt文件复制到NameNode节点。
6-在NameNode节点的edits.new文件和Fsimage.ckpt文件会替换掉原来的edits文件和fsimage文件,至此刚好是一个轮回,即在NameNode中又是edits和fsimage文件。
7-等待下一次checkpoint触发SecondaryNameNode进行工作,一直这样循环操作。
1-3 安全机制
安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求,是一种保护机制,用于保证集群中的数据块的安全性。
如果HDFS处于安全模式下,不允许HDFS客户端进行任何修改文件的操作,包括上传文件,删除文件,重命名,创建文件夹,修改副本数等操作。
在hdfs启动后默认是在安全模式,该模式会检查各个块信息,只有确认块数据完整后会退出安全模式
退出安全模式的条件
1-每个数据块最小副本数量,默认为1. 在上传文件时,达到最小副本数,就认为上传是成功的。
2-达到最小副本数的数据块的百分比。默认为0.999f。 99.999%
3-离开安全模式的最小可用datanode数量要求,默认为0,也就是即使所有datanode都不可用,仍然可以离开安全模式
4-集群可用block比例,可用datanode都达到要求之后,如果在extension配置的时间段之后依然能满足要求,此时集群才离开安全模式。单位为毫秒,默认为30000.也就是当满足条件并且能够维持30秒之后,离开安全模式
因为虚拟机的非正常关机,造成块的数据丢失,就进入安全模式
安全模式的指令操作
# 离开安全模式,但是如果块数丢失较多无法离开 hdfs dfsadmin -safemode leave # 强制退出 hdfs dfsadmin -safemode forceExit
1-4 归档机制
大量的kb文件
每个小文件单独存放到hdfs中(占用一个block块),那么hdfs就需要依次存储每个小文件的元数据信息,相对来说浪费资源
hadoop archive -archiveName 归档名称.har -p 原始文件的目录 归档文件的存储目录
hadoop archive -archiveName test.har -p /data / hdfs dfs -ls /test.har # 解压查看har的要做包 hdfs dfs -ls har:///test.har
二、MapReduce的计算过程
分布式计算框架
需要编写代码执行,执行时会数据所在服务器上运行相同的计算代码
计算过程分为map 和reduce过程
map对多份数据进行拆分计算
reduce将分开的map结果合并一起计算
map的计算程序数量由文件块个数据决定,每个map计算一个块的数据
reduce的个数默认是一个;在进行数据拆分存储时,reduce个数由分区数和分桶数决定
Map阶段
1-按照块数量进行split的块数据读取
2-split切割后的数据传递给对应的map进行处理,会对数据转为kv (张三,1) (张三,1),(李四,1)
3-map将处理的后的数据写入buffer缓存区
4-对缓冲区内的数据进行spill溢出(读取缓冲区内的数据)
5-对读取的数据进行分区partition,将数据拆分多份
6-对每份拆分的数据进行排序 sort
7-将拆分的数据写入不同的文件
8-在将每次溢出的数据文件merge合并在一起,保存同一文件,文件是临时文件,计算后会删除
Reduce阶段
1-根据的分区数创建出多个reduce
2-每个reduce从不同的map中(fetch)获取相同分区的文件数据
3-在将(fetch)后的文件合并,对合并后的数据进行排序
4-reduce对合并后的文件数据进行计算
5-reduce对结果输出到hdfs的目录下
shuffle过程
shuffle过程就是map将数据传递reduce的过程,实现map数据的交换传递给reduce计算
中间过程会经历分区(partition),排序(sort),合并(merge)
三、Yarn的资源调度
分布式资源调度,管理整个hadoop集群的所有服务器资源
-
ResourceManger
-
负责处理所有计算资源申请
-
-
NodeManager
-
负责资源空间(container)的创建
-
-
ApplicationMaster
-
管理计算任务,只有产生了mapreduce计算才会运行ApplicationMaster
-
负责具体的资源分配
-
map使用多少
-
reduce使用多少
-
-
yarn的资源调度流程
1-mapreduce提交计算任务给RM(ResourceManager)
2-RM中的applicationmanager负责创建applicationMaster进程
3-applicationMaster和applicationmanager保持通讯
4-applicationMaster找RM中的ResourceScheduler(资源调度器)申请计算需要的资源
5-applicationMaster通知对应的NodeManger创建资源空间container
6-在资源空间中先运行map阶段的计算,先运行reduce阶段的计算
7-map和reduce运行期间会将自身状态信息汇报给applicationMaster
8-计算完成后,applicationMaster通知NodeManger释放资源
9-资源释放后再通知applicationmanager把自身(applicationMaster)关闭释放资源
yarn的资源调度策略
当有多个计算任务同时请求yarn进行计算,如何分配资源给每个计算任务?
-
先进先出
-
谁先抢到资源谁使用所有资源
-
资源利用效率低
-
如果遇到一个计算时间较长的任务,保资源占用后。其他的任务就无法计算
-
-
容量调度
-
将资源分成多份
-
不同计算任务使用不同的资源大小
-
-
-
公平调度
-
资源全部给一个计算任务使用,但是当计算任务中的某个map或reduce计算完成后,可以将自身资源释放掉给其他计算任务使用
-
5个map,其中有两个map计算完成,就可以先释放掉两个资源,给他任务使用,不同等待所有任务计算完成在释放
-
-