国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用

這篇具有很好參考價(jià)值的文章主要介紹了Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、HDFS的組成

1、NameNode

  • 存儲(chǔ)整個(gè)HDFS集群的元數(shù)據(jù)(metaData) —— 整個(gè)集群中存儲(chǔ)的目錄和文件的索引
  • 管理整個(gè)HDFS集群
  • 接收客戶端的請(qǐng)求
  • 負(fù)責(zé)節(jié)點(diǎn)的故障轉(zhuǎn)移

2、DataNode

  • 存儲(chǔ)數(shù)據(jù),是以block塊的形式進(jìn)行數(shù)據(jù)的存放。
  • 默認(rèn)情況下block塊的大小是128M。
  • blocksize大小的計(jì)算公式:
    • 尋址時(shí)間:下載文件時(shí)找到文件的時(shí)間;尋址時(shí)間是傳輸時(shí)間的1%的時(shí)候是最佳的狀態(tài);hdfs的尋址時(shí)間平均是10ms
    • 數(shù)據(jù)傳輸速度:100M/s
  • 定時(shí)負(fù)責(zé)匯總整個(gè)節(jié)點(diǎn)上存儲(chǔ)的block塊的信息,然后給NN匯報(bào)。
  • 負(fù)責(zé)和客戶端連接進(jìn)行文件的讀寫操作。

3、SecondaryNameNode

  • 輔助NameNode去完成edits編輯日志和fsimage鏡像文件的合并操作。

4、客戶端:命令行/Java API

  • 負(fù)責(zé)和HDFS集群進(jìn)行通信實(shí)現(xiàn)文件的增刪改查
  • 負(fù)責(zé)進(jìn)行block塊的分割

二、HDFS的基本使用

HDFS是一個(gè)分布式文件存儲(chǔ)系統(tǒng),可以存儲(chǔ)數(shù)據(jù)(文件數(shù)據(jù)),HDFS既然是一個(gè)文件系統(tǒng),那么就可以進(jìn)行文件的上傳、下載、刪除、創(chuàng)建文件夾等等

HDFS給我們提供了兩種操作的方式:①命令行來操作②通過Java API來進(jìn)行操作

1、命令行操作

命令行操作
hdfs dfs -xxxx xxxxx 或者 hadoop fs -xxxx xxxxx
查看 —— hdfs dfs -ls/
新建 —— hdfs dfs -mkdir /demo
上傳 —— hdfs dfs -put jdk-8u371-linux-x64.tar.gz /demo
上傳并刪除Linux本地內(nèi)容 —— hdfs dfs -moveFromLocal hadoop-3.1.4.tar.gz /demo
下載 —— hdfs dfs -getToLocal /demo/hadoop-3.1.4.tar.gz /opt/software
下載 —— hdfs dfs -copyToLocal /demo/hadoop-3.1.4.tar.gz /opt/software
刪除 —— hdfs dfs -rm -r /demo

2、Java API操作

引入Hadoop的編程依賴(hadoop-client、hadoop-hdfs)到pom.xml中:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.kang</groupId>
  <artifactId>hdfs-study</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>hdfs-study</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <hadoop.version>3.1.4</hadoop.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>compile</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>${hadoop.version}</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs</artifactId>
      <version>${hadoop.version}</version>
    </dependency>
  </dependencies>
</project>
  • hdfs的基本操作
/**
 * HDFS的編程流程
 *   1、創(chuàng)建Hadoop的配置文件對(duì)象,配置文件對(duì)象指定HDFS的相關(guān)連接配置
 *        配置文件對(duì)象等同于hadoop的etc/hadoop目錄下的哪些xxx.xml配置
 *   2、根據(jù)配置獲取和HDFS的連接
 *   3、連接去操作HDFS集群
 */

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

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class Demo {
    public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
        //1、創(chuàng)建Hadoop的配置文件Configuration對(duì)象
        Configuration conf = new Configuration();
        //2、根據(jù)配置文件獲取HDFS的連接 FileSystem
        FileSystem system = FileSystem.get(new URI("hdfs://192.168.31.104:9000"), conf, "root");
        //3、根據(jù)System去操作HDFS集群了
        RemoteIterator<LocatedFileStatus> listedFiles = system.listFiles(new Path("/"), false);
        while(listedFiles.hasNext()){
            LocatedFileStatus fileStatus = listedFiles.next();
            System.out.println("文件的路徑" + fileStatus.getPath());
            System.out.println("文件的所屬用戶" + fileStatus.getOwner());
            System.out.println("文件的權(quán)限" + fileStatus.getPermission());
            System.out.println("文件的blocksize" + fileStatus.getBlockSize());
        }
    }
}

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * 單元測(cè)試
 */
public class HDFSTest {
    public FileSystem fileSystem;

    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        //1、創(chuàng)建Hadoop的配置文件Configuration對(duì)象
        Configuration conf = new Configuration();
        conf.set("dfs.replication","1");
        //2、根據(jù)配置文件獲取HDFS的連接 FileSystem
        fileSystem = FileSystem.get(new URI("hdfs://192.168.31.104:9000"), conf, "root");
    }
    /**
     * 1、通過JavaAPI實(shí)現(xiàn)文件的上傳
     */
    @Test
    public void test01() throws IOException {
        fileSystem.copyFromLocalFile(new Path("D:\\2023PracticalTraining\\software\\InstallPackage\\PowerDesginer16.5.zip"),new Path("/demo"));
        System.out.println("上傳成功!");
        //fileSystem.copyToLocalFile();
    }

    /**
     * 2、下載文件
     * 在Windows上遠(yuǎn)程操作HDFS或者是在Windows上操作MapReduce代碼的時(shí)候,有些情況下要求windows上也必須有hadoop的軟件環(huán)境
     * 但是hadoop只能在Linux上安裝,因此,Windows上安裝的hadoop其實(shí)是一個(gè)假的環(huán)境
     *  報(bào)錯(cuò):exitcode=-107xxxxxxx 原因是因?yàn)殡娔X缺少C語言的運(yùn)行環(huán)境
     */
    @Test
    public void test02() throws IOException {
        fileSystem.copyToLocalFile(new Path("/jdk-8u371-linux-x64.tar.gz"),new Path("D:\\Desktop"));
        System.out.println("下載成功!");
    }
    /**
     * 3、刪除文件的方法
     */
    @Test
    public void test03() throws IOException {
        boolean delete = fileSystem.delete(new Path("/demo"), true);
        System.out.println(delete);
    }
}

test01:

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

test02:

會(huì)顯示報(bào)錯(cuò):HADOOP_HOME and hadoop.home.dir are unset. Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

在Windows上遠(yuǎn)程操作HDFS或者是在Windows上操作MapReduce代碼的時(shí)候,有些情況下要求windows上也必須有hadoop的軟件環(huán)境;

但是hadoop只能在Linux上安裝,因此,Windows上安裝的hadoop其實(shí)是一個(gè)假的環(huán)境

將發(fā)給Linux的hadoop-3.1.4.tar.gz這個(gè)安裝包先解壓為hadoop-3.1.4.tar再解壓為hadoop-3.1.4

解壓時(shí)會(huì)報(bào)錯(cuò),此報(bào)錯(cuò)不予理會(huì)

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

解壓后,將文件中的bin目錄下的所有文件均作替換,替換文件可在百度上搜索下載

配置環(huán)境變量

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

編輯系統(tǒng)變量中的Path

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

再次運(yùn)行程序即可成功!

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

test03:

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

package com.kang;

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

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * hdfs查看某個(gè)路徑下的所有文件和文件夾的信息
 */
public class Demo01 {
    public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.31.104:9000"), conf, "root");

        /**
         *
         */
        FileStatus[] fileStatuses = fs.listStatus(new Path("/"));
        for (FileStatus fileStatus : fileStatuses) {
            System.out.println(fileStatus.getPath());
            System.out.println(fileStatus.getBlockSize());
            System.out.println(fileStatus.getPermission());
            System.out.println(fileStatus.getOwner());
            System.out.println(fileStatus.getGroup());
        }

    }
}

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

package com.kang;

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

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * hdfs的相關(guān)判斷類型的JavaAPI操作
 */
public class Demo02 {
    public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.31.104:9000"), conf, "root");

        boolean b = fs.isDirectory(new Path("/demo"));
        System.out.println(b);
        boolean b1 = fs.isFile(new Path("/demo"));
        System.out.println(b1);
        boolean exists = fs.exists(new Path("/a"));
        System.out.println(exists);

    }
}
package com.kang;

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

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * hdfs的創(chuàng)建相關(guān)的JavaAPI
 */
public class Demo03 {
    public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.31.104:9000"), conf, "root");

        boolean mkdirs = fs.mkdirs(new Path("/a/b"));
        System.out.println(mkdirs);

        boolean newFile = fs.createNewFile(new Path("/a/a.txt"));
        System.out.println(newFile);

    }
}
package com.kang;

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

import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * hdfs提供了一個(gè)可以借助JavaIO流讀取數(shù)據(jù)的方法
 *  上傳fs.create		下載fs.open
 */
public class Demo04 {
    public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.31.104:9000"), conf, "root");

        FSDataInputStream inputStream = fs.open(new Path("/jdk-8u371-linux-x64.tar.gz"));
        inputStream.seek(128*1024*1024);
        FileOutputStream fos = new FileOutputStream("D:\\Desktop\\block2");
        int read = 0;
        while((read = inputStream.read())!=-1){
            fos.write(read);
        }
        System.out.println("第二個(gè)數(shù)據(jù)塊讀取完成");
    }
}
  • HDFS不適用于大量小文件的常量、HDFS不能對(duì)存儲(chǔ)的文件進(jìn)行修改操作

三、HDFS的工作流程問題(HDFS的原理性內(nèi)容)

1、HDFS上傳數(shù)據(jù)的流程

客戶端在和DN建立連接的時(shí)候,是和距離它最近的某一個(gè)DN建立連接
怎么判斷DN距離客戶端的距離:網(wǎng)絡(luò)拓?fù)湓瓌t
客戶端和HDFS的節(jié)點(diǎn)在同一個(gè)集群上

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

  • 客戶端向namenode請(qǐng)求上傳文件,namenode檢查目標(biāo)文件是否已存在,父目錄是否存在。
  • namenode返回是否可以上傳。
  • 客戶端請(qǐng)求第一個(gè) block上傳到哪幾個(gè)datanode服務(wù)器上。
  • namenode返回3個(gè)datanode節(jié)點(diǎn),分別為dn1、dn2、dn3。
  • 客戶端請(qǐng)求dn1上傳數(shù)據(jù),dn1收到請(qǐng)求會(huì)繼續(xù)調(diào)用dn2,然后dn2調(diào)用dn3,將這個(gè)通信管道建立完成。
  • dn1、dn2、dn3逐級(jí)應(yīng)答客戶端。
  • 客戶端開始往dn1上傳第一個(gè)block(先從磁盤讀取數(shù)據(jù)放到一個(gè)本地內(nèi)存緩存),以packet為單位,dn1收到一個(gè)packet就會(huì)傳給dn2,dn2傳給dn3;dn1每傳一個(gè)packet會(huì)放入一個(gè)應(yīng)答隊(duì)列等待應(yīng)答。
  • 當(dāng)一個(gè)block傳輸完成之后,客戶端再次請(qǐng)求namenode上傳第二個(gè)block的服務(wù)器。(重復(fù)執(zhí)行3-7步)

2、HDFS下載數(shù)據(jù)的流程

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

  • 客戶端向namenode請(qǐng)求下載文件,namenode通過查詢?cè)獢?shù)據(jù),找到文件塊所在的datanode地址。
  • 挑選一臺(tái)datanode(就近原則,然后隨機(jī))服務(wù)器,請(qǐng)求讀取數(shù)據(jù)。
  • datanode開始傳輸數(shù)據(jù)給客戶端(從磁盤里面讀取數(shù)據(jù)放入流,以packet為單位來做校驗(yàn))。
  • 客戶端以packet為單位接收,先在本地緩存,然后寫入目標(biāo)文件。

3、HDFS副本備份機(jī)制

數(shù)據(jù)上傳的時(shí)候,會(huì)根據(jù)配置進(jìn)行block塊的備份,備份的時(shí)候,選擇哪些節(jié)點(diǎn)進(jìn)行數(shù)據(jù)備份?
機(jī)架感知原則進(jìn)行備份

低版本Hadoop副本節(jié)點(diǎn)選擇:

第一個(gè)副本在client所處的節(jié)點(diǎn)上。如果客戶端在集群外,隨機(jī)選一個(gè)。
第二個(gè)副本和第一個(gè)副本位于不相同機(jī)架的隨機(jī)節(jié)點(diǎn)上。
第三個(gè)副本和第二個(gè)副本位于相同機(jī)架,節(jié)點(diǎn)隨機(jī)。

Hadoop2.8.5副本節(jié)點(diǎn)選擇:

第一個(gè)副本在client所處的節(jié)點(diǎn)上。如果客戶端在集群外,隨機(jī)選一個(gè)。
第二個(gè)副本和第一個(gè)副本位于相同機(jī)架,隨機(jī)節(jié)點(diǎn)。
第三個(gè)副本位于不同機(jī)架,隨機(jī)節(jié)點(diǎn)。

4、HDFS中NameNode和SecondaryNameNode的工作機(jī)制

這個(gè)工作機(jī)制就是NameNode如何管理元數(shù)據(jù)的機(jī)制

元數(shù)據(jù):指的是HDFS存儲(chǔ)文件/文件夾的類似的目錄結(jié)構(gòu),目錄中記錄著每一個(gè)文件的大小、時(shí)間、每一個(gè)文件的block塊的份數(shù),block塊存儲(chǔ)的節(jié)點(diǎn)列表信息…
NameNode默認(rèn)的元數(shù)據(jù)內(nèi)存是1000M,可以存儲(chǔ)管理百萬個(gè)block塊的元數(shù)據(jù)信息

兩個(gè)和元數(shù)據(jù)有關(guān)的文件 —— 再次啟動(dòng)HDFS之后恢復(fù)元數(shù)據(jù)的機(jī)制

edits編輯日志文件:記錄客戶端對(duì)HDFS集群的寫入和修改操作

fsimage鏡像文件:理解為HDFS元數(shù)據(jù)的持久點(diǎn)檢查文件

HDFS的安全模式(safemode)

HDFS啟動(dòng)之后會(huì)先進(jìn)入安全模式,安全模式就是將edits和fsimage文件加載到nn內(nèi)存的這一段時(shí)間,dn向NN注冊(cè)的這一段時(shí)間

安全模式下無法操作HDFS集群的,安全模式會(huì)自動(dòng)退出,NN的內(nèi)存加載好了(元數(shù)據(jù)加載好了),同時(shí)HDFS集群還滿足節(jié)點(diǎn)數(shù)的啟動(dòng)

SNN的作用就是對(duì)NN進(jìn)行checkpoint(檢查點(diǎn)機(jī)制)操作

  • checkpoint什么時(shí)候觸發(fā)

    • 檢查點(diǎn)時(shí)間到了 —— 1小時(shí)
      dfs.namenode.checkpoint.period 3600s
    • HDFS距離上一次檢查點(diǎn)操作數(shù)到達(dá)100萬次
      dfs.namenode.checkpoint.txns 1000000
  • SNN每隔1分鐘會(huì)詢問一次NN是否要進(jìn)行checkponit操作
    dfs.namenode.checkpoint.check.period 60s

NameNode的出現(xiàn)故障之后,元數(shù)據(jù)的恢復(fù)方式

  • 因?yàn)樵獢?shù)據(jù)的核心是edits和fsimage文件,同時(shí)snn工作的時(shí)候會(huì)把nn的文件復(fù)制到snn當(dāng)中,因此如果NN的元數(shù)據(jù)丟失,我們可以從SNN中把這些文件再復(fù)制到NN的目錄下 進(jìn)行元數(shù)據(jù)的恢復(fù)(恢復(fù)可能會(huì)導(dǎo)致一部分的元數(shù)據(jù)丟失)
    SNN的目錄: h a d o o p . t m p . d i r / d f s / n a m e s e c o n d a r y / c u r r e n t n n 的目錄: {hadoop.tmp.dir}/dfs/namesecondary/current nn的目錄: hadoop.tmp.dir/dfs/namesecondary/currentnn的目錄:{hadoop.tmp.dir}/dfs/name/current

  • 元數(shù)據(jù)還有一種恢復(fù)方式:配置HDFS的namenode的多目錄保存(HDFS的編輯日志和鏡像文件在多個(gè)目錄下保存相同的備份)
    這種方式只能使用在同一個(gè)節(jié)點(diǎn)上
    這種方式存在的問題:如果整個(gè)節(jié)點(diǎn)宕機(jī),無法恢復(fù)了
    dfs.namenode.name.dir 多個(gè)路徑

    hdfs-site.xml
    <property>
      <name>dfs.namenode.name.dir</name>
    <value>/opt/app/hadoop/data/dfs/name1,/opt/app/hadoop/data/dfs/name2</value>
    </property>
    
  • 最好把HDFS重新格式化一下,或者手動(dòng)把目錄創(chuàng)建一份

  • HA高可用模式

5、HDFS中NameNode和DataNode之間的工作機(jī)制

Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用,Hadoop,hadoop,分布式,hdfs

  • 詳細(xì)流程
    • 一個(gè)數(shù)據(jù)塊在datanode上以文件形式存儲(chǔ)在磁盤上,包括兩個(gè)文件,一個(gè)是數(shù)據(jù)本身,一個(gè)是元數(shù)據(jù)包括數(shù)據(jù)塊的長度,塊數(shù)據(jù)的校驗(yàn)和,以及時(shí)間戳。
    • DataNode啟動(dòng)后向namenode注冊(cè),通過后,周期性(1小時(shí))的向namenode上報(bào)所有的塊信息。
    • 心跳是每3秒一次,心跳返回結(jié)果帶有namenode給該datanode的命令如復(fù)制塊數(shù)據(jù)到另一臺(tái)機(jī)器,或刪除某個(gè)數(shù)據(jù)塊。如果超過10分鐘沒有收到某個(gè)datanode的心跳,則認(rèn)為該節(jié)點(diǎn)不可用。
    • 集群運(yùn)行中可以安全加入和退出一些機(jī)器。

DataNode上存儲(chǔ)的block塊除了數(shù)據(jù)本身以外,還包含數(shù)據(jù)的長度、數(shù)據(jù)校驗(yàn)和、時(shí)間戳…

數(shù)據(jù)校驗(yàn)和是為了保證block塊的完整性和一致性的,校驗(yàn)和機(jī)制,創(chuàng)建block塊的時(shí)候會(huì)根據(jù)數(shù)據(jù)本身計(jì)算一個(gè)校驗(yàn)和,以后每一次DN進(jìn)行block匯總的時(shí)候會(huì)再進(jìn)行一次校驗(yàn)和的計(jì)算,如果兩次校驗(yàn)和不一致則認(rèn)為block塊損壞了。

DataNode和NameNode心跳,默認(rèn)三秒心跳一次,默認(rèn)值可以調(diào)整
dfs.heartbeat.interval 3s

<property>
  <name>dfs.namenode.heartbeat.recheck-interval</name>
  <value>300000</value>單位毫秒
</property>
<property>
  <name> dfs.heartbeat.interval </name>
  <value>3</value>單位秒
</property>

修改此配置時(shí)需關(guān)閉HDFS,但是不需要重新格式化
心跳的作用有兩個(gè):1、檢測(cè)DN是否活著 2、把NN讓DN做的事情告訴DN

NN如何知道DN掉線 - 死亡 - 宕機(jī)了(掉線的時(shí)限):NN如果在某一次心跳中沒有收到DN的心跳,NN不會(huì)認(rèn)為DN死亡了,而是會(huì)繼續(xù)心跳,如果超過掉線的時(shí)限的時(shí)間還沒有心跳成功,NN才會(huì)認(rèn)為DN死亡了,然后啟動(dòng)備份恢復(fù)機(jī)制
掉線時(shí)限的時(shí)長是有一個(gè)計(jì)算公式:
timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval。
dfs.namenode.heartbeat.recheck-interval 心跳檢測(cè)時(shí)間 5分鐘
dfs.heartbeat.interval 心跳時(shí)間 3s
默認(rèn)情況下,如果超過10min30s沒有收到DN的心跳 認(rèn)為DN死亡了

DataNode每隔一段時(shí)間(默認(rèn)6小時(shí))會(huì)向NameNode匯報(bào)一次節(jié)點(diǎn)上所有的block塊的信息
dfs.blockreport.intervalMsec 21600000ms 每隔6小時(shí)向NN匯報(bào)一次DN的block塊的信息
dfs.datanode.directoryscan.interval 21600s 每隔6小時(shí)DN自己掃描一下DN上的block塊信息

四、HDFS、YARN的新節(jié)點(diǎn)的服役和舊節(jié)點(diǎn)的退役 —— 在namenode所在節(jié)點(diǎn)的hadoop中配置

1、概念

HDFS是一個(gè)分布式文件存儲(chǔ)系統(tǒng),HDFS身為一個(gè)大數(shù)據(jù)軟件,基本上都是7*24小時(shí)不停機(jī)的,那如果HDFS集群的容量不夠用了,那么我們需要增加一個(gè)新的數(shù)據(jù)節(jié)點(diǎn),因?yàn)镠DFS不能停止,因此我們需要在HDFS集群運(yùn)行過程中動(dòng)態(tài)的增加一個(gè)數(shù)據(jù)節(jié)點(diǎn)(新節(jié)點(diǎn)的服役操作);舊節(jié)點(diǎn)的退役。

2、新節(jié)點(diǎn)服役操作

服役新節(jié)點(diǎn)之前,需要?jiǎng)?chuàng)建一臺(tái)新的虛擬節(jié)點(diǎn),并且配置Java、Hadoop環(huán)境、SSH免密登錄、ip、主機(jī)映射、主機(jī)名

1、在Hadoop的配置文件目錄創(chuàng)建一個(gè)dfs.hosts文件,文件中聲明Hadoop集群的從節(jié)點(diǎn)的主機(jī)名

2、在Hadoop的hdfs-site.xml文件中,增加一個(gè)配置項(xiàng)
dfs.hosts 值:文件的路徑

<!--dfs.hosts代表改文件中的地址都為白名單,可以訪問NameNode節(jié)點(diǎn),與NameNode節(jié)點(diǎn)通信-->
<property>
  <name>dfs.hosts</name>
  <value>/opt/app/hadoop-3.1.4/etc/hadoop/dfs.hosts</value>
</property>

3、在HDFS開啟的狀態(tài)下刷新從節(jié)點(diǎn)的信息
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes

4、只需要在新節(jié)點(diǎn)啟動(dòng)datanode和nodemanager即可成功實(shí)現(xiàn)節(jié)點(diǎn)的服役

hadoop-daemon.sh start datanode

hadoop-daemon.sh start nodemanager

3、舊節(jié)點(diǎn)退役操作(如果第一次增加退役文件,必須重啟HDFS集群)

1、在Hadoop的配置目錄創(chuàng)建一個(gè)文件dfs.hosts.exclude,文件中編寫退役的主機(jī)名

2、在Hadoop的hdfs-site.xml配置文件中聲明退役的節(jié)點(diǎn)文件
dfs.hosts.exclude 值 文件的路徑

<!--dfs.hosts.exculde文件代表namenode訪問的黑名單  需要退役的數(shù)據(jù)節(jié)點(diǎn)
黑名單加入的數(shù)據(jù)節(jié)點(diǎn)如果也在dfs.hosts文件存在的話  不會(huì)立即退出 而是先把數(shù)據(jù)塊轉(zhuǎn)移到其他數(shù)據(jù)節(jié)點(diǎn) 然后再退役
-->
<property>
  <name>dfs.hosts.exclude</name>
  <value>/opt/app/hadoop-3.1.4/etc/hadoop/dfs.hosts.exclude</value>
</property>

3、同時(shí)需要在服役節(jié)點(diǎn)文件中把退役節(jié)點(diǎn)刪除了在dfs.hosts中

4、刷新節(jié)點(diǎn)信息狀態(tài)
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes

【注意】退役的時(shí)候,會(huì)先把退役節(jié)點(diǎn)的block塊復(fù)制到?jīng)]有退役的節(jié)點(diǎn)上,然后才會(huì)下線,而且退役的時(shí)候,必須保證退役之后剩余集群的節(jié)點(diǎn)數(shù)大于等于副本數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-704224.html

到了這里,關(guān)于Hadoop的分布式文件存儲(chǔ)系統(tǒng)HDFS組件的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • hadoop-hdfs分布式文件系統(tǒng)理論(一)

    hadoop-hdfs分布式文件系統(tǒng)理論(一)

    可以更好的支持分布式計(jì)算。 hadoop distribute file system是一個(gè)分布式 文件系統(tǒng),操作的是文件,增、刪都是以文件為單位。 文件線性按字節(jié)切割成塊(block),具有offset,id offset是指block的偏移量,比如block大小是10,offset可以是0,10,20,30。。。 id是block的名稱,比如block1,block

    2024年02月11日
    瀏覽(41)
  • Hadoop HDFS分布式文件系統(tǒng)(介紹以及基礎(chǔ)操作命令)

    Hadoop HDFS分布式文件系統(tǒng)(介紹以及基礎(chǔ)操作命令)

    目錄 一、為什么需要分布式存儲(chǔ)? 二、分布式的基礎(chǔ)架構(gòu)分析 ?三、HDFS基礎(chǔ)架構(gòu) 1.HDFS簡介 四、HDFS集群啟停命令 1.一鍵啟停腳本 2.單進(jìn)程啟停 五、HDFS基本操作命令 1.創(chuàng)建文件夾 ?2.查看指定目錄下內(nèi)容? 3.上傳文件到HDFS指定目錄下 ?4.查看HDFS文件內(nèi)容 5.下載HDFS文件 ?6.拷貝

    2024年02月05日
    瀏覽(166)
  • Hadoop大數(shù)據(jù)從入門到實(shí)戰(zhàn)(二)分布式文件系統(tǒng)HDFS

    Hadoop大數(shù)據(jù)從入門到實(shí)戰(zhàn)(二)分布式文件系統(tǒng)HDFS

    頭歌實(shí)踐教學(xué)平臺(tái) 教學(xué)課堂 大數(shù)據(jù)從入門到實(shí)戰(zhàn) - 第2章 分布式文件系統(tǒng)HDFS 任務(wù)描述 本關(guān)任務(wù):使用 Hadoop 命令來操作分布式文件系統(tǒng)。 編程要求 在右側(cè)命令行中啟動(dòng) Hadoop ,進(jìn)行如下操作。 在 HDFS 中創(chuàng)建 /usr/output/ 文件夾; 在本地創(chuàng)建 hello.txt 文件并添加內(nèi)容:“ HDFS的

    2024年02月12日
    瀏覽(18)
  • 大數(shù)據(jù)技術(shù)原理與應(yīng)用 概念、存儲(chǔ)、處理、分析和應(yīng)用(林子雨)——第三章 分布式文件系統(tǒng)HDFS

    大數(shù)據(jù)技術(shù)原理與應(yīng)用 概念、存儲(chǔ)、處理、分析和應(yīng)用(林子雨)——第三章 分布式文件系統(tǒng)HDFS

    大數(shù)據(jù)要解決數(shù)據(jù)存儲(chǔ)問題,所以有了分布式文件系統(tǒng)(DFS),但可能不符合當(dāng)時(shí)的一些應(yīng)用需求,于是谷歌公司開發(fā)了GFS(Google file System)。GFS是閉源的,而HDFS是對(duì)GFS的開源實(shí)現(xiàn)。 1.GFS和DFS有什么區(qū)別? GFS(Google File System)和DFS(Distributed File System)都是分布式文件系統(tǒng),

    2024年02月03日
    瀏覽(99)
  • 分布式文件系統(tǒng)HDFS

    分布式文件系統(tǒng)HDFS

    分布式文件系統(tǒng) 把文件分布存儲(chǔ)到多個(gè)計(jì)算機(jī)節(jié)點(diǎn) 上,通過網(wǎng)絡(luò)實(shí)現(xiàn)文件在多臺(tái)主機(jī)上進(jìn)行分布式存儲(chǔ)的文件系統(tǒng)。 分布式文件系統(tǒng)有兩大模式: Remote Access Model: 非本地文件不會(huì)復(fù)制到本地,所以對(duì)非本地文件的讀取和修改,利用RPC進(jìn)行。 Upload/ Download Model:所有非本地文

    2024年02月09日
    瀏覽(20)
  • 2. 分布式文件系統(tǒng) HDFS

    2. 分布式文件系統(tǒng) HDFS

    問題一:如果一個(gè)文件中有 10 個(gè)數(shù)值,一行一個(gè),并且都可以用 int 來度量?,F(xiàn)在求 10 個(gè)數(shù)值的和 思路: 逐行讀取文件的內(nèi)容 把讀取到的內(nèi)容轉(zhuǎn)換成 int 類型 把轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行相加 輸出最后的一個(gè)累加和 問題二:10000 個(gè)文件,每個(gè)文件 2T,文件里的內(nèi)容依然是每行一個(gè)

    2024年02月08日
    瀏覽(22)
  • 大數(shù)據(jù)——HDFS(分布式文件系統(tǒng))

    大數(shù)據(jù)——HDFS(分布式文件系統(tǒng))

    Hadoop的兩大核心組件 HDFS ( Hadoop Distributed Filesystem ):是一個(gè)易于擴(kuò)展的 分布式文件系統(tǒng) ,運(yùn)行在 成百上千 臺(tái) 低成本 的 機(jī)器 上。 HDFS 具有 高度容錯(cuò)能力 ,旨在部署在低成本機(jī)器上。 HDFS 主要用于對(duì) 海量文件信息 進(jìn)行 存儲(chǔ) 和 管理 ,也就是解決大數(shù)據(jù)文件(如 TB 乃至

    2023年04月17日
    瀏覽(28)
  • 頭歌 分布式文件系統(tǒng)HDFS 答案

    頭歌 分布式文件系統(tǒng)HDFS 答案

    第1關(guān):HDFS的基本操作 在右側(cè)命令行中啟動(dòng) Hadoop ,進(jìn)行如下操作。 在 HDFS 中創(chuàng)建 /usr/output/ 文件夾; 在本地創(chuàng)建 hello.txt 文件并添加內(nèi)容:“ HDFS的塊比磁盤的塊大,其目的是為了最小化尋址開銷。 ”; 將 hello.txt 上傳至 HDFS 的 /usr/output/ 目錄下; 刪除 HDFS 的 /user/hadoop 目錄

    2023年04月27日
    瀏覽(22)
  • 【頭歌實(shí)訓(xùn)】分布式文件系統(tǒng) HDFS

    【頭歌實(shí)訓(xùn)】分布式文件系統(tǒng) HDFS

    本關(guān)任務(wù):使用 Hadoop 命令來操作分布式文件系統(tǒng)。 為了完成本關(guān)任務(wù)你需要了解的知識(shí)有:1. HDFS 的設(shè)計(jì),2. HDFS 常用命令。 HDFS的設(shè)計(jì) 分布式文件系統(tǒng) 客戶:幫我保存一下這幾天的數(shù)據(jù)。 程序猿:好嘞,有多大呢? 客戶: 1T 。 程序猿:好沒問題,買個(gè)硬盤就搞定了。

    2024年04月15日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包