HDFS 原理(簡述)

HDFS 原理(簡述)

目標緣由:硬件經常錯誤,壽命短,因此需要冗餘也是嵌入了備份多個數據。對大數據進行規模一致性模型,一寫入就不能修改,只能刪除在重發。


<div id = “d1">1. HDFS體系

  • NameNode
  • DataNode
  • 事務日誌
  • 映像文件
  • SecondaryNameNode

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-n4I099Gt-1582549352377)(HDFS體系結構.png)]

<div id = “d1_1">1.1 NameNode

名稱節點
  • 管理文件系統的命名空間
  • 記錄每個文件數據塊在Datanode的位置和副本信息
  • 協調客戶端對文件的訪問
  • 記錄命名空間的改動和本身屬性的改動
  • Namenode是用事務日誌記錄元數據的變化。

可以從namenode的你定義保存元數據的目錄裏看如下:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-JILxJU3i-1582549352383)(Namenode.png)]

fsimage這就是影響文件

<div id = “d1_2">1.2 DataNode

數據節點

  • 負責物理節點的存儲管理
  • 一次寫入多次讀取,不修改
  • 文件右數據塊組成,典型的大小爲64MB
  • 數據塊散佈各個節點

數據塊文件視圖,每個文件都會增長64MB後就不漲了,會增多,會散佈在各個集羣節點,冗餘。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QmoCglSC-1582549352384)(Datanode.png)]

<div id = “d2">2. 讀取數據流程

  • 客戶端訪問HDFS中的一個文件
  • 首先從namenode獲得組成文件的數據塊位置列表
  • 根據列表知道存儲數據塊的datanode
  • 訪問datanode獲取數據
  • Namenode不參與數據實際傳輸

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-BdB0gXiL-1582549352385)(D:\工作緩存區\git\Nosql\HDFS 原理\讀取數據流程.png)]

<div id = “d2_1">2.1 冗餘副本策略

  • 可以在hdfs-site.xml中設置複製因子指定副本數量
  • 所以數據塊都有副本
  • Datanode啓動時,遍歷本地文件系統,產生一份hdfs數據塊和本地文件的對應關係列表(blockreport)彙報給namenode

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oVYviJR8-1582549352387)(副本數設置.png)]

這裏舉例一個3個datanode的高可用hadoop搭建中的我設置的hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
        <!-- NameNode HA配置 -->
        <property>
                <name>dfs.nameservices</name>
                <value>ns</value>
        </property>
        <property>
                <name>dfs.ha.namenodes.ns</name>
                <value>nn1,nn2</value>
        </property>
                <value>hadoop01:9000</value>
                <description>nn1的RPC通信地址</description>
        </property>
        <property>
                <description>nn1的http通信地址</description>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.ns.nn2</name>
                <value>hadoop02:9000</value>
                <description>nn2的RPC通信地址</description>
        </property>
        <property>
                <name>dfs.namenode.http-address.ns.nn2</name>
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
        </property>
        </property>
        <!--namenode高可用主備切換配置 -->
                <value>true</value>
                <description>開啓NameNode失敗自動切換</description>
        </property>
        <property>
                <name>dfs.client.failover.proxy.provider.ns</name>
        </property>
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>
                        sshfence
                        shell(/bin/true)
                </value>
        </property>
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/hadoop/.ssh/id_rsa</value>
                <description>使用sshfence隔離機制時需要ssh免登陸</descri
ption>
        </property>
        <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>30000</value>
                <description>配置sshfence隔離機制超時時間</description>
        </property>
        <!--dfs文件屬性設置-->
        <property>
                <name>dfs.replication</name>
                <value>3</value>
                <description>設置block副本數爲3</description>
        </property>

        <property>
                <name>dfs.block.size</name>
                <value>134217728</value>
                <description>設置block大小是128M</description>
        </property>
</configuration>
  • 機架策略

    會選擇不同機架創建副本

<div id = “d2_2">2.2 心跳機制

  • Namenode 週期性從datanode接收心跳信號和塊報告
  • 檢驗元數據
  • 沒有按時發送心跳的datanode會被標記爲壞機,不再給任何I/O請求
  • 如果datanode失效造成副本數量下降、並低於閾值,會自動檢測數據塊,再合適的時機進行復制

<div id = “d2_3">2.3 安全模式

  • Namenode啓動時會經過安全模式
  • 再達到安全模式前不斷寫副本直到達到爲止

<div id = “d2_4">2.4 回收站

​ 回收站/trash

​ 可以設定時間閾值,當存放到達時間就會永久刪除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章