Hadoop面試知識(shí)點(diǎn)

一.Hadoop

1.Hadoop 主要有以下幾個(gè)優(yōu)點(diǎn)

(1)高擴(kuò)展性:Hadoop支持集群節(jié)點(diǎn)的動(dòng)態(tài)增加,方便集群的擴(kuò)展 ,可以根據(jù)需要擴(kuò)展到上千節(jié)點(diǎn)
(2)高容錯(cuò)性:Hadoop能夠自動(dòng)保存數(shù)據(jù)的多個(gè)副本,當(dāng)有集群數(shù)據(jù)丟失時(shí),能自動(dòng)實(shí)現(xiàn)數(shù)據(jù)備份。
(3)高效性:Hadoop可以充分地利用網(wǎng)絡(luò)、磁盤I/O資源和備份數(shù)據(jù)實(shí)現(xiàn)文件的快速讀寫。
(4)高可靠性:正在執(zhí)行的子任務(wù)由于某種原因掛掉的話,Hadoop可以自動(dòng)讓其他節(jié)點(diǎn)繼續(xù)執(zhí)行該子任務(wù),不影響整個(gè)任務(wù)的執(zhí)行
(5)低成本:Hadoop集群不用部署在專用服務(wù)器上,只需部署在通用的計(jì)算機(jī)中即可;而且Hadoop生態(tài)系統(tǒng)絕大部分都是開源的,用戶很容易拿來開發(fā)使用

二.HDFS

1.HDFS架構(gòu)

一個(gè)HDFS集群是由一個(gè)NameNode(Master)節(jié)點(diǎn)和若干個(gè)DataNode(Slave)節(jié)點(diǎn)組成。
(1)NameNode節(jié)點(diǎn)作為主服務(wù)器,管理整個(gè)文件系統(tǒng)的命名空間和客戶端對(duì)文件的訪問操作,比如打開、關(guān)閉、重命名文件或目錄等,同時(shí)它也負(fù)責(zé)數(shù)據(jù)塊到具體DataNode的映射
(2)SecondaryNameNode:幫助NameNode收集文件系統(tǒng)運(yùn)行的狀態(tài)信息,周期性保存 NameNode的元數(shù)據(jù)(包括 fsimage和edits)
(3)DataNode管理存儲(chǔ)的數(shù)據(jù),處理客戶端的文件讀寫請(qǐng)求,并在NameNode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制工作

2.Block

(1)HDFS中采用了數(shù)據(jù)塊作為數(shù)據(jù)讀寫單位
(2)HDFS數(shù)據(jù)塊的默認(rèn)大小是128MB,之所以設(shè)置這么大,目的是為了減少尋址開銷
(3)數(shù)據(jù)塊只是 HDFS 文件分割的單位,并不是數(shù)據(jù)存儲(chǔ)單位。 比如文件為200MB,它會(huì)被分成兩個(gè)數(shù)據(jù)塊,一個(gè)數(shù)據(jù)塊為128MB,另一個(gè)數(shù)據(jù)塊為72MB而不128MB

3.HDFS的特點(diǎn)

(1)優(yōu)點(diǎn)
(1)高容錯(cuò)性
* 上傳的數(shù)據(jù)自動(dòng)保存多個(gè)副本 它是通過增加副本的數(shù)量來增加它的容錯(cuò)性的。
* 如果某一個(gè)副本丟失,HDFS 機(jī)制會(huì)復(fù)制其他機(jī)器上的副本, 而我們不必關(guān)注它的實(shí)現(xiàn)。
(2)適合大數(shù)據(jù)的處理。
* 能夠處理 GB,TB甚至 PB 級(jí)別的數(shù)據(jù)
* 能夠處理百萬規(guī)模的數(shù)據(jù), 非常的大。
(3)流式文件寫入
* 一次寫入,多次讀取。文件一旦寫入,不能修改,只能增加
* 這樣可以保證數(shù)據(jù)一致性
(4)可構(gòu)建在廉價(jià)機(jī)器上。
* 通過多副本提高可靠性。
* 提供了容錯(cuò)和恢復(fù)機(jī)制
(2)劣勢(shì)
(1)低延時(shí)數(shù)據(jù)訪問
* 它適合高吞吐率的場(chǎng)景,就是在某一時(shí)間內(nèi)寫入大量的數(shù)據(jù),但是它在低延時(shí)的情況下是不行的,比如毫秒級(jí)以內(nèi)讀取數(shù)據(jù),這樣它是很難做到的
(2)小文件的存儲(chǔ)
* 存放大量小文件的話,它會(huì)占用 NameNode的大量?jī)?nèi)存在存儲(chǔ)文件、目錄和塊信息上。這樣是不可取的,因?yàn)?NameNode 的內(nèi)存總是有限的。
* 小文件存儲(chǔ)的尋道時(shí)間會(huì)超過文件的讀取時(shí)間,這違背了 HDFS 的設(shè)計(jì)初衷。
(3)并發(fā)寫入,文件隨機(jī)修改
* 一個(gè)文件只能一個(gè)線程寫,不能多個(gè)線程同時(shí)寫
* 僅支持文件的追加,不支持文件的隨機(jī)修改
(4)不支持超強(qiáng)的事務(wù)。
* 沒有像關(guān)系型數(shù)據(jù)庫那樣,對(duì)事務(wù)具有強(qiáng)有力的支持。

4.HDFS的讀寫數(shù)據(jù)流程

讀:
(1).客戶端向 NameNode 發(fā)起 RPC 調(diào)用,請(qǐng)求讀取文件數(shù)據(jù)
(2).NameNode檢查文件是否存在,如果存在則獲取文件的元信息(block id及對(duì)應(yīng)的DataNode列表)
(3).客戶端收到元信息后選取一個(gè)網(wǎng)絡(luò)距離最近的DataNode,依次請(qǐng)求讀取每個(gè)數(shù)據(jù)塊,客戶端首先要校驗(yàn)文件是否損壞,如果損壞,客戶端會(huì)選取另外的DataNode請(qǐng)求。
(4).DataNode與客戶端建立Socket連接,傳輸對(duì)應(yīng)的數(shù)據(jù)塊,客戶端收到數(shù)據(jù)緩存到本地,之后寫入文件。
(5).依次傳輸剩下的數(shù)據(jù)塊,直到整個(gè)文件合并完成

寫:
(1).客戶端根namenode通信請(qǐng)求上傳文件,namenode檢查目標(biāo)文件和目錄是否已存在,判斷是否上傳,并向客戶端返回檢查結(jié)果
(3).客戶端得到上傳文件的允許后讀取客戶端配置,向NameNode請(qǐng)求上傳第一個(gè)數(shù)據(jù)塊,
(4).Namenode會(huì)根據(jù)客戶端配置來查詢DataNode信息,返回3個(gè)datanode服務(wù)器ABC
(5).client請(qǐng)求3臺(tái)dn中的一臺(tái)A上傳數(shù)據(jù)(本質(zhì)上是一個(gè)RPC調(diào)用,建立pipeline),A收到請(qǐng)求會(huì)繼續(xù)調(diào)用B,然后B調(diào)用C,將真?zhèn)€pipeline建立完成,逐級(jí)返回客戶端
(6).client開始往A上傳第一個(gè)block(先從磁盤讀取數(shù)據(jù)放到一個(gè)本地內(nèi)存緩存),以packet為單位,A收到一個(gè)packet就會(huì)傳給B,B傳給C;A每傳一個(gè)packet會(huì)放入一個(gè)應(yīng)答隊(duì)列等待應(yīng)答
(7).當(dāng)一個(gè)block傳輸完成之后,client再次請(qǐng)求namenode上傳第二個(gè)block的服務(wù)器

5.fsimage和edits

(1)fsimage和edits是NameNode 中兩個(gè)很重要的文件
(2)fsimage鏡像文件包含了整個(gè)HDFS文件系統(tǒng)的所有目錄、文件的 indoe 信息和數(shù)據(jù)塊到文件的映射
(3)edits 文件主要是在 NameNode 經(jīng)啟動(dòng)的情況下對(duì) HDFS 進(jìn)行的各種更新操作進(jìn)行記錄,HDFS客戶端執(zhí)行所有的寫操作都會(huì)被記錄到 dits 文件中
(4)NameNode數(shù)據(jù)是保存在內(nèi)存中的,由 DataNode 其匯報(bào)每個(gè)節(jié)點(diǎn)所保存的相關(guān)信息

三.MapReduce

1.MapReduce

MapReduce是一個(gè)簡(jiǎn)單易用的并行計(jì)算模型,它將運(yùn)行于大規(guī)模集群上的復(fù)雜的并行計(jì)算過程高度地抽象為兩個(gè)函數(shù)Map和Reduce。

四.Yarn

1.Yarn

(1).Yarn主要負(fù)責(zé)集群的資源管理和調(diào)度,它不僅可以支持 MapReduce 計(jì)算,還支持Hive,HBase,Pig,Spark等應(yīng)用,這樣就可以方便地使用Yarn從系統(tǒng)層面對(duì)集群進(jìn)行統(tǒng)一管理。
(2).Yarn采用 Master-Slave結(jié)構(gòu),其中ResourceManager為Master, ResourceManager負(fù)責(zé)整個(gè)系統(tǒng)的資源管理和分配,
(3).NodeManager為Slave, NodeManager負(fù)責(zé)每個(gè) DataNode 上的資源和任務(wù)管理

2.Yarn基本框架與組件

(1).Yarn主要由ResourceManager,NodeManager,Container和ApplicationMaster組件組成
(2).ResourceManager
* ResourceManager是Yarn集群的主控節(jié)點(diǎn),負(fù)責(zé)協(xié)調(diào)和管理整個(gè)集群(所有NodeManager)的資源,響應(yīng)用戶提交的不同類型應(yīng)用程序的解析,調(diào)度和監(jiān)控等工作。
* 它主要由兩個(gè)組件構(gòu)成:調(diào)度器(Scheduler)和應(yīng)用程序管理器(ApplicationsManager, ASM)
(3).NodeManager 
* NodeManager是Yarn集群從節(jié)點(diǎn),它是Yarn集群當(dāng)中資源的提供者,也是真正執(zhí)行應(yīng)用程序的容器(Container)的提供者 
* NodeManager負(fù)責(zé)接收ResourceManager的資源分配請(qǐng)求,監(jiān)控應(yīng)用程序的資源使用情況(CPU,內(nèi)存,硬盤,網(wǎng)絡(luò)),并通過心跳向集群資源調(diào)度器ResourceManager匯報(bào)Container 的使用信息 通過與ResourceManager配合,負(fù)責(zé)整個(gè)Hadoop集群中的資源分配工作
(3).ApplicationMaster 
* 主要負(fù)責(zé)向ResourceManager申請(qǐng)執(zhí)行任務(wù)的資源容器,運(yùn)行任務(wù),監(jiān)控整個(gè)任務(wù)的執(zhí)行,跟蹤整個(gè)任務(wù)的狀態(tài),處理任務(wù)失敗等異常情況。

3.Yarn工作流程

(1)客戶端通 ResourceManager向ApplicationsManager提交應(yīng)用,將JAR包文件等上傳到HDFS的指定目錄,并請(qǐng)求一個(gè)ApplicationMaster實(shí)例
(2).ApplicationsManager生成一個(gè)Application ID,ResourceManager將請(qǐng)求轉(zhuǎn)發(fā)給調(diào)度器,調(diào)度器分配一個(gè)Container ,然后ResourceManager在這個(gè) Container中啟動(dòng)ApplicationMaster實(shí)例,并交由NodeManager對(duì)ApplicationMaster實(shí)例進(jìn)行管理
(3)ApplicationMaster向ResourceManager進(jìn)行注冊(cè),注冊(cè)之后客戶端就可以通過查詢ResourceManager獲得 ApplicationMaster的詳細(xì)信息
(4)ApplicationMaster通過計(jì)算任務(wù)數(shù)和數(shù)據(jù)本地性等信息向ResourceManager申請(qǐng)Container,并由ApplicationMaster負(fù)責(zé)將Container啟動(dòng)。
(5)應(yīng)用程序的代碼在啟動(dòng)的Container中運(yùn)行,NodeManager把運(yùn)行的進(jìn)度、狀態(tài)等信息發(fā)送給 ApplicationMaster
(6)重復(fù)步驟(4)(5)直至應(yīng)用程序運(yùn)行結(jié)束。 ApplicationMaster向ResourceManager取消注冊(cè)然后關(guān)閉,所有用到的Container也歸還給系統(tǒng)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容