Welche Rolle spielen NameNode und DataNode in HDFS?

Welche Rolle spielen NameNode und DataNode in HDFS?

In HDFS (Hadoop Distributed File System) sind NameNode und DataNode zwei Schlüsselkomponenten, die unterschiedliche Rollen spielen.

  1. NameNode:

    • NameNode ist eine der Hauptkomponenten von HDFS und für die Verwaltung des Namespace und der Metadaten des Dateisystems verantwortlich.
    • NameNode verwaltet die Verzeichnisstruktur des gesamten Dateisystems, die Attributinformationen von Dateien und Verzeichnissen sowie die Zuordnungsbeziehung zwischen Dateien und Blöcken.
    • Der NameNode ist auch für die Bearbeitung von Client-Dateisystembetriebsanforderungen verantwortlich, z. B. für das Erstellen, Löschen, Umbenennen und Verschieben von Dateien.
    • Der NameNode speichert Metadaten im Speicher und speichert sie für Persistenz und Fehlertoleranz in Namespace-Bilddateien und Bearbeitungsprotokolldateien auf der Festplatte.
    • Der NameNode ist außerdem für die Überwachung und Verwaltung des Status des DataNode sowie für die Koordinierung der Replikations- und Fehlerwiederherstellungsvorgänge von Datenblöcken verantwortlich.
  2. DataNode:

    • DataNode ist eine weitere wichtige Komponente von HDFS und ist für die Speicherung der eigentlichen Datenblöcke verantwortlich.
    • Der DataNode speichert Datenblöcke auf der lokalen Festplatte und führt Kopier- und Löschvorgänge von Datenblöcken gemäß den Anweisungen des NameNode durch.
    • Der DataNode ist außerdem dafür verantwortlich, die von ihm gespeicherten Datenblockinformationen regelmäßig an den NameNode zu melden, einschließlich Standort, Größe und Status des Blocks.
    • DataNode ist auch für die Verarbeitung von Lese- und Schreibanforderungen für Clientdaten sowie für die Übertragung und das Kopieren von Datenblöcken mit anderen DataNodes verantwortlich.

Das Folgende ist ein einfacher Beispielcode, der die Rolle von NameNode und DataNode in HDFS demonstriert:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HdfsExample {
    
    

  public static void main(String[] args) throws Exception {
    
    
    // 创建Hadoop配置对象
    Configuration conf = new Configuration();

    // 创建文件系统对象
    FileSystem fs = FileSystem.get(conf);

    // 在HDFS上创建一个目录
    Path dirPath = new Path("/user/mydir");
    fs.mkdirs(dirPath);

    // 在HDFS上创建一个文件,并写入数据
    Path filePath = new Path("/user/myfile.txt");
    FSDataOutputStream outputStream = fs.create(filePath);
    outputStream.writeBytes("Hello, HDFS!");
    outputStream.close();

    // 从HDFS上读取文件内容
    FSDataInputStream inputStream = fs.open(filePath);
    byte[] buffer = new byte[1024];
    int bytesRead = inputStream.read(buffer);
    String content = new String(buffer, 0, bytesRead);
    inputStream.close();

    System.out.println("File content: " + content);

    // 删除HDFS上的文件和目录
    fs.delete(filePath, false);
    fs.delete(dirPath, true);

    // 关闭文件系统对象
    fs.close();
  }
}

Im obigen Beispiel verwenden wir Java-Code, um HDFS über die Hadoop-API zu betreiben. Zuerst haben wir ein Konfigurationsobjekt erstellt, um die Konfigurationsinformationen des Hadoop-Clusters anzugeben. Anschließend erhalten wir über die Methode FileSystem.get() ein FileSystem-Objekt, das die Verbindung zu HDFS darstellt.

Als nächstes verwenden wir das FileSystem-Objekt, um ein Verzeichnis (Methode mkdirs()) und eine Datei (Methode create()) zu erstellen und Daten in die Datei zu schreiben. Dann verwenden wir die Methode open(), um die Datei zu öffnen und die darin enthaltenen Daten zu lesen. Abschließend löschen wir Dateien und Verzeichnisse mit der Methode delete().

In diesem Prozess ist der NameNode für die Verarbeitung von Anforderungen für Vorgänge wie das Erstellen von Verzeichnissen, das Erstellen von Dateien, das Löschen von Dateien und das Löschen von Verzeichnissen sowie für die Pflege der Metadaten des Dateisystems verantwortlich. Der DataNode ist für das Speichern der tatsächlichen Datenblöcke der Datei und das Durchführen von Kopier- und Löschvorgängen von Datenblöcken verantwortlich. Auf diese Weise erreicht HDFS ein äußerst zuverlässiges, fehlertolerantes und skalierbares verteiltes Dateisystem.

おすすめ

転載: blog.csdn.net/qq_51447496/article/details/132758222