期末復(fù)習(xí):核心考點(diǎn)、易錯(cuò)點(diǎn)與習(xí)題解析)
《大數(shù)據(jù)技術(shù)原理與應(yīng)用第3版》期末復(fù)習(xí)——第三章分布式文件系統(tǒng)HDFS習(xí)題又到期末沖刺的時(shí)候了。這門課里第三章的HDFSHadoop分布式文件系統(tǒng)幾乎是必考的重點(diǎn)章節(jié)名詞解釋、簡(jiǎn)答、論述題都能從這里出題判斷和選擇題更是喜歡在細(xì)節(jié)上埋伏筆。如果只背結(jié)論不摳原理遇到改錯(cuò)題和場(chǎng)景分析題很容易翻車。這篇文章把我梳理過的HDFS考點(diǎn)、易錯(cuò)點(diǎn)、典型習(xí)題和記憶方法一次性整理出來照著這份清單過一遍比悶頭刷十頁P(yáng)PT扎實(shí)得多。我先把話說在前面這一章的關(guān)鍵不是記住“默認(rèn)塊大小是128MB”這個(gè)數(shù)字而是理解“為什么是128MB”“副本機(jī)制解決了什么問題”“寫一條數(shù)據(jù)的完整鏈路是什么”??荚嚳嫉氖沁壿嬫湕l不是孤立的知識(shí)點(diǎn)。下面按復(fù)習(xí)順序逐塊拆解。1. 全章知識(shí)骨架與記憶主線1.1 先建立一張“設(shè)計(jì)動(dòng)機(jī)→解決方案”的對(duì)應(yīng)表復(fù)習(xí)HDFS之前先想清楚一個(gè)根本問題為什么大數(shù)據(jù)場(chǎng)景下不能直接用普通文件系統(tǒng)單臺(tái)服務(wù)器的磁盤容量有限、讀寫帶寬有限、硬件故障率還不低一旦磁盤損壞數(shù)據(jù)就沒了。HDFS的核心價(jià)值就是把“多臺(tái)廉價(jià)服務(wù)器上的磁盤”組織成一個(gè)邏輯上的超大文件系統(tǒng)同時(shí)解決三個(gè)問題大文件存儲(chǔ)、高吞吐讀寫、自動(dòng)容錯(cuò)。我復(fù)習(xí)時(shí)習(xí)慣畫一張對(duì)應(yīng)表左邊是問題右邊是HDFS的答案這張表放到考試?yán)锞褪钦撌鲱}的核心骨架普通文件系統(tǒng)面臨的痛點(diǎn)HDFS的對(duì)應(yīng)設(shè)計(jì)單機(jī)容量有限存不下PB級(jí)數(shù)據(jù)數(shù)據(jù)分塊后分散存儲(chǔ)到多臺(tái)機(jī)器上單機(jī)磁盤故障會(huì)導(dǎo)致數(shù)據(jù)永久丟失每個(gè)數(shù)據(jù)塊保存多個(gè)副本自動(dòng)檢測(cè)并恢復(fù)單機(jī)讀寫帶寬受限處理速度慢多節(jié)點(diǎn)并行讀寫數(shù)據(jù)塊分布在集群中文件元數(shù)據(jù)目錄、權(quán)限、塊位置量大由NameNode統(tǒng)一管理只保存元數(shù)據(jù)不存數(shù)據(jù)小概率的節(jié)點(diǎn)故障影響整體可用性主節(jié)點(diǎn)NameNode和從節(jié)點(diǎn)DataNode各自獨(dú)立承擔(dān)角色故障隔離這張表最大的意義是幫你把章節(jié)里零散的知識(shí)點(diǎn)掛到一條主線上HDFS做的每件事本質(zhì)都在回答“如何用一堆便宜的機(jī)器提供可靠、高吞吐的存儲(chǔ)服務(wù)”。理解了這條主線就算考試出一道你沒見過的新場(chǎng)景題也能按照這個(gè)思路去推導(dǎo)答案。1.2 四個(gè)核心關(guān)鍵詞決定全章考點(diǎn)分布這一章表面內(nèi)容多但真正反復(fù)考的就是四組關(guān)鍵詞數(shù)據(jù)塊與副本、NameNode/DataNode/SecondaryNameNode三個(gè)角色的職責(zé)、讀寫數(shù)據(jù)流、容錯(cuò)與恢復(fù)機(jī)制。我在復(fù)習(xí)時(shí)把這四組當(dāng)作四個(gè)籃子遇到任何知識(shí)點(diǎn)就往籃子里放。比如“機(jī)架感知”屬于副本放置策略“校驗(yàn)和”屬于數(shù)據(jù)完整性校驗(yàn)“安全模式”屬于啟動(dòng)恢復(fù)流程“租約”屬于寫過程的并發(fā)控制。這樣歸類之后復(fù)習(xí)時(shí)不會(huì)漏項(xiàng)做題時(shí)看到關(guān)鍵詞也能快速定位考點(diǎn)。順便提一句很多同學(xué)會(huì)把注意力放在HDFS的“大文件”上忽略了它對(duì)“小文件”并不友好這一點(diǎn)??荚嚺袛囝}里經(jīng)常出現(xiàn)“HDFS適合存儲(chǔ)大量小文件”這種錯(cuò)誤說法。記住HDFS是為大文件、流式訪問設(shè)計(jì)的大量小文件會(huì)把NameNode內(nèi)存拖垮因?yàn)槊總€(gè)文件、每個(gè)塊都要在NameNode里對(duì)應(yīng)一條元數(shù)據(jù)記錄。2. 高頻考點(diǎn)逐個(gè)擊破塊、副本與三個(gè)核心角色2.1 數(shù)據(jù)塊與副本機(jī)制——為什么塊不能太大也不能太小數(shù)據(jù)塊Block是HDFS存儲(chǔ)的最小單元默認(rèn)大小在Hadoop 2.x之后是128MB舊版本是64MB。考試??嫉膬蓚€(gè)點(diǎn)一是默認(rèn)值二是塊大小設(shè)計(jì)背后“尋址時(shí)間與傳輸時(shí)間平衡”的邏輯。這個(gè)邏輯要能自己講清楚磁盤尋址時(shí)間大約10ms如果塊太小比如4KB那么傳輸一個(gè)塊可能只需要不到1ms尋址時(shí)間占比過高效率極低。為了讓數(shù)據(jù)傳輸時(shí)間占比至少是尋址時(shí)間的10倍以上塊的大小要設(shè)計(jì)到百M(fèi)B級(jí)別。按百M(fèi)B每秒的磁盤傳輸速度計(jì)算128MB的塊傳輸時(shí)間約1秒左右相比10ms尋址時(shí)間已經(jīng)足夠掩蓋尋址開銷。塊太大也不行因?yàn)镸apReduce任務(wù)處理一個(gè)塊是一個(gè)最小計(jì)算單元塊太大導(dǎo)致任務(wù)數(shù)太少不利于并行計(jì)算塊太小又導(dǎo)致元數(shù)據(jù)膨脹NameNode內(nèi)存不足。副本機(jī)制也是必考。默認(rèn)副本數(shù)是3放置策略講究“機(jī)架感知”第一個(gè)副本放在客戶端所在節(jié)點(diǎn)如果客戶端不在集群內(nèi)則隨機(jī)選一個(gè)節(jié)點(diǎn)第二個(gè)副本放在與第一個(gè)副本相同機(jī)架的另一臺(tái)節(jié)點(diǎn)第三個(gè)副本放在不同機(jī)架的節(jié)點(diǎn)。這么設(shè)計(jì)是為了兼顧容錯(cuò)和帶寬同機(jī)架內(nèi)副本可以快速同步跨機(jī)架副本能抵抗整個(gè)機(jī)架斷電或交換機(jī)故障。考簡(jiǎn)答題時(shí)要把“同一機(jī)架”“不同機(jī)架”這個(gè)層次說清楚只說“不同機(jī)器上”是不夠的。這里補(bǔ)充一個(gè)常見的計(jì)算題一個(gè)128MB的文件默認(rèn)塊大小128MB副本數(shù)3實(shí)際占用存儲(chǔ)空間是多少答案簡(jiǎn)單128MB乘以3等于384MB。但如果文件是200MB它會(huì)分成兩個(gè)塊2個(gè)塊各存3份副本實(shí)際占用600MB。考試有時(shí)候會(huì)把“邏輯文件大小”和“物理占用空間”混在一起考做題時(shí)一定要先把塊數(shù)量算清楚。2.2 NameNode、DataNode與SecondaryNameNode的分工與常見誤區(qū)NameNode是HDFS的主節(jié)點(diǎn)負(fù)責(zé)管理文件系統(tǒng)的命名空間維護(hù)文件目錄樹、文件與塊的映射關(guān)系、塊與DataNode的映射關(guān)系。它不存儲(chǔ)實(shí)際數(shù)據(jù)所有元數(shù)據(jù)都保存在內(nèi)存中便于快速響應(yīng)客戶端請(qǐng)求。這個(gè)“只存元數(shù)據(jù)、不存數(shù)據(jù)”的設(shè)計(jì)經(jīng)??纪瑫r(shí)也解釋了一個(gè)經(jīng)典面試題為什么NameNode內(nèi)存大小限制了集群規(guī)模因?yàn)槲募?shù)、塊數(shù)越多元數(shù)據(jù)量越大內(nèi)存不夠就撐不住。DataNode是實(shí)際存儲(chǔ)節(jié)點(diǎn)負(fù)責(zé)讀寫本地磁盤上的數(shù)據(jù)塊周期性向NameNode上報(bào)自己保存的塊列表塊報(bào)告。DataNode還要響應(yīng)客戶端的直接讀寫請(qǐng)求。??嫉囊粋€(gè)判斷題是“客戶端讀寫數(shù)據(jù)必須經(jīng)過NameNode轉(zhuǎn)發(fā)”這是錯(cuò)誤的。NameNode只負(fù)責(zé)告訴客戶端“你要的數(shù)據(jù)在哪個(gè)DataNode上”實(shí)際數(shù)據(jù)傳輸是客戶端與DataNode之間直接進(jìn)行的不經(jīng)過NameNode。這樣可以避免主節(jié)點(diǎn)成為性能瓶頸。SecondaryNameNode是理解上最容易出錯(cuò)的一個(gè)角色。它不是NameNode的熱備不能在主節(jié)點(diǎn)宕機(jī)后自動(dòng)頂上去它的職責(zé)是定期合并NameNode的編輯日志EditsLog和鏡像文件FsImage減輕NameNode啟動(dòng)時(shí)的合并壓力并在NameNode宕機(jī)時(shí)輔助恢復(fù)數(shù)據(jù)。考試經(jīng)常出辨析題“SecondaryNameNode是NameNode的備份節(jié)點(diǎn)”讓判斷對(duì)錯(cuò)答案是“錯(cuò)”。它只是輔助合并日志的幫手最多能保留一份相對(duì)較新的檢查點(diǎn)數(shù)據(jù)但無法保證零丟失接管。為了把三個(gè)角色徹底分清可以這樣記憶NameNode是大腦管記憶不干活。DataNode是手腳真干活存儲(chǔ)和讀寫數(shù)據(jù)。SecondaryNameNode是秘書定期幫大腦把工作日志整理歸檔但大腦出問題時(shí)秘書不能完全替代大腦。2.3 元數(shù)據(jù)、FsImage與EditsLog——啟動(dòng)流程里暗藏考點(diǎn)FsImage是NameNode內(nèi)存元數(shù)據(jù)在磁盤上的快照EditsLog是每次操作產(chǎn)生的日志記錄。NameNode啟動(dòng)時(shí)會(huì)把FsImage加載到內(nèi)存然后重放EditsLog中的操作記錄最后把合并后的狀態(tài)寫回新的FsImage。這個(gè)流程里最典型的考法是把順序打亂讓你判斷哪一步有問題或者直接問“NameNode啟動(dòng)時(shí)先加載誰、再重放誰”??荚嚭?jiǎn)答題還喜歡問“為什么HDFS不適合存儲(chǔ)大量小文件”答案要點(diǎn)就是小文件會(huì)導(dǎo)致元數(shù)據(jù)膨脹占用NameNode內(nèi)存同時(shí)小文件也導(dǎo)致尋址時(shí)間占比上升讀寫效率下降。另外每個(gè)小文件對(duì)應(yīng)一個(gè)塊分布式計(jì)算框架處理小文件時(shí)會(huì)產(chǎn)生過多任務(wù)調(diào)度開銷變大。3. 讀寫流程與可靠性機(jī)制把完整鏈路講出邏輯感3.1 寫文件流程——流水線復(fù)制與應(yīng)答機(jī)制HDFS寫文件是高頻考點(diǎn)經(jīng)常以簡(jiǎn)答題或流程描述題出現(xiàn)而且跨章節(jié)的MapReduce題目里也可能作為前置步驟。完整流程可以壓縮成七個(gè)步驟客戶端調(diào)用DistributedFileSystem的create()方法創(chuàng)建文件。NameNode檢查文件是否已存在、路徑是否合法、權(quán)限是否足夠。檢查通過后在命名空間創(chuàng)建新文件記錄返回輸出流對(duì)象??蛻舳藢⑽募蟹殖扇舾蓚€(gè)塊每個(gè)塊大小默認(rèn)128MB并按塊寫入輸出流??蛻舳讼騈ameNode申請(qǐng)第一個(gè)塊應(yīng)該寫到哪些DataNodeNameNode根據(jù)副本策略返回一個(gè)DataNode列表??蛻舳藢K數(shù)據(jù)直接寫入第一個(gè)DataNode第一個(gè)DataNode以64KB為粒度把數(shù)據(jù)拆成數(shù)據(jù)包通過流水線方式依次傳給第二個(gè)、第三個(gè)DataNode。當(dāng)前一個(gè)DataNode寫完一個(gè)數(shù)據(jù)包后會(huì)向客戶端返回確認(rèn)消息ack客戶端收到整個(gè)塊的確認(rèn)后才繼續(xù)發(fā)送下一個(gè)塊。所有塊寫完后客戶端調(diào)用close()關(guān)閉流NameNode在提交文件后標(biāo)記寫入完成。這套流程中的每個(gè)環(huán)節(jié)都可能變成考點(diǎn)。我專門整理了幾條需要注意的細(xì)節(jié)流水線復(fù)制是邊接收邊轉(zhuǎn)發(fā)而不是等收到完整塊再復(fù)制這樣能降低延遲副本之間的復(fù)制順序嚴(yán)格依照NameNode返回的DataNode列表排在第一的節(jié)點(diǎn)最先收到數(shù)據(jù)塊寫完之后數(shù)據(jù)并不是立刻就可以被其他客戶端讀到需要等到整條流水線確認(rèn)完成這是強(qiáng)一致模型的一種體現(xiàn)。3.2 讀文件流程——就近讀取與多塊并行讀文件流程相對(duì)簡(jiǎn)單但同樣有細(xì)節(jié)題??蛻舳讼葟腘ameNode獲知文件對(duì)應(yīng)的塊列表及每個(gè)塊所在的DataNode列表然后選擇離自己“最近”的DataNode讀取。這里的“最近”不是物理距離而是Hadoop定義的距離算法同節(jié)點(diǎn)距離最近其次是同機(jī)架再次是跨機(jī)架。考試可能出一道排序題或選擇題問“客戶端與DataNode同機(jī)架時(shí)讀取優(yōu)先級(jí)如何排序”要能正確給出結(jié)論。另一個(gè)可能的出題方向是并發(fā)讀取。HDFS允許多個(gè)客戶端并行讀取同一個(gè)文件塊的讀取互不干擾。讀過程的故障處理也要知道如果某個(gè)DataNode讀取失敗客戶端會(huì)向NameNode重新申請(qǐng)?jiān)搲K所在的另一個(gè)DataNode繼續(xù)讀取已經(jīng)讀到的部分不會(huì)浪費(fèi)。在復(fù)習(xí)讀流程時(shí)我建議跟“響應(yīng)式緩存”或“本地讀優(yōu)化”這樣的延伸話題肉眼熟一遍。雖然很多教材不展開講但遇到開放性論述題時(shí)提到“HDFS會(huì)把讀取與計(jì)算調(diào)度在同一節(jié)點(diǎn)減少網(wǎng)絡(luò)傳輸”會(huì)是很加分的點(diǎn)。3.3 數(shù)據(jù)完整性校驗(yàn)、安全模式與故障恢復(fù)HDFS保證數(shù)據(jù)可靠不僅要靠副本還要靠校驗(yàn)和。寫入時(shí)客戶端計(jì)算每個(gè)數(shù)據(jù)包的校驗(yàn)和并隨數(shù)據(jù)一起下發(fā)DataNode在存儲(chǔ)數(shù)據(jù)塊時(shí)會(huì)保存校驗(yàn)和。讀取時(shí)如果客戶端或DataNode發(fā)現(xiàn)校驗(yàn)和不匹配就說明數(shù)據(jù)損壞會(huì)從其他副本重新讀取并報(bào)告給NameNode由NameNode復(fù)制一份健康副本來修復(fù)副本數(shù)。這個(gè)機(jī)制幾乎必考一道概念題答的時(shí)候要扣住“校驗(yàn)和”“副本修復(fù)”兩個(gè)關(guān)鍵詞。安全模式是啟動(dòng)時(shí)的自動(dòng)保護(hù)狀態(tài)。NameNode啟動(dòng)時(shí)會(huì)進(jìn)入安全模式期間只接收元數(shù)據(jù)請(qǐng)求不能進(jìn)行寫操作也不會(huì)刪除、復(fù)制數(shù)據(jù)塊。NameNode通過“可用數(shù)據(jù)塊最小值”來判斷是否可以退出安全模式。默認(rèn)閾值是0.999意思是當(dāng)前可用副本數(shù)達(dá)到全部副本數(shù)的99.9%時(shí)才能退出安全模式。考試中有一類題是判斷“安全模式下能否執(zhí)行刪除操作”答案是不能。另一類是問“DataNode宕機(jī)后HDFS會(huì)不會(huì)進(jìn)入安全模式”答案是當(dāng)副本缺失比例過高時(shí)才會(huì)觸發(fā)少量節(jié)點(diǎn)宕機(jī)并會(huì)自動(dòng)復(fù)制修復(fù)不必?fù)?dān)心整個(gè)集群鎖住。故障恢復(fù)方面DataNode與NameNode之間通過心跳機(jī)制保持聯(lián)系。DataNode默認(rèn)每3秒發(fā)送一次心跳如果NameNode超過10分鐘默認(rèn)參數(shù)注意教材版本差異沒有收到某個(gè)DataNode的心跳就判定該節(jié)點(diǎn)失效然后啟動(dòng)塊復(fù)制任務(wù)在其他節(jié)點(diǎn)上補(bǔ)齊副本數(shù)??荚?yán)锍霈F(xiàn)過這樣的簡(jiǎn)單計(jì)算或概念題副本數(shù)為3的塊一臺(tái)節(jié)點(diǎn)宕機(jī)后集群要等多久才會(huì)開始補(bǔ)副本。答題時(shí)要提到心跳超時(shí)和相關(guān)時(shí)長(zhǎng)參數(shù)不需要死背具體秒數(shù)但要能說清楚“先等心跳超時(shí)再觸發(fā)復(fù)制”。4. 真題實(shí)戰(zhàn)演練與易錯(cuò)點(diǎn)排查4.1 典型選擇題、判斷題與簡(jiǎn)答題梳理為了貼合考試題型我從這門課??嫉恼鹿?jié)練習(xí)里挑了幾類有代表性的題目思路這里不追求題量大重點(diǎn)展示解題時(shí)如何避開陷阱。選擇題示例1關(guān)于HDFS默認(rèn)塊大小下列哪項(xiàng)說法正確A. HDFS默認(rèn)塊大小越大越好因?yàn)閷ぶ窌r(shí)間占比更低B. 默認(rèn)塊大小是64MB確定后不可修改C. 設(shè)計(jì)時(shí)要兼顧尋址開銷與并行計(jì)算的任務(wù)粒度D. 塊大小只影響存儲(chǔ)容量不影響讀寫性能這道題選C。A的說法只說對(duì)了一半塊太大會(huì)導(dǎo)致任務(wù)數(shù)減少影響計(jì)算并行度B把版本和可配置性搞混了不同版本默認(rèn)值不同而且配置文件里可以調(diào)整D明顯錯(cuò)誤因?yàn)閴K大小直接影響元數(shù)據(jù)數(shù)量和任務(wù)調(diào)度數(shù)量。選擇題示例2一個(gè)128MB的物理存儲(chǔ)節(jié)點(diǎn)集群中存儲(chǔ)了一個(gè)200MB的文件副本數(shù)為2最少需要多少節(jié)點(diǎn)才能存下全部副本A. 2個(gè)B. 3個(gè)C. 4個(gè)D. 5個(gè)文件名塊是128MB和72MB兩個(gè)塊各存2份副本每個(gè)塊的兩份副本必須放在不同節(jié)點(diǎn)上所以至少要3個(gè)節(jié)點(diǎn)。有的同學(xué)按“所有副本放兩個(gè)節(jié)點(diǎn)上”去理解就漏掉了“不同節(jié)點(diǎn)”這個(gè)隱藏約束。判斷題示例1SecondaryNameNode可以隨時(shí)接管NameNode成為新的主節(jié)點(diǎn)。判錯(cuò)。SecondaryNameNode不是熱備??荚?yán)镞@種判斷題頻頻出現(xiàn)因?yàn)榻滩膶?duì)SecondaryNameNode描述不多很多同學(xué)望文生義。判斷題示例2客戶端在寫入數(shù)據(jù)時(shí)NameNode不參與數(shù)據(jù)轉(zhuǎn)發(fā)只負(fù)責(zé)元數(shù)據(jù)管理和DataNode選擇。判對(duì)。數(shù)據(jù)傳輸是客戶端和DataNode直接完成的。這句話幾乎每份期末卷子都會(huì)出現(xiàn)答的時(shí)候還要能配上簡(jiǎn)單說明。簡(jiǎn)答題示例1簡(jiǎn)述HDFS寫文件流程中副本的流水線復(fù)制比“先寫完整塊再復(fù)制”的優(yōu)勢(shì)在哪里。答流水線方式下第一個(gè)DataNode收到一部分?jǐn)?shù)據(jù)包后就開始向后傳而不是等整個(gè)128MB塊全部接收完成再傳。這樣減少了端到端的傳輸延遲同時(shí)多個(gè)DataNode幾乎是同步并行工作整體寫吞吐量更高。這一點(diǎn)在考試中屬于“理解型”題目只背流程不深想就可能丟分。簡(jiǎn)答題示例2機(jī)架感知策略如何提升HDFS的可靠性答機(jī)架感知讓HDFS在放置副本時(shí)考慮物理網(wǎng)絡(luò)拓?fù)浔苊獍淹粔K的多個(gè)副本放在同一機(jī)架或同一節(jié)點(diǎn)。一旦整個(gè)機(jī)架掉電或交換機(jī)故障至少還有一個(gè)副本在其他機(jī)架上數(shù)據(jù)不會(huì)全部丟失。它同時(shí)還能提高讀寫帶寬因?yàn)榭蛻舳藭?huì)優(yōu)先選擇同機(jī)架的DataNode進(jìn)行通信減少跨機(jī)架網(wǎng)絡(luò)流量。4.2 易錯(cuò)點(diǎn)速查表考前看這一張就夠我把復(fù)習(xí)時(shí)踩過的坑和同學(xué)們經(jīng)常搞混的點(diǎn)匯總成一張速查表考前掃一遍比翻筆記快易錯(cuò)說法正確理解“塊越小越好讀取越靈活”塊太小會(huì)導(dǎo)致尋址時(shí)間占比過高、元數(shù)據(jù)膨脹、任務(wù)數(shù)量爆炸“NameNode存儲(chǔ)數(shù)據(jù)文件”NameNode只存元數(shù)據(jù)數(shù)據(jù)文件在DataNode“SecondaryNameNode是NameNode的熱備”它是日志合并輔助角色不能自動(dòng)接管“所有副本必須放在不同機(jī)架”默認(rèn)策略是同機(jī)架兩份、跨機(jī)架一份“副本數(shù)越多越好”副本增加會(huì)成倍占用存儲(chǔ)和網(wǎng)絡(luò)帶寬一般取3即可“文件寫一半客戶端立刻能讀到最新數(shù)據(jù)”HDFS是強(qiáng)一致模型寫流程完成前其他客戶端不能讀到未提交數(shù)據(jù)“安全模式不能讀文件”安全模式下可以讀但不能寫、不能刪除、不能復(fù)制塊這張表里各項(xiàng)往深里再摳一句副本數(shù)并不是越多越好副本數(shù)越多寫入時(shí)需要同時(shí)復(fù)制的份數(shù)越多寫性能和網(wǎng)絡(luò)壓力變大平時(shí)生產(chǎn)環(huán)境常用3測(cè)試環(huán)境可以改成2但不能低于1。塊大小的調(diào)整也牽一發(fā)動(dòng)全身想改默認(rèn)值必須在配置文件里統(tǒng)一調(diào)整并且會(huì)影響MapReduce的任務(wù)劃分不能拍腦袋隨便改。4.3 復(fù)習(xí)沖刺建議與考場(chǎng)答題技巧到了考前最后兩天我不建議再從頭到尾重讀教材而是以題帶點(diǎn)把常見簡(jiǎn)答、論述題快速過一遍。有一個(gè)技巧很管用每復(fù)習(xí)一個(gè)新知識(shí)點(diǎn)嘗試用圖表或者一個(gè)生活化比喻講給別人聽。比如把HDFS比作一個(gè)“快遞系統(tǒng)”NameNode是快遞調(diào)度中心DataNode是各個(gè)倉庫客戶下單寫文件時(shí)調(diào)度中心告訴倉庫怎么放貨、放幾份副本這樣記憶會(huì)非常牢固??紙?chǎng)作答的時(shí)候凡是涉及流程類的題目一定要按先后順序?qū)懖襟E把核心對(duì)象客戶端、NameNode、DataNode和核心動(dòng)作申請(qǐng)、傳輸、確認(rèn)、合并盡量寫完整。判斷錯(cuò)的地方不要只寫“錯(cuò)”字考試改卷時(shí)更看重你能否指出錯(cuò)在哪里。比如判斷“SecondaryNameNode是NameNode的備份節(jié)點(diǎn)”為錯(cuò)后面補(bǔ)一句“它只是輔助合并日志不是熱備”分?jǐn)?shù)立刻不一樣。我個(gè)人實(shí)際操作中還有個(gè)體會(huì)平時(shí)搭建集群做實(shí)驗(yàn)時(shí)用命令查看塊報(bào)告和元數(shù)據(jù)信息比單純背書更有幫助。hdfs dfsadmin -report 能看到每個(gè)DataNode的容量和塊數(shù)hdfs fsck /path 能查某個(gè)文件的塊信息和副本健康狀態(tài)這些都是把理論和實(shí)際串起來的好工具。如果學(xué)校實(shí)驗(yàn)課有類似環(huán)境考前動(dòng)手驗(yàn)證一下副本丟失后的自動(dòng)恢復(fù)過程考場(chǎng)上寫論述題就能做到有理有據(jù)而不是空背概念。這一章的內(nèi)容就梳理到這里。最后再叮囑一句HDFS的很多設(shè)計(jì)并不追求極致性能而是追求在廉價(jià)硬件條件下的可靠性和可擴(kuò)展性。答題時(shí)如果能體現(xiàn)出這種“工程權(quán)衡”的思維而不是死記硬背分?jǐn)?shù)一般都不會(huì)低。祝備考順利。