HDFS DataNode详解
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详解的更多相关文章
- HDFS体系结构(NameNode、DataNode详解)
hadoop项目地址:http://hadoop.apache.org/ NameNode.DataNode详解 (一)分布式文件系统概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配 ...
- hadoop hdfs uri详解
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- hadoop之hdfs命令详解
本篇主要对hadoop命令和hdfs命令进行阐述,yarn命令会在之后的文章中体现 hadoop fs命令可以用于其他文件系统,不止是hdfs文件系统内,也就是说该命令的使用范围更广可以用于HDFS. ...
- hadoop之hdfs架构详解
本文主要从两个方面对hdfs进行阐述,第一就是hdfs的整个架构以及组成,第二就是hdfs文件的读写流程. 一.HDFS概述 标题中提到hdfs(Hadoop Distribute File Syst ...
- DataNode 详解及HDFS 2.X新特性
1. 工作机制 一个数据块在 DataNode 上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳. DataNode 启动后向 Name ...
- Hadoop(10)-HDFS的DataNode详解
1.DataNode工作机制 1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳. 2)DataNode启 ...
- kettle连接hadoop&hdfs图文详解
1 引言: 项目最近要引入大数据技术,使用其处理加工日上网话单数据,需要kettle把源系统的文本数据load到hadoop环境中 2 准备工作: 1 首先 要了解支持hadoop的Kettle版本情 ...
- HDFS入门详解
一. 前提和设计目标 1. 硬件错误是常态,因此需要冗余,这是深入到HDFS骨头里面去了 HDFS可能由成百上千的服务器所构成,每个服务器上存储着文件系统的部分数据.我们面对的现实是构成系统的组件数目 ...
- Hadoop分布式文件系统(HDFS)详解
HDFS简介: 当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区 (partition)并存储到若干台单独的计算机上.管理网络中跨多台计算机存储的文件系统成为分布式文件系统 (D ...
随机推荐
- @EnableWebMvc WebMvcConfigurer CorsConfig
package me.zhengjie.core.config; import org.springframework.context.annotation.Configuration; import ...
- idea出现 Unable to open debugger port (127.0.0.1:xxxx): java.net.SocketException "socket closed" 解决方案
第一种:重启电脑,太费劲: 第二种: 1)根据端口号找到进程pid netstat -aon|findstr "1099" 2)杀掉进程pid即可 netstat -aon|fin ...
- java 变量分类
转:https://blog.csdn.net/suneqing/article/details/37909811 1.按被声明的位置划分 局部变量:方法和语句块内定义的的变量.(在定义局部变量时,必 ...
- 计算机BIOS的简单设置(要安装Linux需关闭Security Boot选项)
计算机BIOS的简单设置(要安装Linux需关闭Security Boot选项) 发布时间:2016-12-07 22:46:19来源:linux网站作者:乐百川 BIOS是什么 BIOS全称是基本输 ...
- spring学习笔记四:AOP
AOP(Aspect Orient Programming),面向切面编程,是对面向对象编程OOP的一种补充 面向对象编程使用静态角度考虑程序的结构,而面向切面编程是从动态角度考虑程序运行过程 AOP ...
- 题解:线性规划与网络流24题 T2 太空飞行计划问题
太空飞行计划问题 问题描述 W教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需要 ...
- 接口测试-chap5-使用正则表达式提取响应数据
1.导入相关库 import re 2.re.findall(r"前(.+?)后", 匹配源) 3.前:表示要匹配的文本左边的内容 4.后:表示要匹配的文本右边的内容 5.它的返回 ...
- php--判断是否是手机端
function is_mobile_request(){ $_SERVER['ALL_HTTP'] = isset($_SERVER['ALL_HTTP']) ? $_SERVER['ALL_HTT ...
- 吴裕雄--天生自然 R语言开发学习:广义线性模型(续一)
#----------------------------------------------# # R in Action (2nd ed): Chapter 13 # # Generalized ...
- MyBatis like (模糊查询)
select * from user where user_name like concat('%',#{userName},'%'); select * from user where user_n ...