一、 HDFS簡介
1.1 HDFS的概述
HDFS是基于 流數(shù)據(jù) 訪問模式的 分布式文件系統(tǒng) ,其設計建立在 “一次寫入、多次讀取” 的基礎上,提供高吞吐量、高容錯性的數(shù)據(jù)訪問,能很好地解決海量數(shù)據(jù)的存儲問題。
流數(shù)據(jù) 是指數(shù)千個數(shù)據(jù)源 持續(xù)生成 的數(shù)據(jù),可以理解為隨時間延續(xù)而 無限增長 的動態(tài)數(shù)據(jù)集合。
通俗點說,如果把數(shù)據(jù)比如成一個水庫,那么流進去的水,就是流數(shù)據(jù)(就像我們聽的音樂,屬于音樂流;而看到的文字、圖片這些較為固定的,一次性下載的,形成不了流)。
在Hadoop生態(tài)圈中,HDFS屬于底層基礎,負責存儲文件。
1.2 HDFS的優(yōu)點
HDFS的優(yōu)點:
高容錯性。提供了容錯和恢復機制,副本丟失后,自動恢復。
高可靠性。數(shù)據(jù)自動保存多個副本,通過多副本提高可靠性。
適合大數(shù)據(jù)處理。可以處理超大文件,比如 TB級甚至PB級 的文件。
適合批處理。移動計算而非移動數(shù)據(jù);數(shù)據(jù)位置暴露給計算框架。
支持流式數(shù)據(jù)訪問。一次性寫入,多次讀取(一個數(shù)據(jù)集一旦生成,就會被復制分發(fā)到不同的存儲節(jié)點,各節(jié)點可以進行讀取/訪問);保證數(shù)據(jù)一致性。
低成本運行??梢赃\行在低成本的硬件之上。
…
HDFS 默認保存 3 份副本。
第一個副本:放置在 上傳文件 的數(shù)據(jù)節(jié)點(第一個副本如果是在 集群外 提交,則隨機挑選一個 CPU 比較空閑 、 磁盤不太滿 的節(jié)點);
第二個副本:放置在與 第一個副本 不同 的機架的節(jié)點上;
第三個副本:放在與 第二個副本 相同 的機架的其他節(jié)點上。
1.3 HDFS的缺點
HDFS的缺點:
不適合處理 低延遲 的數(shù)據(jù)訪問。比如用戶 要求時間比較短 的低延遲應用(主要處理高數(shù)據(jù)吞吐量的應用)。
不適合處理 大量的小 文件。會造成尋址時間超過讀取時間;會占用NameNode大量內存,因為NameNode把文件系統(tǒng)的元數(shù)據(jù)存放在內存中(文件系統(tǒng)的容量由NameNode的大小決定),小文件太多會消耗NameNode的內存。
不適合 并發(fā)寫入。一個文件只能有一個寫入者,HDFS暫不支持多個用戶對同一個文件的寫操作。
不適合 任意修改 文件。僅支持append(附加),不支持在文件的任意位置進行修改。
…
二、 HDFS的組成與架構
HDFS的組成架構圖及各部分功能如下所示:
2.1 NameNode節(jié)點
當用戶訪問數(shù)據(jù)文件時,為了保證能夠讀取到每一個數(shù)據(jù)塊, HDFS有一個專門 負責保存文件屬性信息的節(jié)點,這個節(jié)點就是 NameNode 節(jié)點(即 名稱節(jié)點 )。
2.1.1 節(jié)點職責
NameNode節(jié)點 是HDFS的管理者,負責保存和管理HDFS的元數(shù)據(jù)。
其職責有以下三個方面:
① 管理維護HDFS的命名空間
NameNode管理HDFS系統(tǒng)的命名空間,維護文件系統(tǒng)樹以及文件系統(tǒng)樹中所有文件的元數(shù)據(jù)。管理這些信息的的文件分別是 edits(操作日志文件) 和 fsimage(命名空間鏡像文件) 。
editlog(操作日志):在NameNode啟動的情況下,對HDFS進行的各種操作進行記錄。(HDFS客戶端執(zhí)行的所有操作都會被記錄到editlog文件中,這些文件由edits文件保存)
fsimage:包含HDFS中的元信息(比如修改時間、訪問時間、數(shù)據(jù)塊信息等)。
② 管理DataNode上的數(shù)據(jù)塊
負責管理數(shù)據(jù)塊上所有的元數(shù)據(jù)信息(管理DataNode上數(shù)據(jù)塊的均衡,維持副本數(shù)量)。
③ 接收客戶端的請求
接收客戶端文件上傳、下載、創(chuàng)建目錄等的請求。
2.2 DataNode節(jié)點
HDFS首先把大文件切分成若干個小的數(shù)據(jù)塊,再把這些數(shù)據(jù)塊寫入不同的節(jié)點,這個 負責保存文件數(shù)據(jù)的節(jié)點就是 DataNode 節(jié)點(即 數(shù)據(jù)節(jié)點 )。
2.2.1 節(jié)點職責
DataNode節(jié)點 負責存儲數(shù)據(jù),把Block(數(shù)據(jù)塊)以Linux文件的形式保存在磁盤上,并根據(jù)Block標識和字節(jié)范圍來讀寫塊數(shù)據(jù)。
其職責有以下三個方面:
① 保存數(shù)據(jù)塊
一個數(shù)據(jù)塊會在多個DataNode進行冗余備份(在某一個DataNode最多只有一個備份)。
② 負責客戶端對數(shù)據(jù)塊的IO請求
在客戶端執(zhí)行寫操作時,DataNode之間會相互通信,保證寫操作的一致性。
③ 定期和NameNode進行心跳通信,接受NameNode的指令
如果NameNode節(jié)點10分鐘沒有收到DataNode的心跳信息,就會將其上的數(shù)據(jù)塊復制到其他DataNode節(jié)點。
因此,NameNode節(jié)點上并不會永久保存DataNode節(jié)點上的數(shù)據(jù)塊信息,而是通過與DataNode節(jié)點心跳聯(lián)系的方式,來更新節(jié)點上的映射表,以此減輕負擔。
問題:HDFS數(shù)據(jù)塊默認大小為128M(Hadoop2.2之前為64M),將HDFS的數(shù)據(jù)塊設置得很大的目的是什么?(傳統(tǒng)數(shù)據(jù)塊只有512個字節(jié))
答:為了減少尋址開銷,讓HDFS的文件傳輸時間由傳輸速率決定(如果塊設置得足夠大,從磁盤 傳輸數(shù)據(jù)的時間 會明顯大于 定位這個塊開始位置 所需的時間)。
2.3 SecondaryNameNode節(jié)點
HDFS有一個定期創(chuàng)建命名空間的檢查點(CheckPoint)操作的節(jié)點,也就是SecondaryNameNode節(jié)點(即 第二名稱節(jié)點)。
出于可靠性考慮,SecondaryNameNode節(jié)點與NameNode節(jié)點通常運行在不同的機器上,且SecondaryNameNode節(jié)點與NameNode節(jié)點的內存要一樣大。
(如果想了解 SecondaryNameNode 的工作流程,可以參考這篇文章:淺析 SecondaryNameNode 的工作流程 )
問題:一般情況下,一個集群中的SecondaryNameNode節(jié)點也是只有一個的原因是什么?
答:因為如果多的話,會增加NameNode的壓力,使其忙于元數(shù)據(jù)的傳輸/接收、日志的傳輸/切換,從而導致性能下降;同時,NameNode節(jié)點也不支持做并發(fā)檢查點。
2.3.1 節(jié)點職責
SecondaryNameNode節(jié)點 定期把NameNode的 fsimage 和 edits 下載到本地,再將它們加載到內存并進行合并,最后把合并后新的 fsimage 返回NameNode (這個過程稱為檢查點)。
經(jīng)典問題:NameNode與SecondaryNameNode有沒有關系?
SecondaryNameNode節(jié)點的工作流程可以參考這篇文章:
其職責有以下兩個方面:
① 防止edits過大
定期合并 fsimage 和 edits 文件,使 edits 大小保持在限制范圍內。這樣做減少了重新啟動NameNode時合并 fsimage 和 edits 耗費的時間,從而減少了NameNode啟動的時間。
② 做冷備份
對一定范圍內數(shù)據(jù)做快照性備份,在NameNode失效時能恢復部分 fsimage 。
好了,HDFS 及其組成框架介紹完成。
如果想進一步了解 HDFS 的工作機制,可以參考這篇文章:圖文詳解 HDFS 工作機制及其原理 。
編輯:lyn
-
HDFS
+關注
關注
1文章
31瀏覽量
9807
發(fā)布評論請先 登錄
SVPWM的原理及法則推導和控制算法詳解
開關電源各部電路詳解
百問MQTT協(xié)議分析 - MQTT簡述及協(xié)議報文格式組成
RISC-V指令集概述
一文看懂SoC的架構

buck電路的組成元件詳解 buck電路與線性穩(wěn)壓器的區(qū)別
智能網(wǎng)聯(lián)汽車云控系統(tǒng)第1部分:系統(tǒng)組成及基礎平臺架構
主流芯片架構包括哪些類型
溫度振動變送器的概述及功能介紹
安森美OBC系統(tǒng)解決方案設計指南

評論