`

Hadoop-DataNode分析

 
阅读更多

 

 

 

HDFS主要流程

客户端创建到namenode的文件与目录操作


客户端会调用FileSystem实现也就是DistributedFileSystem的mkdir()函数,之后DistributedFileSystem会通过IPC调用namenode的mkdir()

这个操作会持久化到日志中FSImage#saveFSImage(),之后返回

创建目录只是客户端和namenode交互,不会跟datanode交互

 

 

 

 

 

删除文件操作

操作类似mkdir(),但是删除操作只是删除namenode中的引用关系,并不会真正删除datanode中的数据,namenode和datanode只是维持简单的主从关系,namenode不会向datanode发起任何IPC操作,datanode的数据删除操作是通过心跳包DatanodeCommand向namenode报告后,然后才删除的

 

 

 

 

 

读取文件操作


1)客户端通过DistributedFileSystem打开文件,然后创建输入流FSDataInputStream返回给客户端

对HDFS来说具体的输入流是DFSInputStream,在DFSInputStream的构造函数中,输出流实例通过

2)ClientProtocol#getBlockLocation()以确定文件开始部分数据的保存位置,namenode保存着该副本块中的数据节点地址,通过网络拓扑工具类计算出离客户端最近的节点然后返回

3)之后客户端调用FSDataInputStream#read()读取文件数据,当达到块的末尾时,DFSInputStream会关闭和datanode的连接,然后namenode继续找到文件的后续部 分,依旧是寻找离客户端最近的节点再返回

4)客户端接续读取剩余部分然后通过FSDataInputSrream#close()关闭输入流

5)客户端读取的时候如果发生datanode故障或者网络等问题,会尝试读取下一个数据块的位置(namenode中记录了每个块对应的datanode全部副本,通过链表保存),同时客户端也会记录有问题的datanode

6)读数据的应答包中还包含了校验部分,如果校验有错误,客户端会通知给namenode,之后尝试从其他datanode中读取数据

7)由客户端联系namenode,能够将读取文件引起的数据传输,分散到集群的各个datanode上,这样读取大文件的时候,HDFS集群就可以支持大量的并发客户端,namenode只提供处理数据块定位请求,不提供具体数据

 

 

 

 

 

写文件操作

 
1)客户端调用create()创建文件,此时DistributedFileSystem创建DFSOutputStream,由它向namenode创建一个新的文件,namenode创建文件时需要做各种检查操作,完成后返回DFSOutputStream给客户端

2)写文件时首先向namenode申请数据块也就是调用addBlock(),执行成功后 返回一个LocatedBlock对象,这个对象中包含了新数据块标示和版本号等信息,通过这些信息DFSOutputStream就可以和datanode通讯

3)客户端写入的数据被分成一个个的文件包,放入DFSOutputStream对象内部,最后打包发送给datanode,然后根据流的形式继续发送给后续的datanode节点,其他datanode收到数据后会返回一个应答包,最后全部完成后返回给客户端

4)DFSOputStream写完一个数据块后,所有的datanode会通过DatanodeProtocol远程接口的blockReceived汇报给namenode,向namenode提交数据,为了减轻namenode压力汇报的数据也会放入队列等累积到一定量后再提交。如果客户端的队列中海油数据,DFSOputputStream需要再次调用addBlock()向文件添加新的数据块

5)客户端写完数据后就调用close(),之后DFSOputStream调用ClientProtocol#complete通知namenode关闭文件,这样就完成了一次正常写入文件操作

6)在写入过程中可能会出现一些datanode故障,默认只要有1个datanode写成功就会返程,后续会有定时器扫描到副本数小于3就开启复制

7)写入datanode故障后,写入队列的数据会重新添加到DFSOutputStream队列中,然后重新找一个datanode,新的datanode数据块会赋予新的版本号,之后如果有问题的datanode重启启动后会因为数据块版本号不匹配而删除。

 

 

 

 

 

datanode和namenode交互


1)datanode启动后会向namenode发送远程调用versionReuqest(),进行版本检查,保证HDFS版本一致

2)之后调用register向namenode注册 ,主要工作也是检查,确认该datanode是不是集群中的成员

3)注册成功后,datanode会将它管理的所有数据块信息,通过blockReport()上报到namenode,帮助namenode建立HDFS文件数据块到datanode节点的映射关系,这一步完成后数据节点才正式提供服务

一般来说只有namenode中的映射完成95%之后才离开安全模式,之间都是只读模式

4)datanode每隔一段时间发送心跳到namenode,如果namenode有一些需要datanode配合的动作,则返回DatanodeCommand数组,它包含一系列指令比如删除数据。datanode收到后就会真正删除数据

 

 

 

 

命名空间镜像检查点的产生



1)secondarynamenode会通过NamenodeProtocol#getEditLogSize()获取编辑文件大小,如果文件比较小则直接由namenode完成就行了

2)如果文件较大则调用rollEditLog()启动检查点过程,这时namenode会创建一个新的edits.new文件,后续对fsimage的改动都会记录到这个新的日志中

3)之后secondary通过HTTP方式下载fsimage和edits,将两个文件合并保存为fsimage.ckpt

4)namenode通过HTTP方式下载这个合并后的fsimage.ckpt文件

5)namenode将新的fsimage.ckpt覆盖原有的fsimage,同时将edits.new改为edit,这时编辑日志中的内容就是从合并后的fsimage.ckpt基础上增加的了

 

 

 

 

 

 

 

各节点之间的主要接口


1)客户端和namenode之间的接口 ClientProtocol,是HDFS客户访问文件系统的入口,客户端通过这个接口访问namenode,操作文件或目录打开文件,之后再跟datanode交互 

2)客户端和datanode之间的接口,客户端和datanode之间的交互主要通过流接口进行读/写,如果发生错误需要配合namenode完成

3)DatanodeProtocol是datanode和namenode之间的接口,在HDFS集群中,datanode节点通过这个接口不断的向namenode报告一些信息,同步信息到namenode,同时该接口的函数会返回一些信息通过这些信息,datanode会移动,删除,或者恢复磁盘上的数据块

4)InterDatanodeProtocol 这是datanode节点之间的接口,通过这个接口跟其他datanode通讯,恢复数据保证数据一致性

5)NamenodeProtocol 这是secondary跟namenode通讯的接口,secondary会定期获取namenode上的edits文件的变化然后做合并

6)其他比如跟安全相关的RefreshAuthorizationPolicyProtocol和RefreshUsrMappingProtocol

 

 

 

 

 

 

HDFS主要角色类图


 

 

 

 

 

datanode目录

blocksBeingWritten

该目录保存当前正在写的数据块,和位于tmp目录下保存的正在

写的数据块相比,这个目录写的是由客户端发起的

current

数据节点管理的最重要目录,保存已经写入HDFS文件系统的数据块,

也就是写操作已经结束的已提交的数据块,该目录还包含一些系统工作时

需要的文件

detach 用于配合数据节点升级,供数据块分离操作保存临时工作文件
tmp

该目录页保存着当前正在写的数据块,这里的写是由数据块复制引发的,

另一个数据节点正在发送数据到数据块中

storage

0.13版本以前的hadoop使用这个名称做目录保存数据块,这样做的目的

是防止旧的hadoop版本在新的集群上启动破坏系统

in_use.lock

表示目录已经被使用,实现了一种锁机制,如果停止数据节点该文件就会

消失

 

 

datanode的current目录

这里有数据块和meta后缀的校验信息文件,用来保存数据块的校验信息

当目录块中的数目超过64个,就会新生成一个目录

 

 

namenode目录

fsimage 元数据镜像文件
edits

日志文件,和元数据镜像文件一起,提供了一个完整

的HDFS目录树及元信息

fstime

保存了最近一次检查点的时间,检查点一般由第二名字节点

产生,是一次fsimage和对应edits合并的结果

VERSION 和数据节点类似,该文件保存了名字节点存储的一些属性
in_use.lock 和数据节点的这个文件功能一样,保存名字节点独占使用该目录
current目录 保存了最新的镜像内容
fsimage目录 跟current目录一样,是老版本是用的,是为了兼容考虑的
previous.checkpoint目录 保存名字及节点的上一次检查点

其中fsimage目录和edits目录是可以分开的

  • 大小: 42.1 KB
  • 大小: 48.2 KB
  • 大小: 66.9 KB
  • 大小: 79.5 KB
  • 大小: 34.7 KB
  • 大小: 99.4 KB
  • 大小: 56.4 KB
  • 大小: 56.1 KB
  • 大小: 25.8 KB
  • 大小: 208.8 KB
  • 大小: 17.9 KB
分享到:
评论

相关推荐

    hadoop 源码解析-DataNode

    hadoop 源码解析-DataNode

    Hadoop-2.8.0分布式安装手册

    当前版本的Hadoop已解决了hdfs、yarn和hbase等单点,并支持自动的主备切换。  本文的目的是为当前最新版本的Hadoop 2.8.0提供最为详细的安装说明,以帮助减少安装过程中遇到的困难,并对一些错误原因进行说明,hdfs...

    hadoop-管理

    1.处理hadoop的datanode宕机 cd path/to/hadoop 走到hadoop的bin目录 ./hadoop-daemon.sh start datanode ./hadoop-daemon.sh start tasktracker 2.处理hadoop的namenode宕机 ./hadoop-daemon.sh start namenode...

    Hadoop-ha集群搭建

    HadoopHA集群搭建描述及指令,里面有各种注意事项。 集群部署节点角色的规划(3节点) ------------------ server01 namenode resourcemanager zkfc nodemanager datanode zookeeper journal node server02 ...

    python 零基础学习篇-07.HDFS的命令行户端基本操作--DATANODE存储文件块的观察.mp4

    python 零基础学习篇-07.HDFS的命令行户端基本操作--DATANODE存储文件块的观察.mp4

    hadoop安装

    1.a1 192.168.9.1 (master) a2 192.168.9.2 (slave1) a3 192.168.9.3 (slave2) 修改/etc/hosts 2.3台机器 创建hadoop 用户 ...[hadoop@a1 hadoop-0.20.2-cdh3u5]$ bin/hadoop dfsadmin -report

    hadoop3.3.3-winutils

    hadoop基于linux开发和布署运行,故不能将hadoop环境原始运行在windows上。 操作系统环境差异说明 因为模拟linux环境,所以在linux原生环境中就不需要他了 在windows环境中需要配置 如何配置: 配置到运行环境当前目录...

    hadoop-2.7.2.rar

    hadoop-2.7.2安装包,解压至/opt/...启动HDFS只需要敲入命令行:sbin/hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode 启动YARN: sbin/yarn-daemon.sh start|stop resourcemanager|nodemanager

    大数据组件-监控-hadoop-datanodes的prometheus模板插件

    大数据组件-监控-hadoop-datanodes的prometheus模板插件

    hadoop-HA搭建+hbase.docx

    初学Hadoop时试验搭建很多次的集群部署方案,步骤很详细。hadoop-2.6.5.tar.gz zookeeper-3.4.10.tar.gz Hbase1.2.6 ,两个nameNode+三dataNode

    hadoop-formula

    哪些服务hadoop最终在给定主机上运行取决于盐粒定义的角色: hadoop_master将运行hadoop-namenode和hadoop-secondarynamenode服务hadoop_slave将运行hadoop-datanode服务roles: - hadoop_slave hadoop.mapred 安装...

    hadoop-2.4.1安装软件包以及教程jdk.zip

    27512 DataNode http://192.168.1.101:50070 (HDFS管理界面) http://192.168.1.101:8088 (MR管理界面) 4.配置ssh免登陆 #生成ssh免登陆密钥 #进入到我的home目录 cd ~/.ssh ssh-keygen -t rsa (四...

    Hadoop源码分析- RPC DataNode

    NULL 博文链接:https://zqhxuyuan.iteye.com/blog/1879292

    Hadoop datanode启动失败:Hadoop安装目录权限的问题

    Hadoop datanode启动失败:Hadoop安装目录权限的问题

    【大数据】Hadoop常用启动命令.pdf

    daemons.sh start namenode 单独启动NameNode守护进程 hadoop-daemons.sh stop namenode 单独停⽌NameNode守护进程 hadoop-daemons.sh start datanode 单独启动DataNode守护进程 hadoop-daemons.sh stop datanode ...

    Hadoop-Cluster-Install-.zip_hadoop_hadoop cluster

    Hadoop在centOS系统下的安装文档,系统是虚拟机上做出来的,一个namenode,两个datanode,详细讲解了安装过程。

    Hadoop集群datanode磁盘不均衡的解决方案

    因业务需要搭建一个新hadoop集群,并将老的hadoop集群中的数据迁移至新的hadoop集群,而且datanode节点不能全部上线,其中还可能会出现节点上线或下线的情况,这个时候就很容易出现机器与机器之间磁盘的均衡的情况,...

    CentOS下Hadoop-0.20.2集群配置文档

    集群包含三个节点:1 个namenode,2 个datanode,节点之间局域网连接,可以相互ping通,三台节点上均是CentOS系统,并且有一个相同的用户hadoop(具有管理员权限)!

    hadoop-hdfs:Hadoop分布式文件系统hdfs代码分析

    hadoop-hdfs Hadoop分布式文件系统hdfs代码分析目录介绍Datanode-数据块基本结构主要介绍了HDFS中第二关系块结构,数据块到数据中断的映射关系。退役-中断退款主要介绍了数据异步下线取消机制。INode-文件目录结构...

    Hadoop集群搭建-完全分布式

    site.xml(hadoop核心配置)hdfs-site.xml(分布式文件系统HDFS相关配置)mapred-site.xml(MapReduce相关配置)yarn-site.xml(Yarn相关配置)slaves文件(里面写从节点所在的主机名,会在这些主机上启动DataNode)...

Global site tag (gtag.js) - Google Analytics