最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

秋招來(lái)了!一起看看去年校招面試中Hadoop高頻都問(wèn)些什么?

2023-07-31 11:02 作者:滌生大數(shù)據(jù)  | 我要投稿

一、總述

校招是遠(yuǎn)不同于社招的,企業(yè)對(duì)學(xué)生的要求更多的是一些概念性的東西,即所謂的八股文。但有些場(chǎng)景類(lèi)的題目也是會(huì)涉及到,尤其是在一些中大廠(chǎng)的面試題中。場(chǎng)景題固然是能不能中大廠(chǎng)中必不可少的部分,但是基礎(chǔ)牢不牢才是能不能拿下大廠(chǎng)的關(guān)鍵部分。下面,就介紹下在校招面試中Hadoop都問(wèn)些什么內(nèi)容?(不多,但都是經(jīng)典中的經(jīng)典)。

二、HDFS部分
問(wèn)題1:介紹下什么是 HDFS(Hadoop Distributed File System)?它的特點(diǎn)是什么

Hadoop Distributed File System(HDFS)是Apache Hadoop生態(tài)系統(tǒng)的一個(gè)核心組件,是一個(gè)可擴(kuò)展的分布式文件系統(tǒng),用于存儲(chǔ)和處理大規(guī)模數(shù)據(jù)集。HDFS的設(shè)計(jì)基于Google的GFS(Google File System),具有高可靠性、高容錯(cuò)性和高吞吐量等特點(diǎn)。其特點(diǎn)如下:

1.分布式存儲(chǔ):HDFS文件系統(tǒng)采用分布式存儲(chǔ)方式,將大文件切分為一系列數(shù)據(jù)塊并存儲(chǔ)于多臺(tái)機(jī)器上,提高了數(shù)據(jù)的可靠性和處理能力。

2.高容錯(cuò)性:HDFS采用了多副本機(jī)制,將文件的多份副本分散地存放在不同的機(jī)器上,這樣即使某臺(tái)機(jī)器發(fā)生故障,也可以從其他機(jī)器上找到文件的副本。

3.海量數(shù)據(jù):HDFS可存儲(chǔ)PB級(jí)以上的數(shù)據(jù),可進(jìn)行高效、快速的讀寫(xiě)操作,適用于海量數(shù)據(jù)的存儲(chǔ)和處理。

4.適用于批處理:HDFS傾向于支持批處理操作,通常用于大數(shù)據(jù)場(chǎng)景下的離線(xiàn)計(jì)算等任務(wù)。

但其也有一些缺點(diǎn),具體如下:

1.不適合低延時(shí)數(shù)據(jù)訪(fǎng)問(wèn):比如毫秒級(jí)的來(lái)存儲(chǔ)數(shù)據(jù),這是不行的,它做不到。? ? ??

2.無(wú)法高效的對(duì)大量小文件進(jìn)行存儲(chǔ):存儲(chǔ)大量小文件的話(huà),它會(huì)占用NameNode大量的內(nèi)存來(lái)存儲(chǔ)文件、目錄和塊信息。

3.并發(fā)寫(xiě)入、文件隨機(jī)修改:一個(gè)文件只能有一個(gè)寫(xiě),不允許多個(gè)線(xiàn)程同時(shí)寫(xiě)。僅支持?jǐn)?shù)據(jù) append(追加),不支持文件的隨機(jī)修改。

問(wèn)題2:HDFS中的塊(Block)大小是多少?為什么?

在HDFS3.×中,默認(rèn)的塊大小是128MB。這個(gè)塊大小的選擇是有理由的,主要基于以下兩個(gè)方面的考慮:

1.減少尋址開(kāi)銷(xiāo):較小的塊大小會(huì)增加訪(fǎng)問(wèn)文件的次數(shù),因?yàn)橐x取更多的塊。這將導(dǎo)致更多的尋址操作,從而增加尋址開(kāi)銷(xiāo)和網(wǎng)絡(luò)開(kāi)銷(xiāo)。較大的塊大小可以減少尋址次數(shù),從而減少了尋址開(kāi)銷(xiāo)和網(wǎng)絡(luò)開(kāi)銷(xiāo)。

2.提高吞吐量:較大的塊大小可以提高磁盤(pán)順序讀取的效率,因?yàn)檩^大的塊大小可以在讀取過(guò)程中更好地利用磁盤(pán)的數(shù)據(jù)傳輸速率和緩存效率。這可以提高數(shù)據(jù)傳輸?shù)耐掏铝浚瑥亩岣哒麄€(gè)系統(tǒng)的性能。

因此,在HDFS中,選擇128MB的塊大小可以在尋址效率和磁盤(pán)讀取效率之間達(dá)到一個(gè)合理的平衡點(diǎn),從而提高整個(gè)系統(tǒng)的性能。但是,塊大小也可以根據(jù)特定的應(yīng)用場(chǎng)景進(jìn)行調(diào)整,以更好地滿(mǎn)足特定需求。

問(wèn)題3:介紹下HDFS的心跳機(jī)制

在HDFS中,在HDFS集群中,每個(gè)數(shù)據(jù)節(jié)點(diǎn)(DataNode)通過(guò)定期向名字節(jié)點(diǎn)(NameNode)發(fā)送心跳信號(hào)來(lái)確認(rèn)自己在線(xiàn)的機(jī)制。它是一種基于時(shí)間間隔的通信協(xié)議,用于數(shù)據(jù)節(jié)點(diǎn)向名稱(chēng)節(jié)點(diǎn)發(fā)送消息,告知名稱(chēng)節(jié)點(diǎn)它們的存活狀態(tài)和負(fù)載情況。

HDFS心跳機(jī)制的工作流程如下:

1.數(shù)據(jù)節(jié)點(diǎn)啟動(dòng)后,向名稱(chēng)節(jié)點(diǎn)注冊(cè)自己,并告知自己的存儲(chǔ)空間、塊列表等信息。

2.數(shù)據(jù)節(jié)點(diǎn)定期向名稱(chēng)節(jié)點(diǎn)發(fā)送心跳消息。心跳消息中包含節(jié)點(diǎn)的狀態(tài)信息、存儲(chǔ)空間、數(shù)據(jù)塊列表等信息。心跳時(shí)間間隔默認(rèn)為3秒。

3.名稱(chēng)節(jié)點(diǎn)接收心跳消息,并記錄節(jié)點(diǎn)的狀態(tài)信息。如果名稱(chēng)節(jié)點(diǎn)在一定時(shí)間內(nèi)沒(méi)有收到某個(gè)節(jié)點(diǎn)的心跳消息,就會(huì)認(rèn)為該節(jié)點(diǎn)已經(jīng)失效,并將其從集群中移除。

4.如果數(shù)據(jù)節(jié)點(diǎn)上的某個(gè)塊已經(jīng)被標(biāo)記為失效,數(shù)據(jù)節(jié)點(diǎn)在下一次向名稱(chēng)節(jié)點(diǎn)發(fā)送心跳時(shí)會(huì)告知名稱(chēng)節(jié)點(diǎn),這樣名稱(chēng)節(jié)點(diǎn)就可以更新塊的狀態(tài)信息,以便客戶(hù)端能夠避免訪(fǎng)問(wèn)已經(jīng)失效的塊。

心跳機(jī)制可以保證HDFS集群中數(shù)據(jù)節(jié)點(diǎn)和名稱(chēng)節(jié)點(diǎn)之間的連接狀態(tài),以及數(shù)據(jù)節(jié)點(diǎn)上塊的狀態(tài)信息都是最新的。它還可以檢測(cè)并處理故障節(jié)點(diǎn),以確保數(shù)據(jù)的可靠性和一致性。

問(wèn)題4:如何保證HDFS中的數(shù)據(jù)一致性?

在HDFS中,保證數(shù)據(jù)一致性是非常重要的。以下是一些HDFS如何保證數(shù)據(jù)一致性的方法:

1.寫(xiě)入管道機(jī)制:HDFS中的寫(xiě)入管道機(jī)制可以保證數(shù)據(jù)的一致性。在寫(xiě)入過(guò)程中,所有的副本必須在相同的時(shí)間內(nèi)被更新,以保證數(shù)據(jù)一致性。具體而言,HDFS使用數(shù)據(jù)塊副本管道機(jī)制,即一個(gè)客戶(hù)端寫(xiě)入數(shù)據(jù)時(shí),HDFS會(huì)建立一條副本管道,保證所有的副本都同時(shí)被寫(xiě)入。

2.副本協(xié)調(diào):HDFS通過(guò)副本協(xié)調(diào)來(lái)確保數(shù)據(jù)的一致性。當(dāng)一個(gè)數(shù)據(jù)塊的某個(gè)副本出現(xiàn)故障時(shí),HDFS會(huì)自動(dòng)將該副本的數(shù)據(jù)塊恢復(fù)到其他可用的副本上,以保證數(shù)據(jù)的一致性。

3.心跳機(jī)制:HDFS使用心跳機(jī)制來(lái)檢測(cè)數(shù)據(jù)節(jié)點(diǎn)和名稱(chēng)節(jié)點(diǎn)之間的連接狀態(tài),并在節(jié)點(diǎn)失效時(shí)進(jìn)行故障處理。這可以保證數(shù)據(jù)的一致性,并防止客戶(hù)端訪(fǎng)問(wèn)已經(jīng)失效的塊。

4.名稱(chēng)節(jié)點(diǎn)的元數(shù)據(jù):HDFS使用名稱(chēng)節(jié)點(diǎn)來(lái)管理文件系統(tǒng)中的元數(shù)據(jù),包括文件和目錄的創(chuàng)建、修改、刪除等操作。名稱(chēng)節(jié)點(diǎn)在維護(hù)元數(shù)據(jù)時(shí),采用復(fù)制的方式保證數(shù)據(jù)的一致性,即將元數(shù)據(jù)復(fù)制到多個(gè)節(jié)點(diǎn)上,從而在名稱(chēng)節(jié)點(diǎn)出現(xiàn)故障時(shí),可以通過(guò)備份節(jié)點(diǎn)來(lái)保證數(shù)據(jù)的一致性。

問(wèn)題5:談?wù)凥DFS中數(shù)據(jù)讀寫(xiě)的流程

在 HDFS 中,當(dāng)客戶(hù)端需要讀取數(shù)據(jù)時(shí),會(huì)按照以下流程進(jìn)行:

1.客戶(hù)端向名稱(chēng)節(jié)點(diǎn)發(fā)送文件讀請(qǐng)求,名稱(chēng)節(jié)點(diǎn)返回該文件塊所在的數(shù)據(jù)節(jié)點(diǎn)列表。

2.客戶(hù)端選擇其中一個(gè)數(shù)據(jù)節(jié)點(diǎn)(就近原則,然后隨機(jī))作為源節(jié)點(diǎn),向該節(jié)點(diǎn)發(fā)送讀取請(qǐng)求。

3.數(shù)據(jù)節(jié)點(diǎn)收到讀取請(qǐng)求后,首先檢查是否具有該塊的本地副本,如果有,直接從本地副本讀取數(shù)據(jù)并返回給客戶(hù)端;如果沒(méi)有,則向其他具有該塊副本的數(shù)據(jù)節(jié)點(diǎn)發(fā)出數(shù)據(jù)傳輸請(qǐng)求。

4.數(shù)據(jù)節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)將數(shù)據(jù)塊傳輸給客戶(hù)端,并返回?cái)?shù)據(jù)傳輸結(jié)果。? ? ? ? ? ? ? ? ? ? ?

5.客戶(hù)端收到數(shù)據(jù)塊后,再進(jìn)行后續(xù)的數(shù)據(jù)處理和計(jì)算。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

需要注意的是,在 HDFS 中,數(shù)據(jù)塊的副本存儲(chǔ)在不同的數(shù)據(jù)節(jié)點(diǎn)上,因此客戶(hù)端在任何時(shí)候都可以從數(shù)據(jù)塊的任何一個(gè)副本進(jìn)行讀取。同時(shí),HDFS 的多副本機(jī)制也能夠保證數(shù)據(jù)的可靠性和高效性。

在 HDFS 中,當(dāng)客戶(hù)端需要寫(xiě)數(shù)據(jù)時(shí),會(huì)按照以下流程進(jìn)行:

1.客戶(hù)端通過(guò) Distributed FileSystem 模塊向 NameNode 請(qǐng)求上傳文件,NameNode 檢查目標(biāo)文件是否已存在,如果不存在則檢查父目錄是否存在。如果目標(biāo)文件或父目錄不存在,則返回文件無(wú)法上傳的信息。

2.如果目標(biāo)文件和父目錄都存在,則 NameNode 返回可以上傳文件的信息,并分配一個(gè)唯一的文件 ID 號(hào),該 ID 號(hào)用于標(biāo)識(shí)文件和文件塊的位置信息。

3.客戶(hù)端請(qǐng)求將第一個(gè)數(shù)據(jù)塊(Block)上傳到哪幾個(gè) DataNode 服務(wù)器上??蛻?hù)端向 NameNode 發(fā)送 Block 創(chuàng)建請(qǐng)求,請(qǐng)求創(chuàng)建一個(gè)新的數(shù)據(jù)塊,該請(qǐng)求包含文件 ID 號(hào)和數(shù)據(jù)塊大小等信息。

4.NameNode 在存儲(chǔ)空間中為該數(shù)據(jù)塊分配多個(gè) DataNode 節(jié)點(diǎn),通常為三個(gè),分別為 dn1、dn2、dn3。NameNode 返回這些 DataNode 的位置信息列表給客戶(hù)端。

5.客戶(hù)端使用 FSDataOutputStream 模塊向 dn1 發(fā)送寫(xiě)請(qǐng)求,dn1 收到請(qǐng)求會(huì)繼續(xù)調(diào)用 dn2,然后 dn2 又調(diào)用 dn3,將這個(gè)通信管道建立完成。

6.dn1、dn2、dn3逐級(jí)對(duì)客戶(hù)端應(yīng)答,表示已準(zhǔn)備好接收數(shù)據(jù)包。? ? ? ? ? ? ? ? ? ? ?

7.客戶(hù)端開(kāi)始從磁盤(pán)讀取數(shù)據(jù),將數(shù)據(jù)分成若干個(gè)數(shù)據(jù)包,每個(gè)數(shù)據(jù)包的大小通常是 64KB??蛻?hù)端向 dn1 發(fā)送 第一個(gè)數(shù)據(jù)包,dn1 收到后依次傳給 dn2,dn2 再依次傳給 dn3。dn1 在傳輸過(guò)程中,將每個(gè)數(shù)據(jù)包的信息放入一個(gè)應(yīng)答隊(duì)列等待應(yīng)答。

8.當(dāng)一個(gè)數(shù)據(jù)塊的所有數(shù)據(jù)包都傳輸完成之后,客戶(hù)端再次請(qǐng)求 NameNode 返回下一個(gè)數(shù)據(jù)塊要上傳的 DataNode 節(jié)點(diǎn)列表,并重復(fù)上述步驟進(jìn)行下一個(gè)數(shù)據(jù)塊的上傳。

需要注意的是,在 HDFS 中,數(shù)據(jù)塊默認(rèn)大小為 128MB,HDFS 采用了多副本機(jī)制保證數(shù)據(jù)可靠性,因此同一個(gè)數(shù)據(jù)塊在多個(gè) DataNode 節(jié)點(diǎn)上會(huì)有多個(gè)副本。數(shù)據(jù)的傳輸過(guò)程中,HDFS 還使用了確認(rèn)機(jī)制和心跳機(jī)制,保證數(shù)據(jù)的一致性和穩(wěn)定性。

問(wèn)題6:介紹下HDFS的心跳機(jī)制

HDFS 是基于多副本機(jī)制實(shí)現(xiàn)的分布式文件系統(tǒng),其容錯(cuò)機(jī)制的實(shí)現(xiàn)主要包括以下幾個(gè)方面:

1.多副本機(jī)制:HDFS 中的每個(gè)數(shù)據(jù)塊都會(huì)被劃分為多個(gè)副本,并分散存儲(chǔ)在不同的 DataNode 節(jié)點(diǎn)上。這樣即使某個(gè) DataNode 節(jié)點(diǎn)發(fā)生故障,其他節(jié)點(diǎn)上的副本仍然可以保證數(shù)據(jù)的可用性和完整性。同時(shí),HDFS 還支持副本的自動(dòng)恢復(fù),當(dāng)一個(gè)副本損壞或不可用時(shí),HDFS 會(huì)自動(dòng)從其他節(jié)點(diǎn)上的副本中選擇一個(gè)進(jìn)行替換。

2.快速檢測(cè)和恢復(fù),HDFS 容錯(cuò)機(jī)制中還包括了快速檢測(cè)和恢復(fù)的機(jī)制,主要體現(xiàn)在以下兩個(gè)方面:

**快速檢測(cè)** :HDFS 使用心跳機(jī)制,DataNode 節(jié)點(diǎn)會(huì)周期性地向 NameNode 發(fā)送心跳信息,以保證自身正常運(yùn)行。如果某個(gè) DataNode 節(jié)點(diǎn)長(zhǎng)時(shí)間沒(méi)有向 NameNode 發(fā)送心跳信息,NameNode 就會(huì)認(rèn)為該節(jié)點(diǎn)已經(jīng)故障,并將該節(jié)點(diǎn)上的所有副本標(biāo)記為不可用。

**快速恢復(fù)**:當(dāng) HDFS 發(fā)現(xiàn)某個(gè)節(jié)點(diǎn)上的數(shù)據(jù)塊不可用時(shí),會(huì)嘗試從其他副本所在的節(jié)點(diǎn)中找到可用的副本并進(jìn)行替換。同時(shí),HDFS 還可以通過(guò)重復(fù)存儲(chǔ)數(shù)據(jù)塊來(lái)提高數(shù)據(jù)的容錯(cuò)性。即將同一個(gè)數(shù)據(jù)塊存儲(chǔ)在多個(gè)節(jié)點(diǎn)上,并且這些節(jié)點(diǎn)之間的距離盡可能遠(yuǎn),以減小節(jié)點(diǎn)損壞的概率。

3.數(shù)據(jù)校驗(yàn):HDFS 還使用數(shù)據(jù)校驗(yàn)機(jī)制來(lái)檢測(cè)數(shù)據(jù)的完整性和正確性。在數(shù)據(jù)塊寫(xiě)入時(shí),會(huì)為該數(shù)據(jù)塊計(jì)算一份校驗(yàn)和,并將其存儲(chǔ)在 HDFS 中。當(dāng)讀取數(shù)據(jù)塊時(shí),HDFS 會(huì)重新計(jì)算校驗(yàn)和并與之前存儲(chǔ)的校驗(yàn)和進(jìn)行比對(duì),以確保讀取到的數(shù)據(jù)塊的完整性和正確性。

綜上所述,HDFS 的容錯(cuò)機(jī)制主要是基于多副本機(jī)制、快速檢測(cè)和恢復(fù)機(jī)制以及數(shù)據(jù)校驗(yàn)機(jī)制實(shí)現(xiàn)的。通過(guò)這些機(jī)制,HDFS 可以有效地保證數(shù)據(jù)的可靠性和高可用性,為用戶(hù)提供高質(zhì)量的服務(wù)。

問(wèn)題7:HDFS中大量小文件問(wèn)題如何解決?有什么思路?

首先在 HDFS 中,存儲(chǔ)大量小文件會(huì)導(dǎo)致以下問(wèn)題:

1.Namenode 內(nèi)存消耗:每個(gè)小文件都會(huì)占用 Namenode 的內(nèi)存,包括文件名、權(quán)限、塊信息等元數(shù)據(jù),導(dǎo)致 Namenode 內(nèi)存占用過(guò)高,影響系統(tǒng)的性能。

2.副本數(shù)量過(guò)多:每個(gè)小文件都需要占用一個(gè)或多個(gè)數(shù)據(jù)塊,如果副本數(shù)設(shè)置過(guò)高,將導(dǎo)致 HDFS 集群存儲(chǔ)資源的浪費(fèi)。

3.數(shù)據(jù)塊數(shù)量過(guò)多:每個(gè)小文件都會(huì)占用一個(gè)或多個(gè)數(shù)據(jù)塊,導(dǎo)致數(shù)據(jù)塊數(shù)量過(guò)多,從而影響 HDFS 的性能。

為了解決大量小文件問(wèn)題,可以采用以下幾種方式:

(1)合并小文件?

將多個(gè)小文件合并成一個(gè)大文件,可以有效減少 Namenode 內(nèi)存消耗、副本數(shù)量和數(shù)據(jù)塊數(shù)量等問(wèn)題。可以通過(guò) MapReduce 程序?qū)崿F(xiàn)文件合并。

(2)使用 SequenceFile?

SequenceFile 是一種用于存儲(chǔ)二進(jìn)制鍵值對(duì)數(shù)據(jù)的文件格式,可以將多個(gè)小文件打包成一個(gè) SequenceFile 文件,從而減少小文件數(shù)量,同時(shí)提高讀寫(xiě)效率。其中,使用文件名作為 key,文件內(nèi)容作為 value,可以在 map/reduce 過(guò)程中的input/output 的 format 使用。

(3)將小文件打包存儲(chǔ)?

可以將多個(gè)小文件打包成一個(gè)大文件,然后將打包后的文件上傳到 HDFS 中。這種方式可以減少 Namenode 內(nèi)存消耗、副本數(shù)量和數(shù)據(jù)塊數(shù)量等問(wèn)題,但是可能會(huì)影響文件的讀寫(xiě)效率。

(4)使用Har文件

Har(Hadoop Archives)是Hadoop提供的一種歸檔格式,它可以將多個(gè)小文件歸檔成一個(gè)Har文件。Har文件可以作為一個(gè)獨(dú)立的文件使用,并且可以像普通文件一樣進(jìn)行讀寫(xiě)操作。使用Har文件可以減少存儲(chǔ)空間、加快文件讀取速度。

問(wèn)題8:HDFS如何實(shí)現(xiàn)高可用?

HDFS 的高可用性是通過(guò) NameNode 的高可用性實(shí)現(xiàn)的,以下是 HDFS 實(shí)現(xiàn)高可用的主要方式:

(1)Secondary NameNode?

在 Hadoop 1.x 版本中,使用 Secondary NameNode 來(lái)實(shí)現(xiàn) NameNode 的高可用性。Secondary NameNode 會(huì)定期從 NameNode 拉取元數(shù)據(jù),并將元數(shù)據(jù)合并成一個(gè)新的文件,然后將文件發(fā)送給 NameNode,用于替換舊的元數(shù)據(jù)文件。但是 Secondary NameNode 無(wú)法實(shí)時(shí)監(jiān)控 NameNode 狀態(tài),一旦 NameNode 發(fā)生故障,需要手動(dòng)切換 Secondary NameNode 到活動(dòng)狀態(tài)。

(2)Quorum Journal Manager (QJM)?

在 Hadoop 2.x 版本中,引入了 Quorum Journal Manager (QJM) 作為 NameNode 的高可用性解決方案。QJM 通過(guò)在多個(gè)節(jié)點(diǎn)上存儲(chǔ) Journal,實(shí)現(xiàn)了多節(jié)點(diǎn)之間的數(shù)據(jù)同步和數(shù)據(jù)容錯(cuò)。在 QJM 中,一個(gè)集群中的每個(gè) Journal Node 負(fù)責(zé)接收 NameNode 發(fā)送的元數(shù)據(jù)變更日志,并將日志寫(xiě)入本地磁盤(pán)和共享存儲(chǔ)(例如 ZooKeeper)。當(dāng) NameNode 啟動(dòng)或發(fā)生故障時(shí),它將從 QJM 中讀取最新的元數(shù)據(jù)日志,從而實(shí)現(xiàn)快速恢復(fù)和故障轉(zhuǎn)移。

(3)Standby NameNode?

在 QJM 的基礎(chǔ)上,Hadoop 2.x 版本中引入了 Standby NameNode,使得 NameNode 的故障轉(zhuǎn)移變得更加自動(dòng)化。Standby NameNode 會(huì)與 Active NameNode 保持同步,并定期從 QJM 中獲取元數(shù)據(jù)變更日志。當(dāng) Active NameNode 發(fā)生故障時(shí),Standby NameNode 可以快速接管 Active NameNode 的職責(zé),從而實(shí)現(xiàn)故障轉(zhuǎn)移。

(4)NameNode Federation?

在 Hadoop 2.x 版本中,引入了 NameNode Federation,將一個(gè) Hadoop 集群分成多個(gè)命名空間,每個(gè)命名空間擁有獨(dú)立的 NameNode。這樣可以使得每個(gè)命名空間的數(shù)據(jù)和元數(shù)據(jù)相互隔離,從而提高系統(tǒng)的可用性和安全性。

問(wèn)題9:HDFS中的JournalNode有什么作用?

JournalNode是 Hadoop 分布式文件系統(tǒng) (HDFS) 中的一個(gè)組件,用于存儲(chǔ) NameNode 發(fā)送的元數(shù)據(jù)變更日志,并將其復(fù)制到其他 JournalNode 以實(shí)現(xiàn)數(shù)據(jù)冗余和容錯(cuò)。JournalNode 與 NameNode 共同構(gòu)成了 HDFS 中實(shí)現(xiàn)高可用性的機(jī)制,能夠確保在某個(gè)節(jié)點(diǎn)出現(xiàn)故障時(shí),HDFS 集群仍然可以正常運(yùn)行。

在 HDFS 中,為了實(shí)現(xiàn)高可用性,通常會(huì)配置一個(gè)集群,其中有一個(gè) NameNode 在任何時(shí)刻都處于活動(dòng)狀態(tài),另一個(gè) NameNode 則處于備份狀態(tài)。這兩個(gè) NameNode 之間會(huì)周期性地進(jìn)行數(shù)據(jù)同步,以確保備份 NameNode 在活動(dòng) NameNode 發(fā)生故障時(shí)可以快速接管其職責(zé),從而實(shí)現(xiàn)故障轉(zhuǎn)移。

為了實(shí)現(xiàn)這種數(shù)據(jù)同步,HDFS 引入了 JournalNode 組件。在 HDFS 集群中,可以配置多個(gè) JournalNode,它們分別存儲(chǔ) NameNode 發(fā)送的元數(shù)據(jù)變更日志,并將這些日志復(fù)制到其他 JournalNode。在這種配置下,當(dāng)一個(gè) NameNode 發(fā)生故障時(shí),備份 NameNode 可以從 JournalNode 中獲取最新的元數(shù)據(jù)變更日志,并恢復(fù)其狀態(tài),從而實(shí)現(xiàn)快速故障轉(zhuǎn)移。

三、MapReduce部分
問(wèn)題1:介紹下MapReduce,它的優(yōu)缺點(diǎn)是什么?

MapReduce是一種分布式計(jì)算模型,主要用于大規(guī)模數(shù)據(jù)的處理和分析。MapReduce模型的工作流程主要包括兩個(gè)階段:Map階段和Reduce階段。

在Map階段中,輸入數(shù)據(jù)被分割成多個(gè)小數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊由一個(gè)Mapper節(jié)點(diǎn)進(jìn)行處理。在Reduce階段中,Map階段的輸出結(jié)果會(huì)被多個(gè)Reducer節(jié)點(diǎn)合并和匯總,最終得到最終的結(jié)果。

MapReduce的優(yōu)點(diǎn)

MapReduce的缺點(diǎn)

問(wèn)題2:介紹下MapReduce的工作流程

MapReduce的工作流程包括以下步驟:

1.輸入分片(Input Split):輸入數(shù)據(jù)集被分割成多個(gè)大小合適的塊,稱(chēng)為輸入分片。每個(gè)輸入分片都將由一個(gè)Map任務(wù)進(jìn)行處理。

2.映射(Map):每個(gè)Map任務(wù)將輸入分片中的數(shù)據(jù)進(jìn)行處理。開(kāi)發(fā)人員需要編寫(xiě)一個(gè)Map函數(shù),該函數(shù)將輸入數(shù)據(jù)轉(zhuǎn)換為一系列的鍵值對(duì)(Key-Value pairs)。映射階段的輸出是中間鍵值對(duì)。

3.中間鍵值對(duì)分組(Shuffle):中間鍵值對(duì)根據(jù)鍵進(jìn)行分組,以便將具有相同鍵的鍵值對(duì)發(fā)送到相同的Reduce任務(wù)進(jìn)行處理。這個(gè)過(guò)程涉及數(shù)據(jù)的排序和網(wǎng)絡(luò)傳輸。

4.歸約(Reduce):每個(gè)Reduce任務(wù)處理來(lái)自映射階段的中間鍵值對(duì)。開(kāi)發(fā)人員需要編寫(xiě)一個(gè)Reduce函數(shù),該函數(shù)對(duì)具有相同鍵的鍵值對(duì)進(jìn)行歸約操作,并生成最終的輸出結(jié)果。

5.輸出(Output):最終的結(jié)果被寫(xiě)入輸出文件或持久化存儲(chǔ),以供后續(xù)使用或分析。

整個(gè)MapReduce過(guò)程由一個(gè)主節(jié)點(diǎn)(JobTracker)進(jìn)行協(xié)調(diào)和控制,它負(fù)責(zé)任務(wù)的分配、監(jiān)視和故障恢復(fù)。計(jì)算節(jié)點(diǎn)(TaskTracker)負(fù)責(zé)執(zhí)行Map和Reduce任務(wù),并將中間結(jié)果傳輸給Reduce任務(wù)所在的節(jié)點(diǎn)。

問(wèn)題3:什么是Combiner?它有什么作用?

Combiner是MapReduce框架中的一個(gè)可選組件,也稱(chēng)為局部Reducer。它在Map階段和Reduce階段之間插入了一個(gè)額外的處理步驟。Combiner本質(zhì)上就是一個(gè)小規(guī)模的Reducer,其作用是對(duì)Map階段的輸出結(jié)果進(jìn)行局部聚合,以減少M(fèi)ap端數(shù)據(jù)傳輸量和優(yōu)化網(wǎng)絡(luò)帶寬使用。

在Map任務(wù)計(jì)算完成后,Combiner會(huì)對(duì)Mapper節(jié)點(diǎn)產(chǎn)生的中間結(jié)果進(jìn)行合并,并生成新的中間結(jié)果。這里需要注意的是,Combiner的邏輯和Reducer的邏輯是相同的,只是Combiner只運(yùn)行在Map節(jié)點(diǎn)上,而不是在Reduce節(jié)點(diǎn)上。

Combiner可以起到如下作用

1.減少數(shù)據(jù)傳輸:通過(guò)對(duì)Map階段的輸出結(jié)果進(jìn)行局部聚合,可以減少數(shù)據(jù)傳輸量和優(yōu)化網(wǎng)絡(luò)帶寬使用,從而加快整個(gè)計(jì)算任務(wù)的速度。

2.優(yōu)化性能:Combiner可以減少中間結(jié)果的數(shù)量,從而降低整個(gè)計(jì)算任務(wù)的負(fù)載,提高系統(tǒng)整體的性能。

注意:使用Combiner不能影響最終的業(yè)務(wù)邏輯,而且Combiner的輸出k-v必須要跟reducer的輸入k-v類(lèi)型要對(duì)應(yīng)。

問(wèn)題4:Reduce如何獲取Map結(jié)果集

在MapReduce中,每個(gè)節(jié)點(diǎn)都會(huì)啟動(dòng)一個(gè)常駐的HTTP 服務(wù)器。其中,HTTP服務(wù)器提供了一項(xiàng)服務(wù),即響應(yīng)Reduce任務(wù)對(duì)Map數(shù)據(jù)的請(qǐng)求。Reduce任務(wù)通過(guò)HTTP協(xié)議向各個(gè)Map任務(wù)發(fā)送請(qǐng)求,以獲取所需的數(shù)據(jù)。

當(dāng)Reduce任務(wù)發(fā)起HTTP請(qǐng)求來(lái)獲取Map輸出數(shù)據(jù)時(shí),對(duì)應(yīng)的節(jié)點(diǎn)的HTTP服務(wù)器會(huì)讀取相應(yīng)的Map輸出文件,提取出Reduce任務(wù)所需的數(shù)據(jù),并通過(guò)網(wǎng)絡(luò)流將這些數(shù)據(jù)傳輸給Reduce任務(wù)

問(wèn)題5:介紹下HDFS的心跳機(jī)制

Shuffle是MapReduce中的一個(gè)重要過(guò)程,它涉及到Map端和Reduce端的數(shù)據(jù)處理和傳遞。以下是對(duì)Shuffle過(guò)程的簡(jiǎn)化概述:

Map端的Shuffle過(guò)程包括以下步驟

Reduce端的Shuffle過(guò)程包括以下步驟

總結(jié):Shuffle是MapReduce中數(shù)據(jù)處理和傳遞的過(guò)程,涉及Map端的數(shù)據(jù)收集、排序、溢寫(xiě)和合并排序,以及Reduce端的數(shù)據(jù)拷貝和合并排序。

優(yōu)化方法:

  • 壓縮傳輸數(shù)據(jù):在網(wǎng)絡(luò)傳輸過(guò)程中,使用壓縮算法對(duì)數(shù)據(jù)進(jìn)行壓縮,減少網(wǎng)絡(luò)帶寬的占用和傳輸時(shí)間,提高傳輸效率。

  • 減少不必要的排序:并不是所有類(lèi)型的Reduce需要的數(shù)據(jù)都是需要排序的。

問(wèn)題6:MapReduce中的排序有哪幾種?

在Map任務(wù)和Reduce任務(wù)的過(guò)程中,會(huì)發(fā)生三次排序操作,具體過(guò)程如下:

1.當(dāng)Map函數(shù)生成輸出時(shí),首先將數(shù)據(jù)寫(xiě)入內(nèi)存的環(huán)形緩沖區(qū)。當(dāng)緩沖區(qū)達(dá)到設(shè)定閾值后,在將數(shù)據(jù)刷寫(xiě)到磁盤(pán)之前,后臺(tái)線(xiàn)程會(huì)對(duì)緩沖區(qū)的數(shù)據(jù)進(jìn)行分區(qū),并在每個(gè)分區(qū)內(nèi)進(jìn)行內(nèi)部排序。

2.在Map任務(wù)完成之前,磁盤(pán)上存在多個(gè)已經(jīng)分區(qū)并排序的溢寫(xiě)文件,這些文件的大小與緩沖區(qū)相同。此時(shí),這些溢寫(xiě)文件將被合并成一個(gè)已分區(qū)且排序的輸出文件。由于溢寫(xiě)文件已經(jīng)經(jīng)過(guò)第一次排序,因此合并操作只需要進(jìn)行一次歸并排序即可使輸出文件整體有序。

3.在Reduce階段,需要將多個(gè)Map任務(wù)的輸出文件復(fù)制到Reduce任務(wù)中進(jìn)行合并。由于經(jīng)過(guò)第二次排序,因此合并操作只需再進(jìn)行一次歸并排序即可使輸出文件整體有序。

在這三次排序中第一次是內(nèi)存緩沖區(qū)做的內(nèi)排序,使用的算法是快速排序,第二次排序和第三次排序都是在文件合并階段發(fā)生的,使用的是歸并排序

問(wèn)題7:MapReduce中的分區(qū)是如何實(shí)現(xiàn)的?

在MapReduce中,分區(qū)是通過(guò)Partitioner(分區(qū)器)來(lái)實(shí)現(xiàn)的。Partitioner是一個(gè)函數(shù),它將每個(gè)鍵值對(duì)映射到一個(gè)特定的分區(qū)。這樣可以確保具有相同鍵的鍵值對(duì)被發(fā)送到同一個(gè)Reducer(歸約器)進(jìn)行處理。分區(qū)器的目標(biāo)是使得不同鍵的分布盡可能均勻地分散到各個(gè)分區(qū)中,以便實(shí)現(xiàn)并行處理和負(fù)載均衡。

分區(qū)器的默認(rèn)實(shí)現(xiàn)是基于鍵的哈希函數(shù)。它將鍵哈?;?,并使用哈希值對(duì)分區(qū)的數(shù)量取模,從而確定鍵值對(duì)所屬的分區(qū)。這樣,所有具有相同哈希值的鍵值對(duì)都會(huì)被分配到同一個(gè)分區(qū)。

問(wèn)題8:MapReduce中什么時(shí)候會(huì)出現(xiàn)數(shù)據(jù)傾斜?你有什么處理思路?

在MapReduce中,數(shù)據(jù)傾斜是指在Reduce階段中某些ReduceTask處理的數(shù)據(jù)比其他ReduceTask多很多,導(dǎo)致這些ReduceTask處理速度變慢,甚至超時(shí)或失敗,從而影響整個(gè)作業(yè)的性能。常見(jiàn)的數(shù)據(jù)傾斜問(wèn)題包括:

  • Key分布不均:在Map階段中,某些Key出現(xiàn)的次數(shù)很多,而其他Key出現(xiàn)的次數(shù)很少,導(dǎo)致ReduceTask中某些Task要處理的Key比其他Task多很多,處理負(fù)載不均衡。

  • 數(shù)據(jù)量不均:在Map階段中,某些Mapper處理的數(shù)據(jù)量比其他Mapper大很多,導(dǎo)致ReduceTask中某些Task要處理的數(shù)據(jù)比其他Task多很多,處理負(fù)載不均衡。

為解決MapReduce中的數(shù)據(jù)傾斜問(wèn)題,可以采用以下處理方式:

1.手動(dòng)增加Reduce Task的數(shù)量:當(dāng)Reduce階段中出現(xiàn)傾斜時(shí),可以通過(guò)手動(dòng)增加ReduceTask的數(shù)量來(lái)解決這個(gè)問(wèn)題。增加ReduceTask的數(shù)量后,每個(gè)Task要處理的數(shù)據(jù)量就會(huì)減少,從而避免了數(shù)據(jù)傾斜問(wèn)題。

2.針對(duì)傾斜的Key單獨(dú)處理:在Map階段中,可以對(duì)出現(xiàn)頻率較高的Key單獨(dú)進(jìn)行處理,將這些Key分散到不同的ReduceTask中,從而避免了數(shù)據(jù)傾斜問(wèn)題。

3.使用Combiner:Combiner在Map階段的輸出結(jié)果進(jìn)行小規(guī)模的匯總操作,將相同Key的值進(jìn)行合并后再傳遞給Reduce,這樣可以降低Reduce端需要處理的數(shù)據(jù)量,從而避免數(shù)據(jù)傾斜問(wèn)題。

4.自定義Partitioner:自定義Partition函數(shù),將相同Key的數(shù)據(jù)分配到不同的Partitions中,避免某些Partitions中的數(shù)據(jù)過(guò)于龐大,導(dǎo)致ReduceTask的負(fù)載不均衡。

問(wèn)題9:MapReduce中為什么要進(jìn)行數(shù)據(jù)壓縮?有哪些常見(jiàn)的壓縮方式?

在MapReduce中進(jìn)行數(shù)據(jù)壓縮的主要目的是減少磁盤(pán)IO和網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量,提高作業(yè)的性能和效率。通過(guò)對(duì)MapReduce中的中間數(shù)據(jù)和輸出數(shù)據(jù)進(jìn)行壓縮,可以減少磁盤(pán)空間占用、減少網(wǎng)絡(luò)帶寬的利用率、減少網(wǎng)絡(luò)傳輸時(shí)間以及減少存儲(chǔ)和備份的成本等。

常見(jiàn)的MapReduce數(shù)據(jù)壓縮方式包括:

1.Gzip壓縮:Gzip是一種無(wú)損壓縮方式,處理速度較快并且良好的可移植性,常用于壓縮文本數(shù)據(jù)。Gzip格式的壓縮比較高,但需要消耗更多的CPU資源。題。

2.Bzip2壓縮:Bzip2是一種高壓縮比的無(wú)損壓縮方式,通常處理速度比Gzip慢,但壓縮比例更高,適合處理大型文本數(shù)據(jù)。

3.Snappy壓縮:Snappy是Google開(kāi)發(fā)的一種快速無(wú)損壓縮算法,壓縮和解壓速度都非常快,通常用于壓縮二進(jìn)制數(shù)據(jù),如序列化后的對(duì)象等數(shù)據(jù)。

4.LZO壓縮:LZO是一種快速的無(wú)損壓縮方式,通常處理速度比Snappy略慢,但壓縮比高于Snappy,適合處理大文件和分布式文件系統(tǒng)中的數(shù)據(jù)。

問(wèn)題10:介紹一些常見(jiàn)的MapReduce優(yōu)化操作

對(duì)MapReduce作業(yè)進(jìn)行優(yōu)化可以提高作業(yè)的性能和效率,減少資源消耗。常見(jiàn)的MapReduce優(yōu)化操作包括以下幾個(gè)方面:

1.數(shù)據(jù)壓縮:在MapReduce作業(yè)中使用數(shù)據(jù)壓縮可以減少磁盤(pán)空間占用和磁盤(pán)IO開(kāi)銷(xiāo),提高數(shù)據(jù)傳輸效率。

2.合理設(shè)置數(shù)據(jù)切片大?。焊鶕?jù)數(shù)據(jù)的特點(diǎn)和計(jì)算資源的可用性,合理設(shè)置數(shù)據(jù)切片的大小。較小的切片可以增加并行度,但會(huì)增加任務(wù)調(diào)度和開(kāi)銷(xiāo);較大的切片可以減少任務(wù)調(diào)度和開(kāi)銷(xiāo),但可能無(wú)法充分利用計(jì)算資源。需要進(jìn)行實(shí)驗(yàn)和調(diào)優(yōu)來(lái)確定最佳的切片大小。

3.Combiner函數(shù)的使用:Combiner函數(shù)在Map階段對(duì)Map輸出進(jìn)行本地預(yù)聚合,可以減少傳輸?shù)絉educer的數(shù)據(jù)量,降低網(wǎng)絡(luò)傳輸和磁盤(pán)IO開(kāi)銷(xiāo)。適當(dāng)選擇合適的Combiner函數(shù)可以顯著提高作業(yè)的性能。

4.增加ReduceTask數(shù)量:通過(guò)增加ReduceTask的數(shù)量,可以提高并行度,加快作業(yè)的執(zhí)行速度。但需要注意,過(guò)多的ReduceTask可能會(huì)增加任務(wù)調(diào)度和數(shù)據(jù)通信的開(kāi)銷(xiāo),需要進(jìn)行權(quán)衡。

5.資源管理和調(diào)優(yōu):合理配置和管理計(jì)算資源(如內(nèi)存、CPU等)對(duì)MapReduce作業(yè)的性能至關(guān)重要。根據(jù)作業(yè)的需求和資源的可用性,進(jìn)行適當(dāng)?shù)恼{(diào)優(yōu),包括調(diào)整內(nèi)存分配、調(diào)整JVM參數(shù)等。

問(wèn)題11:MapReduce如何處理過(guò)多小文件?如何處理大文件?

處理過(guò)多小文件的方法

  • 合并小文件:將多個(gè)小文件合并成較大的文件可以減少任務(wù)調(diào)度和開(kāi)銷(xiāo),并提高作業(yè)的執(zhí)行效率??梢允褂肏adoop提供的CombineFileInputFormat等來(lái)完成該任務(wù)。或自定義代碼來(lái)進(jìn)行文件合并操作。

  • 使用SequenceFile:將小文件存儲(chǔ)為SequenceFile格式,可以將多個(gè)小文件打包為一個(gè)大文件,以減少文件數(shù)量。SequenceFile是一種二進(jìn)制文件格式,可以有效地存儲(chǔ)和處理大量的小文件。

處理大文件的方法

  • 適當(dāng)調(diào)整數(shù)據(jù)切片大小:對(duì)于大文件,較大的數(shù)據(jù)切片可以提高任務(wù)的并行度,充分利用計(jì)算資源。可以通過(guò)適當(dāng)增加mapreduce.input.fileinputformat.split.maxsize參數(shù)的值來(lái)調(diào)整數(shù)據(jù)切片的大小。

  • 考慮使用壓縮:對(duì)于大文件,可以考慮使用數(shù)據(jù)壓縮來(lái)減少磁盤(pán)空間占用和數(shù)據(jù)傳輸?shù)膸挕_m合的壓縮算法和壓縮參數(shù)選擇可以根據(jù)數(shù)據(jù)的特點(diǎn)和需求來(lái)確定。

問(wèn)題12:MapReduce和Spark有什么區(qū)別?

MapReduce和Spark都是用于大規(guī)模數(shù)據(jù)處理的分布式計(jì)算框架,二者有以下幾個(gè)方面的區(qū)別:

1.內(nèi)存使用:MapReduce中數(shù)據(jù)的處理主要依賴(lài)于磁盤(pán)IO,而Spark則利用內(nèi)存更多的存儲(chǔ)和計(jì)算數(shù)據(jù)。因此,在處理需要頻繁訪(fǎng)問(wèn)內(nèi)存的任務(wù)時(shí),Spark擁有更高的性能。

2.數(shù)據(jù)處理方式:MapReduce將數(shù)據(jù)處理分為Map和Reduce兩個(gè)階段,并且在Map和Reduce之間必須完成一次全局排序。而Spark的數(shù)據(jù)處理被組織成一系列的DAG(有向無(wú)環(huán)圖),在這樣的結(jié)構(gòu)下,每個(gè)節(jié)點(diǎn)代表的操作是在內(nèi)存中執(zhí)行的。

3.數(shù)據(jù)持久化:MapReduce與Hadoop分布式文件系統(tǒng)HDFS集成,所有數(shù)據(jù)都存儲(chǔ)在HDFS上,不易受到損壞。而Spark的機(jī)制允許將數(shù)據(jù)緩存在內(nèi)存中以供重用,但這也增加了數(shù)據(jù)丟失或損壞的風(fēng)險(xiǎn)。

4.接口:MapReduce通常使用Java編寫(xiě),而Spark支持多種語(yǔ)言接口包括Java、Scala和Python等。Spark提供SQL、流處理、機(jī)器學(xué)習(xí)和圖形處理等高級(jí)API,使得應(yīng)用程序開(kāi)發(fā)變得更加簡(jiǎn)單。

5.實(shí)時(shí)計(jì)算:Spark在實(shí)時(shí)計(jì)算方面優(yōu)于MapReduce。Spark的DStream API可以分析流數(shù)據(jù),實(shí)現(xiàn)流處理。而MapReduce需要結(jié)束任務(wù)才能開(kāi)始計(jì)算下一個(gè)作業(yè)。

四、Yarn部分
問(wèn)題1:介紹下Yarn框架及其作用

YARN是Apache Hadoop的核心組件之一,用于集群資源的管理和任務(wù)調(diào)度。YARN的出現(xiàn)主要是為了解決早期Hadoop版本中JobTracker的性能瓶頸和可伸縮性問(wèn)題。

YARN的框架由兩個(gè)核心組件組成:資源管理器(ResourceManager)和應(yīng)用程序管理器(ApplicationMaster),它們共同工作以實(shí)現(xiàn)高效的資源管理和任務(wù)調(diào)度。

1.ResourceManager(資源管理器):ResourceManager負(fù)責(zé)整個(gè)Hadoop集群的資源分配和管理。它接收來(lái)自各個(gè)節(jié)點(diǎn)的資源申請(qǐng),并決定如何分配這些資源給不同的應(yīng)用程序。ResourceManager還負(fù)責(zé)監(jiān)控集群中的資源使用情況,并在需要時(shí)重新分配資源以提高資源利用率。

2.ApplicationMaster(應(yīng)用程序管理器):每個(gè)運(yùn)行在YARN上的應(yīng)用程序都有一個(gè)對(duì)應(yīng)的ApplicationMaster,負(fù)責(zé)該應(yīng)用程序的任務(wù)調(diào)度和資源管理。當(dāng)一個(gè)應(yīng)用程序需要執(zhí)行任務(wù)時(shí),它會(huì)向ResourceManager申請(qǐng)資源,并啟動(dòng)一個(gè)ApplicationMaster來(lái)協(xié)調(diào)任務(wù)的執(zhí)行。ApplicationMaster負(fù)責(zé)與ResourceManager通信,獲取分配給應(yīng)用程序的資源,并將任務(wù)分配給集群的節(jié)點(diǎn)上的容器進(jìn)行執(zhí)行。

YARN的作用主要有以下幾個(gè)方面:

1.高效的資源調(diào)度:YARN通過(guò)從集群中的節(jié)點(diǎn)池中分配資源,實(shí)現(xiàn)了更加靈活和高效的資源調(diào)度。每個(gè)應(yīng)用程序可以根據(jù)自身的需求申請(qǐng)所需的資源,并在任務(wù)執(zhí)行完成后釋放這些資源,提高整體的資源利用率。

2.多種計(jì)算框架支持:YARN不僅支持Hadoop MapReduce計(jì)算框架,還可以作為底層資源管理框架來(lái)支持其他計(jì)算框架(如Apache Spark、Apache Flink等)。這使得用戶(hù)可以在同- 一集群上運(yùn)行多種計(jì)算工作負(fù)載,提高資源的復(fù)用性和集群的利用率。

3.高可靠性和可擴(kuò)展性:通過(guò)將資源管理和任務(wù)調(diào)度分離,YARN實(shí)現(xiàn)了更好的可擴(kuò)展性和高可靠性。ResourceManager和ApplicationMaster的分離使得系統(tǒng)可以根據(jù)需要增加或減少資源管理器和應(yīng)用程序管理器的數(shù)量,以適應(yīng)不同規(guī)模的集群和任務(wù)需求。

4.支持多租戶(hù)和多應(yīng)用程序:YARN支持在同一個(gè)集群上同時(shí)運(yùn)行多個(gè)應(yīng)用程序,并為每個(gè)應(yīng)用程序提供資源獨(dú)立性和隔離性。這使得用戶(hù)可以共享同一集群的資源,提高集群的利用率,同時(shí)保證各個(gè)應(yīng)用程序之間的資源不互相干擾。

問(wèn)題2:介紹下Yarn的任務(wù)提交流程

Hadoop中Yarn的任務(wù)提交流程如下:

1)向YARN提交應(yīng)用程序,并指定ApplicationMaster程序、啟動(dòng)ApplicationMaster的命令和用戶(hù)程序。

2)ResourceManager為該應(yīng)用程序分配Container,并與對(duì)應(yīng)的NodeManager進(jìn)行通信,要求在該Container中啟動(dòng)應(yīng)用程序的ApplicationMaster。

3)ApplicationMaster向ResourceManager注冊(cè),并將自身拆分為內(nèi)部的子任務(wù)。它為每個(gè)子任務(wù)申請(qǐng)資源,并監(jiān)控它們的運(yùn)行狀態(tài),直到任務(wù)全部完成。

4)ApplicationMaster使用輪詢(xún)方式向ResourceManager申請(qǐng)和領(lǐng)取資源。

5)ResourceManager為ApplicationMaster分配資源,以Container的形式返回。

6)ApplicationMaster與相應(yīng)的NodeManager通信,要求NodeManager啟動(dòng)任務(wù)。

7)NodeManager為任務(wù)設(shè)置合適的運(yùn)行環(huán)境,將任務(wù)啟動(dòng)命令寫(xiě)入腳本,并通過(guò)運(yùn)行該腳本來(lái)啟動(dòng)任務(wù)。

8)各個(gè)任務(wù)定期向ApplicationMaster匯報(bào)自己的狀態(tài)和進(jìn)度,以便在任務(wù)失敗時(shí)重新啟動(dòng)任務(wù)。

9)應(yīng)用程序完成后,ApplicationMaster向ResourceManager注銷(xiāo)并關(guān)閉自身。

問(wèn)題3:Yarn支持哪些調(diào)度(Schedule)?

YARN支持多種調(diào)度器(Scheduler),包括以下三種常見(jiàn)的調(diào)度器:

1.Capacity Scheduler:容量調(diào)度器是YARN的默認(rèn)調(diào)度器,它支持將集群資源劃分為多個(gè)隊(duì)列,并為每個(gè)隊(duì)列分配一定比例的資源容量。根據(jù)隊(duì)列的優(yōu)先級(jí)和資源需求,容量調(diào)度器決定如何分配資源給不同的應(yīng)用程序。如果某個(gè)隊(duì)列沒(méi)有使用其全部容量,剩余的資源可以自動(dòng)分配給其他隊(duì)列。這使得容量調(diào)度器適合多租戶(hù)環(huán)境,可以有效地共享和管理集群資源。

2.Fair Scheduler:公平調(diào)度器根據(jù)應(yīng)用程序的公平性原則來(lái)分配資源。它將集群資源按照時(shí)間片(Fair Share)的方式分配給不同的應(yīng)用程序,確保每個(gè)應(yīng)用程序都有公平的機(jī)會(huì)獲得資源。如果有多個(gè)應(yīng)用程序要求資源,調(diào)度器會(huì)盡量均勻地分配資源,避免某個(gè)應(yīng)用程序長(zhǎng)期占用過(guò)多的資源。公平調(diào)度器還支持配置權(quán)重和優(yōu)先級(jí),以滿(mǎn)足不同應(yīng)用程序的需求。

3.FIFO Scheduler:FIFO Scheduler把應(yīng)用按提交的順序排成一個(gè)隊(duì)列,先進(jìn)先出,在進(jìn)行資源分配的時(shí)候,先給隊(duì)列中最頭上的應(yīng)用進(jìn)行分配資源,待最頭上的應(yīng)用需求滿(mǎn)足后再給下一個(gè)分配,以此類(lèi)推。

但它的缺點(diǎn)是大的應(yīng)用可能會(huì)占用所有集群資源,這就導(dǎo)致其它應(yīng)用被阻塞。在共享集群中,更適合采用Capacity Scheduler或Fair Scheduler,這兩個(gè)調(diào)度器都允許大任務(wù)和小任務(wù)在提交的同時(shí)獲得一定的系統(tǒng)資源。

此外,除了以上三種調(diào)度器,YARN還支持自定義調(diào)度器,允許用戶(hù)根據(jù)特定需求開(kāi)發(fā)和使用自己的調(diào)度算法。用戶(hù)可以基于YARN提供的調(diào)度器接口,實(shí)現(xiàn)自定義的調(diào)度邏輯,并將其配置為YARN的調(diào)度器。這樣可以根據(jù)具體的業(yè)務(wù)場(chǎng)景和應(yīng)用需求,靈活地對(duì)資源進(jìn)行調(diào)度和分配。

問(wèn)題4:介紹下Yarn的容錯(cuò)機(jī)制

YARN是Hadoop生態(tài)系統(tǒng)中的資源調(diào)度框架,具備多個(gè)容錯(cuò)機(jī)制來(lái)確保集群的穩(wěn)定運(yùn)行。以下是YARN的主要容錯(cuò)機(jī)制:

1)ResourceManager的容錯(cuò):ResourceManager是YARN集群中的主要調(diào)度和資源管理器。為了保證其高可用性,YARN提供了ResourceManager的容錯(cuò)機(jī)制。通過(guò)使用ZooKeeper實(shí)現(xiàn)的Active-Standby模式,可以將ResourceManager配置為主備模式,當(dāng)主要的ResourceManager節(jié)點(diǎn)出現(xiàn)故障時(shí),系統(tǒng)會(huì)自動(dòng)切換到備用節(jié)點(diǎn)上,從而保證資源調(diào)度和管理的連續(xù)性。

2)ApplicationMaster的容錯(cuò):在YARN中,每個(gè)應(yīng)用程序都有一個(gè)對(duì)應(yīng)的ApplicationMaster來(lái)管理和監(jiān)控任務(wù)的執(zhí)行。YARN提供了ApplicationMaster的容錯(cuò)機(jī)制,確保應(yīng)用程序在出現(xiàn)故障或異常情況下能夠繼續(xù)執(zhí)行。如果ApplicationMaster節(jié)點(diǎn)發(fā)生故障,YARN會(huì)自動(dòng)重新分配一個(gè)新的節(jié)點(diǎn),并將正在執(zhí)行的任務(wù)遷移到新的節(jié)點(diǎn)上,從而實(shí)現(xiàn)容錯(cuò)和任務(wù)恢復(fù)。

3)NodeManager的容錯(cuò):NodeManager會(huì)定期發(fā)送心跳以維持通信。如果某個(gè)組件長(zhǎng)時(shí)間沒(méi)有收到心跳,則會(huì)認(rèn)為該組件出現(xiàn)故障。ResourceManager 會(huì)自動(dòng)檢測(cè)到節(jié)點(diǎn)的失效,并將其上面的Container狀態(tài)置為失敗,最后告訴對(duì)應(yīng)的ApplicationMaster,以決定如何處理這些Container中運(yùn)行的任務(wù)。

問(wèn)題5:Spark on Yarn 和Hadoop on Yarn有什么區(qū)別?

Spark on YARN和Hadoop中的YARN是兩個(gè)不同的概念,雖然它們都與YARN相關(guān),但在功能和使用方式上有所區(qū)別。

1.Spark on YARN:Spark on YARN是指在YARN資源管理框架上運(yùn)行Apache Spark的一種方式。Spark on YARN允許將Spark作為一個(gè)應(yīng)用程序提交給YARN集群進(jìn)行資源調(diào)度和管理。Spark應(yīng)用程序通過(guò)YARN的資源管理器(ResourceManager)向集群請(qǐng)求所需的資源,并由YARN的應(yīng)用程序主管(ApplicationMaster)進(jìn)行任務(wù)的調(diào)度和監(jiān)控。通過(guò)將Spark on YARN與其他基于YARN的應(yīng)用程序共享集群資源,可以更有效地利用集群資源,實(shí)現(xiàn)資源共享和多任務(wù)調(diào)度。

2.Hadoop中的YARN:Hadoop中的YARN是一個(gè)用于大數(shù)據(jù)集群上的資源調(diào)度和管理框架。YARN作為Hadoop生態(tài)系統(tǒng)的一部分,負(fù)責(zé)處理不同類(lèi)型的應(yīng)用程序?qū)嘿Y源的請(qǐng)求,以及任務(wù)的調(diào)度、監(jiān)控和容錯(cuò)。YARN將集群資源劃分為容器(Container),根據(jù)應(yīng)用程序的需求將容器分配給不同的任務(wù)執(zhí)行單元,如MapReduce任務(wù)、Spark任務(wù)等。YARN還提供了資源管理器(ResourceManager)和應(yīng)用程序主管(ApplicationMaster)等關(guān)鍵組件來(lái)執(zhí)行資源調(diào)度和任務(wù)管理。


秋招來(lái)了!一起看看去年校招面試中Hadoop高頻都問(wèn)些什么?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
东阿县| 深水埗区| 涡阳县| 工布江达县| 肥东县| 民乐县| 靖边县| 武山县| 祁阳县| 邹平县| 亚东县| 忻城县| 商城县| 闸北区| 化德县| 巴林左旗| 甘肃省| 广宁县| 庆云县| 汤原县| 沙田区| 信宜市| 灵丘县| 五家渠市| 炎陵县| 玉田县| 保靖县| 永济市| 通江县| 巢湖市| 即墨市| 手游| 高青县| 东安县| 年辖:市辖区| 呈贡县| 杭锦旗| 福州市| 榕江县| 涿州市| 兰溪市|