1. datanode介绍

1.1 datanode

datanode是负责当前节点上的数据的管理,具体目录内容是在初始阶段自动创建的,保存的文件夹位置由配置选项{dfs.data.dir}决定

1.2 datanode的作用

datanode以数据块的形式存储HDFS文件

datanode响应HDFS 客户端读写请求

datanode周期性向NameNode汇报心跳信息,数据块信息,缓存数据块信息

1.3 datanode的多目录配置

datanode也可以配置多个目录,每个目录存储的数据不一样,数据不是副本

(见:https://www.cnblogs.com/cjq10029/p/12368074.html)

<property>        #hdfs-site.xml
<name>dfs.datanode.data.dir</name>
<value>/sdb1/data,/opt/software/hadoop277/tmp/data</value>
</property>

1.4 datanode的逻辑结构

我们可以将基于Federation的架构的HDFS分为三层:数据层,逻辑层和服务层

1.4.1 数据层

将DataNode 中负责数据块存储和管理数据块操作的部分抽象成数据层,它主要包括2部分:

1.4.1.1 DataStorage(数据块存储)

数据块存储主要是管理DataNode磁盘存储空间以及磁盘存储空间的生命周期。说的直白一点就是DataStorage这个类主要负责管理数据存储文件信息,比如current,detach,finalized等等文件。

BlockPoolSliceStorage可以用来管理DataNode每一个单独的块池,DataStorage会持有这个BlockPoolSliceStorage对象引用,并通过这个引用来管理DataNode的块池。

1.4.1.2 FSDataset(文件系统数据集)

FSDataset抽象了DataNode对数据块管理的操作,比如创建数据块,维护数据块文件等。我们知道每一个DataNode都可以配置多个不同类型的存储目录来保存数据,所以HDFS定义了FSVolumeImpl来管理DataNode上单个存储目录上    保存的数据块,同时定义了FSVo

lumeList来维护DataNode上所有FSVolumeImpl对象的引用。FSDataSet会通过FSVolumeList提供的管理功能来管理DataNode上存储的目录保存的数据块

1.4.2 逻辑层

DataNode基于数据层会执行很多HDFS 逻辑处理,比如向NameNode汇报数据块状态,发送心跳,扫描损坏的数据块等,我们将HDFS执行这些逻辑的部分抽象成逻辑层。逻辑层主要包括三个模块:

1.4.2.1 BlockPoolManager

BlockPoolManager是管理所有BlockPool的接口类,在HDFS Federation机制下,我们在集群可以创建多个NameSpace,每一个NameSpace都对应着一个BlockPool,一个BlockPoolManager会持有一个BPOfferService对象,用于管理DataNode单个BlockPool, 我们知道,如果引入HA机制, NameNode就会有ActiveNM 和 StandbyNM。所以每一个BPOfferService又会持有2个BPServiceActor对象,每一个BPServiceActor对应于命名空间里的一个Name Node,该对象负责向NameNode发送心跳报告,数据块汇报,缓存汇报等

1.4.2.2 DataBlockScanner

一个周期性扫描每一个数据块并检查数据块校验是否正常的一个线程

1.4.2.3 DirectoryScanner

周期性扫描磁盘数据块,对比内存中元数据与实际磁盘存储数据块的差异,并根据差异更新内存元数据,使得与磁盘保存一致

1.4.3 服务层

主要用于客户端或者其他节点和DataNode通信,以及访问DataNode状态等功能,主要包括三个模块:

1.4.3.1 HttpServer: 对外提供http服务

1.4.3.2 ipcServer:RPC服务端,响应来自客户端,NameNode和其他DataNode的rpc请求

1.4.3.3 DataXceiverServer:输出传输服务端,响应来自客户端以及其他Data Node的流式接口请求

1.5 datanode工作机制

datanode启动时,每个datanode对本地磁盘进行扫描,将本datanode上保存的block信息汇报给namenode

namenode在接收到的block信息以及该block所在的datanode信息等保存在内存中。

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

通过向NameNode发送心跳保持与其联系(3秒一次),心跳返回结果带有NN的命令,返回的命令为:如块的复制,删除某个数据块…..

如果10分钟没有收到DataNode的心跳,则认为其已经lost,并copy其上的block到其它DataNode

DN在其文件创建后三周进行验证其checkSum的值是否和文件创建时的checkSum值一致

DataNode之间还会相互通信,执行数据块复制任务。同时,在客户端执行写操作的时候,DataNode之间需要相互配合,以保证写操作的一致性

逻辑结构原文链接:https://blog.csdn.net/zhanglh046/article/details/78599095

HDFS DataNode详解的更多相关文章

  1. HDFS体系结构(NameNode、DataNode详解)

    hadoop项目地址:http://hadoop.apache.org/ NameNode.DataNode详解 (一)分布式文件系统概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配 ...

  2. hadoop hdfs uri详解

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  3. hadoop之hdfs命令详解

    本篇主要对hadoop命令和hdfs命令进行阐述,yarn命令会在之后的文章中体现 hadoop fs命令可以用于其他文件系统,不止是hdfs文件系统内,也就是说该命令的使用范围更广可以用于HDFS. ...

  4. hadoop之hdfs架构详解

    本文主要从两个方面对hdfs进行阐述,第一就是hdfs的整个架构以及组成,第二就是hdfs文件的读写流程. 一.HDFS概述 标题中提到hdfs(Hadoop Distribute File Syst ...

  5. DataNode 详解及HDFS 2.X新特性

    1. 工作机制 一个数据块在 DataNode 上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳. DataNode 启动后向 Name ...

  6. Hadoop(10)-HDFS的DataNode详解

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

  7. kettle连接hadoop&hdfs图文详解

    1 引言: 项目最近要引入大数据技术,使用其处理加工日上网话单数据,需要kettle把源系统的文本数据load到hadoop环境中 2 准备工作: 1 首先 要了解支持hadoop的Kettle版本情 ...

  8. HDFS入门详解

    一. 前提和设计目标 1. 硬件错误是常态,因此需要冗余,这是深入到HDFS骨头里面去了 HDFS可能由成百上千的服务器所构成,每个服务器上存储着文件系统的部分数据.我们面对的现实是构成系统的组件数目 ...

  9. Hadoop分布式文件系统(HDFS)详解

    HDFS简介: 当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区 (partition)并存储到若干台单独的计算机上.管理网络中跨多台计算机存储的文件系统成为分布式文件系统 (D ...

随机推荐

  1. vue表格业务

    https://www.jianshu.com/p/79f39f2c1382 https://blog.csdn.net/zhongshijun521/article/details/78390614 ...

  2. Springboot实现发送邮箱

    https://blog.csdn.net/xubin1623875795/article/details/78967141 http://www.cnblogs.com/jmcui/p/975844 ...

  3. OpenSSL之X509系列

    OpenSSL之X509系列之1---引言和X509概述 [引言]    X509是系列的函数在我们开发与PKI相关的应用的时候我们都会用到,但是OpenSSL中对X509的描述并不是很多,鉴于些,我 ...

  4. jstl之核心标签

    JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...

  5. webstorm active code

    6ZUMD7WWWU-eyJsaWNlbnNlSWQiOiI2WlVNRDdXV1dVIiwibGljZW5zZWVOYW1lIjoiSmV0cyBHcm91cCIsImFzc2lnbmVlTmFtZ ...

  6. js编写trim()函数

    1.js中本身是没有trim函数的,不过你可以自己写一个 function trim(str) {     var newStr = str.replace(/^\s*$/g,'')     retr ...

  7. 用shell脚本新建文件并自动生成头说明信息

    目标: 新建文件后,直接给文件写入下图信息 代码实现: [root@localhost test]# vi AutoHead.sh #!/bin/bash #此程序的功能是新建shell文件并自动生成 ...

  8. numpy的索引

    import numpy as np A =np.arange(3,15).reshape(3,4) print(A) #第一行 print(A[2]) #返回元素 print(A[1][2]) pr ...

  9. Python知识点总结及其介绍链接

    Python 弱引用(不会增加引用计数的引用,可以用来做对象缓存,避免循环引用导致内存无法回收):http://python.jobbole.com/85431/ from future import ...

  10. arm-eabi-addr2line工具跟踪Android调用堆栈

    使用arm-eabi-addr2line工具跟踪Android调用堆栈作者:liangshengyang转自:http://www.linuxidc.com/Linux/2011-01/31803.h ...