HDFS中DataNode的心跳機制


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,所以這樣的設計也非常自然了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM