DataNode心跳机制的作用讲解了DataNode的三个作用:

  1. register:当DataNode启动的时候,DataNode需要将自身的一些信息(hostname, version等)告诉NameNode,NameNode经过check后使其成为集群中的一员,然后信息维护在NetworkTopology
  2. block report:将block的信息汇报给NameNode,使得NameNode可以维护数据块和数据节点之间的映射关系
  3. 定期的send heartbeat
    1. 告诉NameNode我还活着,我的存储空间还有多少等信息
    2. 执行NameNode通过heartbeat传过来的指令,比如删除数据块

以上第1和第2个动作都是在DataNode启动的时候发生的,register的步骤主要功能是使得这个DataNode成为HDFS集群中的成员,DataNode注册成功后,DataNode会将它管理的所有的数据块信息,通过blockReport方法上报到NameNode,帮助NameNode建立HDFS文件数据块到DataNode的映射关系,这一步操作完成后,DataNode才正式算启动完成,可以对外提供服务了。

由于NameNode和DataNode之间存在主从关系,DataNode需要每隔一段时间发送心跳到NameNode,如果NameNode长时间收不到DataNode节点的心跳信息,那么NameNode会认为DataNode已经失效。NameNode如果有一些需要DataNode配合的动作,则会通过心跳返回给DataNode,心跳返回值是一个DataNodeCommand数组,它是一系列NameNode的指令,这样DataNode就可以根据指令完成指定的动作,比如HDFS文件的删除。

HDFS文件的删除

Java基本操作HDFS API的最后讲解了HDFS文件的删除原理,HDFS文件删除的示例代码如下:

package com.twq.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI; public class FileDeleter { public static void main(String[] args) throws IOException {
String dest = "hdfs://master:9999/user/hadoop-twq/cmd/java_writer.txt"; Configuration configuration = new Configuration();
FileSystem fileSystem = FileSystem.get(URI.create(dest), configuration); fileSystem.delete(new Path(dest), false);
}
}

  HDFS文件的删除很简单,我们看下HDFS文件删除的流程图:

流程图其实也是很简单,步骤如下:

  1. 客户端创建一个FileSystem实例
  2. 调用FileSystemdelete方法,这个时候会向NameNode发起删除文件的请求,这个时候在NameNode中会删除对应的文件的元数据,并将这个文件标记为删除,但是这个文件对应的数据块并不会删除
  3. 当需要删除的文件对应的数据块所在的DataNode向NaneNode发了心跳后,NameNode将需要删除这个文件对应数据块的指令通过心跳返回给DataNode,DataNode收到指令后才会真正的删除数据块

总结

DataNode预NabeNode之间的交互非常的简单,大部分都是DataNode到NameNode的心跳,考虑到一个规模的HDFS集群,一个名字节点会管理上千个DataNode,所以这样的设计也非常自然了。

HDFS中DataNode的心跳机制的更多相关文章

  1. HDFS中DataNode工作机制

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

  2. HDFS中NameNode管理元数据机制

    NameNode职责 响应客户端请求 维护目录树 管理元数据(查询,修改) HDFS元数据存储 内存中有一份完整的元数据(特定数据结构) 磁盘有一个“准完整”的元数据的镜像文件 当客户端对HDFS中的 ...

  3. 关于oracle的缓冲区机制与HDFS中的edit logs的某些关联性的思考

    可能大家会问,oracle和HDFS属于不同场景的存储系统,它们之间为什么会有联系呢?确实,从技术本身来看,他们确实无关联,但利用“整体学习”的思想,跳出技术本身,可以发现Oracle的缓冲区和HDF ...

  4. Netty(六):Netty中的连接管理(心跳机制和定时断线重连)

    何为心跳 顾名思义, 所谓心跳, 即在TCP长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 为什么需要心跳 因为网络的不可靠性, 有可 ...

  5. HDFS源码分析心跳汇报之DataNode注册

    HDFS源码分析心跳汇报之DataNode注册,近期推出!

  6. HDFS集群中DataNode的上线与下线

    在HDFS集群的运维过程中,肯定会遇到DataNode的新增和删除,即上线与下线.这篇文章就详细讲解下DataNode的上线和下线的过程. 背景 在我们的微职位视频课程中,我们已经安装了3个节点的HD ...

  7. hadoop的hdfs中的namenode和datanode知识总结

    一,NameNode: 1,  Namenode是中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的名称空间(namespace)以及客户端对文件的访问. 2, 文件操作,Namenod ...

  8. uni-app中websocket的使用 断开重连、心跳机制

    前言 最近关于H5和APP的开发中使用到了webSocket,由于web/app有时候会出现网络不稳定或者服务端主动断开,这时候导致消息推送不了的情况,需要客户端进行重连.查阅资料后发现了一个心跳机制 ...

  9. Netty 中的心跳机制

    在TCP长连接或者WebSocket长连接中一般我们都会使用心跳机制–即发送特殊的数据包来通告对方自己的业务还没有办完,不要关闭链接. 网络的传输是不可靠的,当我们发起一个链接请求的过程之中会发生什么 ...

随机推荐

  1. layui的select监听

    首先,select一定要放在<form class="layui-form" ></form>里面 然后,加监听<select id="id ...

  2. LeetCode 75. 颜色分类(Sort Colors) 30

    75. 颜色分类 75. Sort Colors 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中, ...

  3. java当中JDBC当中JNDI用来查找dataSource的例子

    [学习笔记] 8.JNDI用来查找dataSource的例子: import javax.naming.InitialContext;import javax.naming.Context; impo ...

  4. POJ 1661 Help Jimmy(C)动态规划

    没刷过 POJ,这题是论坛有人问的,我才看看. 我发现 POJ 注册很奇怪,账号总是登不上去,弄的我还注册两个.Emmm 首次体验很差,还好我不在 POJ 刷题. 题目链接:POJ 1661 Help ...

  5. logrus 剖析之滚动日志

    在实际开发过程中,为了节省磁盘,日志需要按照时间或者大小维度进行切割分成多分,归档过期的日志,删除久远的日志.这个就是在日常开发中经常遇见的日志滚动(log rotation) 那么在 logrus ...

  6. 可能这些是你想要的H5软键盘兼容方案

    前言 最近一段时间在做 H5 聊天项目,踩过其中一大坑:输入框获取焦点,软键盘弹起,要求输入框吸附(或顶)在输入法框上.需求很明确,看似很简单,其实不然.从实验过一些机型上看,发现主要存在以下问题: ...

  7. PMM--简介与部署

    一.PMM架构 Percona Monitoring and Management是percona一款开源的用于管理和监控MySQL 和MongoDB性能的开源平台,通过PMM客户端收集到的DB监控数 ...

  8. springboot打成jar包后无法解压

    springboot打成jar包后无法解压 Springboot打出来的jar,用压缩工具解压报错.Why? 先说解决办法. 1.解决办法 executable属性导致的,属性改成false后重新打包 ...

  9. Java调用WebService方法总结(7)--CXF调用WebService

    CXF = Celtix + XFire,继承了Celtix和XFire两大开源项目的精华,是一个开源的,全功能的,容易使用的WebService框架.文中所使用到的软件版本:Java 1.8.0_1 ...

  10. Web应用和Web框架

    一.Web应用 二.Web框架 三.wsgiref模块 一.Web应用 1.什么是Web应用? Web应用程序是一种可以通过Web访问的应用程序,特点是用户很容易访问,只需要有浏览器即可,不需要安装其 ...