hadoop學習筆記

前言

hadoop系列下的HDFS Architecture,本文主要介紹了hadoop的整體架構,包括但不限于節(jié)點概念、命名空間、數(shù)據(jù)容錯機制厕妖、數(shù)據(jù)管理方式、簡單的腳本命令和垃圾回收概念挑庶。

一言秸、介紹

????????Hadoop Distributed File System(HDFS)是高容錯软能、高吞吐量、用于處理海量數(shù)據(jù)的分布式文件系統(tǒng)举畸。

二埋嵌、假設與目的

1、機器故障處理

HDFS一般由成百上千的機器組成俱恶,每個機器存儲整個數(shù)據(jù)集的一部分數(shù)據(jù)雹嗦,機器故障的快速發(fā)現(xiàn)與恢復是HDFS的核心目標。

2合是、數(shù)據(jù)流接口

HDFS對接口的核心目標是高吞吐量而非低延遲了罪。

3、海量數(shù)據(jù)

HDFS支持海量數(shù)據(jù)集合聪全,一個集群一般能夠支持千萬以上數(shù)量級的文件泊藕。

4、簡單一致性模型

HDFS應用需要對文件寫一次讀多次的接口模型难礼,文件變更只支持尾部添加和截斷娃圆。

5、遷移計算優(yōu)于移動數(shù)據(jù)

HDFS的海量數(shù)據(jù)與一致性接口特點蛾茉,使得遷移計算以適應文件內(nèi)容要比遷移數(shù)據(jù)從而支持計算更加高效讼呢。

6、跨多種軟硬件平臺

HDFS支持跨平臺使用谦炬。

三悦屏、NameNode和DataNode

????????HDFS使用主從架構。一個HDFS集群由一個NameNode键思、一個主服務器(用于管理系統(tǒng)命名空間和控制客戶端文件接口)础爬、大量的DataNode(一般一個節(jié)點一個,用于管理該節(jié)點數(shù)據(jù)存儲)吼鳞。HDFS對外暴露了文件系統(tǒng)命名空間并允許在文件中存儲用戶數(shù)據(jù)看蚜。一個文件被分成一個或多個塊,這些塊存儲在一組DataNode中赔桌。NameNode執(zhí)行文件系統(tǒng)命名空間的打開關閉重命名等命令并記錄著塊和DataNode之間的映射供炎。DataNode用于處理客戶端的讀寫請求和塊的相關操作。NameNode和DataNode一般運行在Linux操作系統(tǒng)上纬乍,HDFS使用Java語言開發(fā)的碱茁,因此NameNode和DataNode可以運行在任何支持Java的機器上,再加上Java語言的高度可移植性仿贬,使得HDFS可以發(fā)布在各種各樣的機器上。一個HDFS集群中運行一個NameNode墓贿,其他機器每個運行一個(也可以多個茧泪,非常少見)DataNode蜓氨。NameNode簡化了系統(tǒng)的架構,只用于存儲所有HDFS元數(shù)據(jù)队伟,用戶數(shù)據(jù)不會進入該節(jié)點穴吹。下圖為HDFS架構圖:

hdfs architecture

四、文件系統(tǒng)命名空間

????????HDFS支持傳統(tǒng)的分層文件管理嗜侮,用戶或者應用能夠在目錄下創(chuàng)建目錄或者文件港令。文件系統(tǒng)命名空間和其他文件系統(tǒng)是相似的,支持創(chuàng)建锈颗、刪除顷霹、移動和重命名文件。HDFS支持用戶數(shù)量限制和訪問權限控制击吱,不支持軟硬鏈接淋淀,用戶可以自己實現(xiàn)軟硬鏈接。NameNode控制該命名空間覆醇,命名空間任何變動幾乎都要記錄到NameNode中朵纷。應用可以在HDFS中對文件聲明復制次數(shù),這個次數(shù)叫做復制系數(shù)永脓,會被記錄到NameNode中袍辞。

五、數(shù)據(jù)復制

????????HDFS將每個文件存儲為一個或多個塊常摧,并為文件設置了塊的大小和復制系數(shù)從而支持文件容錯革屠。一個文件所有的塊(除了最后一個塊)大小相同,后來支持了可變長度的塊排宰。復制系數(shù)在創(chuàng)建文件時賦值似芝,后續(xù)可以更改。文件在任何時候只能有一個writer板甘。NameNode負責塊復制党瓮,它周期性收到每個數(shù)據(jù)節(jié)點的心跳和塊報告,心跳表示數(shù)據(jù)節(jié)點的正常運作盐类,塊報告包含了這個DataNode的所有塊寞奸。

1.副本存儲:起步階段

副本存儲方案對于HDFS的穩(wěn)定性和性能至關重要。為了提升數(shù)據(jù)可靠性在跳、靈活性和充分利用網(wǎng)絡帶寬枪萄,HDFS引入了機架感知的副本存儲策略,該策略只是副本存儲策略的第一步猫妙,為后續(xù)優(yōu)化打下基礎瓷翻。大型HDFS集群一般運行于橫跨許多支架的計算機集群中,一般情況下同一支架中兩個節(jié)點數(shù)據(jù)傳輸快于不同支架。一種簡單的方法是將副本存放在單獨的機架上齐帚,從而防止丟失數(shù)據(jù)并提高帶寬妒牙,但是增加了數(shù)據(jù)寫入的負擔。一般情況下对妄,復制系數(shù)是3湘今,HDFS存儲策略是將第一份副本存儲到本地機器或者同一機架下一個隨機DataNode,另外兩份副本存儲到同一個遠程機架的不同DataNode剪菱。NameNode不允許同一DataNode存儲相同副本多次摩瞎。在機架感知的策略基礎上,后續(xù)支持了?存儲類型和機架感知相結合的策略?孝常,簡單來說就是在機架感知基礎上判斷DataNode是否支持該類型的文件旗们,不支持則尋找下一個。

2.副本選擇

HDFS讀取數(shù)據(jù)使用就近原則茫因,首先尋找相同機架上是否存在副本蚪拦,其次本地數(shù)據(jù)中心,最后遠程數(shù)據(jù)中心冻押。

3.安全模式

啟動時驰贷,NameNode進入安全模式,該模式下不會發(fā)生數(shù)據(jù)塊復制洛巢,NameNode接收來自DataNode的心跳和塊報告括袒,每個塊都有一個最小副本數(shù)量n,數(shù)據(jù)塊在NameNode接受到該塊n次后稿茉,認為這個數(shù)據(jù)塊完成安全復制锹锰。當完成安全復制的數(shù)據(jù)塊比例達到一個可配的百分比值并再過30s后,NameNode退出安全模式漓库,最后判斷是否仍然存在未達到最小復制次數(shù)的數(shù)據(jù)塊恃慧,并對這些塊進行復制操作。

六.文件系統(tǒng)元數(shù)據(jù)持久化

NameNode使用名為EditLog的事務日志持續(xù)記錄文件系統(tǒng)元數(shù)據(jù)的每一次改動(如創(chuàng)建文件渺蒿、改變復制系數(shù))痢士,使用名為FsImage的文件存儲全部的文件系統(tǒng)命名空間(包括塊到文件的映射關系和文件系統(tǒng)的相關屬性),EditLog和FsImage都存儲在NameNode本地文件系統(tǒng)中茂装。NameNode在內(nèi)存中保存著元數(shù)據(jù)和塊映射的快照怠蹂,當NameNode啟動后或者某個配置項達到閾值時,會從磁盤中讀取EditLog和FsImage少态,通過EditLog新的記錄更新內(nèi)存中的FsImage城侧,再講新版本的FsImage刷新到磁盤中,然后截斷EditLog中已經(jīng)處理的記錄彼妻,這個過程就是一個檢查點嫌佑。檢查點的目的是確保文件系統(tǒng)通過在內(nèi)存中使用元數(shù)據(jù)的快照從而持續(xù)的觀察元數(shù)據(jù)的變更并將快照信息存儲到磁盤FsImage中豆茫。檢查點通過下面兩個配置參數(shù)出發(fā),時間周期(dfs.namenode.checkpoint.period)和文件系統(tǒng)事務數(shù)量(dfs.namenode.checkpoint.txns)歧强,二者同時配置時澜薄,滿足任意一個條件就會觸發(fā)檢查點为肮。

七.交互協(xié)議

所有的HDFS網(wǎng)絡協(xié)議都是基于TCP/IP的摊册,客戶端建立一個到NameNode機器的可配置的TCP端口,用于二者之間的交互颊艳。DataNode使用DataNode協(xié)議和NameNode交互茅特,RPC包裝了客戶端協(xié)議和DataNode協(xié)議,通過設計棋枕,NameNode不會發(fā)起RPC白修,只負責響應來自客戶端或者DataNode的RPC請求。

八.健壯性

HDFS的核心目標是即使在失敗或者錯誤情況下依然能夠保證數(shù)據(jù)可靠性重斑,三種常見失敗情況包括NameNode故障兵睛、DataNode故障和network partitions。

1.磁盤數(shù)據(jù)錯誤窥浪、心跳監(jiān)督和重新復制

網(wǎng)絡分區(qū)可能會導致部分DataNode市區(qū)和NameNode的連接祖很,NameNode通過心跳包判斷并將失去連接的DataNode標記為掛掉狀態(tài),于是所有注冊到掛掉DataNode的數(shù)據(jù)都不可用了漾脂,可能會導致部分數(shù)據(jù)塊的復制數(shù)量低于了原本配置的復制系數(shù)假颇。NameNode不斷地追蹤哪些需要復制的塊并在必要時候進行復制,觸發(fā)條件包含多種情況:DataNode不可用骨稿、復制亂碼笨鸡、硬件磁盤故障或者認為增大負值系數(shù)。為了避免DataNode的狀態(tài)不穩(wěn)定導致的復制風暴坦冠,標記DataNode掛掉的超時時間設置比較長(默認10min)形耗,用戶可以設置更短的時間間隔來標記DataNode為陳舊狀態(tài)從而避免在對讀寫性能要求高的請求上使用這些陳舊節(jié)點。

2.集群重新均衡

HDFS架構兼容數(shù)據(jù)各種重新平衡方案辙浑,一種方案可以在某個DataNode的空閑空間小于某個閾值時將數(shù)據(jù)移動到另一個DataNode上激涤;在某個特殊文件突然有高的讀取需求時,一種方式是積極創(chuàng)建額外副本并且平衡集群中的其他數(shù)據(jù)例衍。這些類型的平衡方案暫時還未實現(xiàn)(不太清楚現(xiàn)有方案是什么...)昔期。

3.數(shù)據(jù)完整性

存儲設備、網(wǎng)絡或者軟件的問題都可能導致從DataNode獲取的數(shù)據(jù)發(fā)生亂碼佛玄,HDFS客戶端實現(xiàn)了對文件內(nèi)容的校驗硼一,客戶端在創(chuàng)建文件時,會計算文件中每個塊的校驗值并存儲到命名空間梦抢,當客戶端取回數(shù)據(jù)后會使用校驗值對每個塊進行校驗般贼,如果存在問題,客戶端就會去另一個DataNode獲取這個塊的副本。

4.磁盤元數(shù)據(jù)錯誤

FsImage和EditLog是HDFS的核心數(shù)據(jù)結構哼蛆,他們的錯誤會導致整個HDFS掛掉蕊梧,因此,NameNode應該支持時刻維持FsImage和EditLog的多分復制文件腮介,它們的任何改變所有文件應該同步更新肥矢。另一個選擇是使用?shared storage on NFS?或者distributed edit log支持多個NameNode,官方推薦distributed edit log叠洗。

5.快照

快照能夠存儲某一特殊時刻的數(shù)據(jù)副本甘改,從而支持HDFS在發(fā)生錯誤時會滾到上一個穩(wěn)定版本。

九.數(shù)據(jù)管理

1.數(shù)據(jù)塊

HDFS的應用場景是大的數(shù)據(jù)集下灭抑,且數(shù)據(jù)只需要寫一次但是要讀取一到多次并且支持流速讀取數(shù)據(jù)十艾。一般情況下一個塊大小為128MB,因此一個文件被切割成128MB的大塊腾节,且每個快可能分布在不同的DataNode忘嫉。

2.復制管道

當客戶端在復制系數(shù)是3的條件下寫數(shù)據(jù)時,NameNode通過目標選擇算法收到副本要寫入的DataNode的集合案腺,第1個DataNode開始一部分一部分的獲取數(shù)據(jù)庆冕,把每個部分存儲到本地并轉發(fā)給第2個DataNode,第2個DataNode同樣的把每個部分存儲到本地并轉發(fā)給第3個DataNode救湖,第3個DataNode將數(shù)據(jù)存儲到本地愧杯,這就是管道復制。

十.可訪問性

HDFS提供了多種訪問方式鞋既,比如FileSystem Java API力九、?C language wrapper for this Java API?和REST API,而且還支持瀏覽器直接瀏覽邑闺。通過使用NFS gateway跌前,客戶端可以在本地文件系統(tǒng)上安裝HDFS。

1.FSShell

HDFS使用目錄和文件的方式管理數(shù)據(jù)陡舅,并提供了叫做FS shell的命令行接口抵乓,下面有一些簡單的命令:

FS shell sample

2.DFSAdmin

DFSAdmin命令集合用于管理HDFS集群,這些命令只有集群管理員可以使用靶衍,下面有一些簡單的命令:

DFSAdmin sample

3.瀏覽器接口

正常的HDFS安裝都會配置一個web服務灾炭,通過可配的TCP端口對外暴露命名空間,從而使得用戶可以通過web瀏覽器查看文件內(nèi)容颅眶。

十一.空間垃圾回收

1.文件刪除與恢復

如果垃圾回收配置打開蜈出,通過FS shell移除的文件不會立刻刪除,而是會移動到一個垃圾文件專用的目錄(/user//.Trash)涛酗,類似回收站铡原,只要文件還存在于那個目錄下偷厦,則隨時可以被回復。絕大多數(shù)最近刪除的文件都被移動到了垃圾目錄(/user//.Trash/Current)燕刻,并且HDFS每個一段時間在這個目錄下創(chuàng)建一個檢查點用于刪除已經(jīng)過期的舊的檢查點只泼,詳情見?expunge command of FS shell?。在垃圾目錄中的文件過期后卵洗,NameNode會刪除這個文件请唱,文件刪除會引起這個文件的所有塊的空間空閑,需要注意的是在文件被刪除之后和HDFS的可用空間變多之間會有一些時間延遲(個人認為是垃圾回收機制占用的時間)忌怎。下面是一些簡單的理解刪除文件的例子:

FS shell delete sample

2.減小復制系數(shù)

當文件復制系數(shù)減小時籍滴,NameNode會選擇多余的需要刪除的副本酪夷,在收到心跳包時將刪除信息發(fā)送給DataNode榴啸。和上面一樣,這個刪除操作也是需要一些時間后晚岭,才能在集群上展現(xiàn)空閑空間的增加鸥印。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市坦报,隨后出現(xiàn)的幾起案子库说,更是在濱河造成了極大的恐慌,老刑警劉巖片择,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潜的,死亡現(xiàn)場離奇詭異,居然都是意外死亡字管,警方通過查閱死者的電腦和手機啰挪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘲叔,“玉大人亡呵,你說我怎么就攤上這事×蚋辏” “怎么了锰什?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丁逝。 經(jīng)常有香客問我汁胆,道長,這世上最難降的妖魔是什么霜幼? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任嫩码,我火速辦了婚禮,結果婚禮上辛掠,老公的妹妹穿的比我還像新娘谢谦。我一直安慰自己释牺,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布回挽。 她就那樣靜靜地躺著没咙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪千劈。 梳的紋絲不亂的頭發(fā)上祭刚,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音墙牌,去河邊找鬼涡驮。 笑死,一個胖子當著我的面吹牛喜滨,可吹牛的內(nèi)容都是我干的捉捅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼虽风,長吁一口氣:“原來是場噩夢啊……” “哼棒口!你這毒婦竟也來了?” 一聲冷哼從身側響起辜膝,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤无牵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后厂抖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茎毁,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年忱辅,在試婚紗的時候發(fā)現(xiàn)自己被綠了七蜘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡耕蝉,死狀恐怖崔梗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垒在,我是刑警寧澤蒜魄,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站场躯,受9級特大地震影響谈为,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踢关,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一伞鲫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧签舞,春花似錦秕脓、人聲如沸柒瓣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芙贫。三九已至,卻和暖如春傍药,著一層夾襖步出監(jiān)牢的瞬間磺平,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工拐辽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拣挪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓俱诸,卻偏偏與公主長得像菠劝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乙埃,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Hadoop部署方式 本地模式 偽分布模式(在一臺機器中模擬闸英,讓所有進程在一臺機器上運行) 集群模式 服務器只是一...
    陳半仙兒閱讀 1,613評論 0 9
  • 注:本文是我學習Hadoop權威指南的時候一些關鍵點的記錄,并不是全面的知識點 Hadoop 避免數(shù)據(jù)丟失的方法:...
    利伊奧克兒閱讀 735評論 0 2
  • 文/陳安若 在西西弗書店出吹,看到《柔軟》腰封上的這段話:“每個人都很孤獨遇伞。在我們的一生中,遇到愛捶牢,遇到性鸠珠,都不稀罕,...
    陳安若閱讀 7,187評論 0 8
  • 生而為人,在短暫的旅途中灸蟆,你選擇怎樣過此一生驯耻? 難道像咸魚一樣,沒有目標炒考,缺乏規(guī)劃可缚,不想升官發(fā)財,不愿積極進取斋枢,每...
    小小火紅閱讀 110評論 2 3
  • 從來感覺道德這個詞寫起來筆畫比較多但做起來并沒有那么難帘靡。直到上了第一節(jié)職業(yè)道德課才發(fā)現(xiàn)道德分的很細,尤其是我...
    遲_1c12閱讀 134評論 0 0