Hadoop的文件系統介紹

Hadoop組成

Hadoop HDFS:一個高可靠、高吞吐量的分佈式文件系統,對海量數據的存儲。
Hadoop MapReduce:一個分佈式的資源調度和離線並行計算框架。
Hadoop Yarn:基於HDFS,用於作業調度和集羣資源管理的框架。
Hadoop Common:Hadoop工具包,支持其他模塊的工具模塊(Configuration、RPC、序列化機制、日誌操作)

在這裏插入圖片描述

Hadoop的文件系統介紹

HDFS 基本介紹
目標:掌握什麼是HDFS,HDFS的使用場景,組成部分。
HDFS 是 Hadoop Distribute File System 的簡稱,意爲:Hadoop 分佈式文件系統。是 Hadoop 核心組件之一,作爲最底層的分佈式存儲服務而存在。
分佈式文件系統解決的問題就是大數據存儲。它們是橫跨在多臺計算機上的存儲系統。分佈式文件系統在大數據時代有着廣泛的應用前景,它們爲存儲和處理超大規模數據提供所需的擴展能力。

在這裏插入圖片描述

HDFS使用Master和Slave結構對集羣進行管理。一般一個 HDFS 集羣只有一個 Namenode 和一定數目的Datanode 組成。Namenode 是 HDFS 集羣主節點,Datanode 是 HDFS 集羣從節點,兩種角色各司其職,共同協調完成分佈式的文件存儲服務。

在這裏插入圖片描述
NameNode(Master)管理者 - 只負責管理,管理集羣內各個節點。
SecondaryNameNode 輔助管理 – 只負責輔助NameNode管理工作。
DataNode(Slave) 工作者,是負責工作,週期向NameNode彙報,進行讀寫數據。
1)HDFS集羣包括,NameNode和DataNode以及Secondary Namenode。
2)NameNode負責管理整個文件系統的元數據,以及每一個路徑(文件)所對應的數據塊信息。
3)DataNode 負責管理用戶的文件數據塊,每一個數據塊都可以在多個datanode上存儲多個副本。
4)Secondary NameNode用來監控HDFS狀態的輔助後臺程序,每隔一段時間獲取HDFS元數據的快照。最主要作用是輔助namenode管理元數據信息

在這裏插入圖片描述

HDFS分塊存儲

目標:掌握什麼是分塊存儲,HDFS的分塊存儲策略

hdfs將所有的文件全部抽象成爲block塊來進行存儲,不管文件大小,全部一視同仁都是以block塊的統一大小和形式進行存儲,方便我們的分佈式文件系統對文件的管理

所有的文件都是以block塊的方式存放在HDFS文件系統當中,在Hadoop1當中,文件的block塊默認大小是64M,Hadoop2當中,文件的block塊大小默認是128M,block塊的大小可以通過hdfs-site.xml當中的配置文件進行指定

在這裏插入圖片描述

一個文件100M,上傳到HDFS佔用幾個快?
一個塊128M,剩餘的28M怎麼辦?
事實上,128只是個數字,數據超過128M,便進行切分,如果沒有超過128M,就不用切分,有多少算多少,不足128M的也是一個快。這個快的大小就是100M,沒有剩餘28M這個概念。

抽象成數據塊的好處

1.一個文件有可能大於集羣中任意一個磁盤
20T/128 = xxx塊,這些block塊屬於一個文件
2.使用塊抽象而不是文件,可以簡化存儲子系統。
3.塊非常適合用於數據備份進而提供數據容錯能力和可用性
塊緩存
通常DataNode從磁盤中讀取塊,但對於訪問頻繁的文件,其對應的塊可能被顯示的緩存在DataNode的內存中,以堆外塊緩存的形式存在。默認情況下,一個塊僅緩存在一個DataNode的內存中,當然可以針對每個文件配置DataNode的數量。作業調度器通過在緩存塊的DataNode上運行任務,可以利用塊緩存的優勢提高讀操作的性能。

HDFS副本機制

目標:掌握HDFS的數據備份機制(數據副本)

HDFS視硬件錯誤爲常態,硬件服務器隨時有可能發生故障。
爲了容錯,文件的所有 block 都會有副本。每個文件的 block 大小和副本系數都是可配置的。應用程序可以指定某個文件的副本數目。副本系數可以在文件創建的時候指定,也可以在之後改變。
數據副本默認保存三個副本,我們可以更改副本數以提高數據的安全性
在hdfs-site.xml當中修改以下配置屬性,即可更改文件的副本數

低版本Hadoop副本節點選擇

第一個副本在client所處的節點上。如果客戶端在集羣外,隨機選一個。
第二個副本和第一個副本位於不相同機架的隨機節點上。
第三個副本和第二個副本位於相同機架,節點隨機。

在這裏插入圖片描述
Hadoop2.7.2副本節點選擇
第一個副本在client所處的節點上。如果客戶端在集羣外,隨機選一個。
第二個副本和第一個副本位於相同機架,隨機節點。
第三個副本位於不同機架,隨機節點。

在這裏插入圖片描述

名字空間(NameSpace)

目標:掌握什麼是“名字空間”
HDFS 支持傳統的層次型文件組織結構。用戶或者應用程序可以創建目錄,然後將文件保存在這些目錄裏。文件系統名字空間的層次結構和大多數現有的文件系統類似:用戶可以創建、刪除、移動或重命名文件。
Namenode 負責維護文件系統的名字空間,任何對文件系統名字空間或屬性的修改都將被Namenode 記錄下來。
HDFS 會給客戶端提供一個統一的目錄樹,客戶端通過路徑來訪問文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

在這裏插入圖片描述

Namenode 功能

目標:掌握NameNode有哪些主要的功能
我們把目錄結構及文件分塊位置信息叫做元數據。Namenode 負責維護整個hdfs文件系統的目錄樹結構,以及每一個文件所對應的 block 塊信息(block 的id,及所在的datanode 服務器)。

在這裏插入圖片描述
Namenode節點負責確定指定的文件塊到具體的Datanode結點的映射關係。在客戶端與數據節點之間共享數據。

在這裏插入圖片描述

管理Datanode結點的狀態報告,包括Datanode結點的健康狀態報告和其所在結點上數據塊狀態報告,以便能夠及時處理失效的數據結點。

在這裏插入圖片描述
Datanode功能
目標:掌握DataNode有哪些主要的功能
文件的各個 block 的具體存儲管理由 datanode 節點承擔。每一個 block 都可以在多個datanode 上。Datanode 需要定時向 Namenode 彙報自己持有的 block信息。 存儲多個副本(副本數量也可以通過參數設置 dfs.replication,默認是 3)。

在這裏插入圖片描述
向Namenode結點報告狀態。每個Datanode結點會週期性地向Namenode發送心跳信號和文件塊狀態報告。

心跳是每3秒一次,心跳返回結果帶有namenode給該datanode的命令如複製塊數據到另一臺機器,或刪除某個數據塊。如果超過10分鐘沒有收到某個datanode的心跳,則認爲該節點不可用。
DataNode啓動後向namenode註冊,通過後,週期性(1小時)的向namenode上報所有的塊信息。

在這裏插入圖片描述

執行數據的流水線複製。當文件系統客戶端從Namenode服務器進程獲取到要進行復制的數據塊列表後,完成文件塊及其塊副本的流水線複製。
一個數據塊在datanode上以文件形式存儲在磁盤上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。

在這裏插入圖片描述

機架感知
目標:掌握集羣的機架感知配置
機架感知需要人爲進行配置,編寫Python腳本“RackAware.py”。內容爲服務器IP與交換機的對應關係。(開源hadoop,使用RackAware.sh)
#!/usr/bin/python
#--coding:UTF-8 --
import sys

rack = {

    "12.12.3.1":"SW6300-1",  
    "12.12.3.2":"SW6300-1",  
    "12.12.3.3":"SW6300-1",  

    "12.12.3.25":"SW6300-2",  
    "12.12.3.26":"SW6300-2",  
    "12.12.3.27":"SW6300-2",  

    "12.12.3.49":"SW6300-3",  
       "12.12.3.50":"SW6300-3",  
    "12.12.3.51":"SW6300-3",  
 
    "12.12.3.73":"SW6300-4",  
    "12.12.3.74":"SW6300-4",  
    "12.12.3.75":"SW6300-4",  
	}  

if name==“main”:
print “/” + rack.get(sys.argv[1],“SW6300-1-2”)
使用以下命令驗證

[root@node01 sbin]# python RackAware.py 12.12.3.1
/SW6300-1
[root@node01 sbin]# python RackAware.py 12.12.3.25
/SW6300-2
[root@node01 sbin]# python RackAware.py 12.12.3.75
/SW6300-4
[root@node01 sbin]# python RackAware.py 12.12.3.100
/SW6300-1-2

編輯core-site.xml配置文件,將腳本配置爲topology.script.file.name的值

topology.script.file.name
/home/bigdata/apps/hadoop/etc/hadoop/RackAware.py

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