一、介紹下Hadoop
可回答:1)Hadoop是什麼;2)Hadoop了解嗎?3)Hadoop原理
問過的一些公司:位元組×4,美團×2,美團(2021.08)x2,京東,阿裡×2,bigo,海康威視,大華,猿輔
導,360,蘑菇街,小紅書(2021.11),騰訊(2021.10),四方偉業(2021.08)
回答技巧:說下Hadoop核心元件,講下HDFS原理、MapReduce過程等,也可以在介紹完元件部分後,
看看面試官會不會繼續往下問(比如讓你說下HDFS讀寫流程、MapReduce工作原理等),給面試官留點
空間,這樣回答下去,面試官能發掘你的技能點,你也能面的輕松些。如果沒問了,就算了。當然你一
下全說完,面試官有興趣也可以。
參考答案:
1、先說下Hadoop是什麼
Hadoop是一個分布式系統基礎架構,主要是為了解決海量資料的存儲和海量資料的分析計算問題。
2、說下Hadoop核心元件
Hadoop自誕生以來,主要有Hadoop 1.x、2.x、3.x三個系列多個版本;
Hadoop 1.x組成:HDFS(具有高可靠性、高吞吐量的分布式檔案系統,用于資料存儲),
MapReduce(同時處理業務邏輯運算和資源的排程),Common(輔助工具,為其它Hadoop子產品提供基
礎設施);
Hadoop 2.x和Hadoop 3.x組成上無變化,和Hadoop 1.x相比,增加了YARN,分擔了MapReduce的工作,
元件包括:HDFS(具有高可靠性、高吞吐量的分布式檔案系統,用于資料存儲),MapReduce(處理業
務邏輯運算),YARN(負責作業排程與叢集資源管理),Common(輔助工具,為其它Hadoop子產品提
供基礎設施)。
這裡也可以先說各個系列的Hadoop組成,然後再說下HDFS、MapReduce、YARN和Common的作用(見
“Hadoop主要分哪幾個部分?他們有什麼作用?”)。
二、Hadoop的特點
問過的一些公司:位元組
參考答案:
1)高可靠性
Hadoop底層維護多個資料副本,即使Hadoop某個計算元素或存儲出現故障時,也不會大緻資料的丢失
2)高擴充性
在叢集間配置設定任務資料,可友善的擴充數以千計的節點
3)高效性
在MapReduce的思想下,Hadoop是并行工作,加快任務處理速度
4)高容錯性
能夠自動将失敗的任務重新配置設定
三、說下Hadoop生态圈元件及其作用
回答技巧:說一些就可以了,不用全部說完,如果問還有嗎,知道就說,不知道就說不知道,别畫蛇添
足
可回答:對Hadoop生态的了解
問過的一些公司:位元組,51,作業幫,阿裡,好未來,唯品會(2021.07)
參考答案:
1)Zookeeper:是一個開源的分布式應用程式協調服務,基于zookeeper可以實作同步服務,配置維護,
命名服務。
2)Flume:一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸的系統。
3)Hbase:是一個分布式的、面向列的開源資料庫, 利用Hadoop HDFS作為其存儲系統。
4)Hive:基于Hadoop的一個資料倉庫工具,可以将結構化的資料檔映射為一張資料庫表,并提供簡單
的sql 查詢功能,可以将sql語句轉換為MapReduce任務進行運作。
5)Sqoop:将一個關系型資料庫中的資料導進到Hadoop的 HDFS中,也可以将HDFS的資料導進到關系
型資料庫中。
四、Hadoop主要分哪幾個部分?他們有什麼作用?
可回答:1)Hadoop的元件有哪些;2)Hadoop原理
問過的一些公司:位元組x2,位元組(2021.08)(2021.09),美團x3,阿裡,阿裡(2021.09),蘑菇街,好未來,
攜程(2021.09),海康(2021.09)
參考答案:
Hadoop主要元件如上圖,主要是HDFS、MapReduce、YARN、Common
HDFS
HDFS是一個檔案系統,用于存儲檔案,通過目錄樹來定位檔案。
其次,它是分布式的,由很多伺服器聯合起來實作其功能,叢集中的伺服器有各自的角色。
HDFS 的使用場景:适合一次寫入,多次讀出的場景。一個檔案經過建立、寫入和關閉之後就不需要改
變。
MapReduce
MapReduce是一個分布式運算程式的程式設計架構,是使用者開發“基于Hadoop的資料分析應用”的核心架構。
MapReduce核心功能是将使用者編寫的業務邏輯代碼和自帶預設元件整合成一個完整的分布式運算程式,
并發運作在一個Hadoop叢集上。
MapReduce将計算過程分為兩個階段:Map和Reduce
Map階段并行處理輸入資料
Reduce階段對Map結果進行彙總
YARN
先來看兩個問題,在Hadoop中
- 如何管理叢集資源?
- 如何給任務合理配置設定資源?
YARN在Hadoop中的作用,就是上面兩個問題的答案。Yarn 是一個資源排程平台,負責為運算程式提供
伺服器運算資源,相當于一個分布式的作業系統平台,而MapReduce等運算程式則相當于運作于操作系
統之上的應用程式。
Common
Hadoop體系最底層的一個子產品,為Hadoop各子項目提供各種工具,如:配置檔案和日志操作等。
五、Hadoop 1.x,2.x,3.x的差別
問過的一些公司:深信服,小米,美團,阿裡,米哈遊,美團買菜(2021.09)
參考答案:
Hadoop 1.x階段,Hadoop中的MapReduce同時處理業務邏輯運算和資源的排程,耦合性較大;
Hadoop 2.x階段,增加了Yarn。Yarn隻負責資源的排程,MapReduce隻負責運算;
Hadoop 3.x 相比于Hadoop 2.x階段在組成上沒有變化。
六、Hadoop叢集工作時啟動哪些程序?它們有什麼作用?
可回答:Hadoop正常運作有幾個程序
問過的一些公司:位元組,祖龍娛樂,海康,京東(2021.07 )
參考答案:
1)NameNode
就是Master,Hadoop的主管、管理者
(1)管理HDFS的名稱空間;
(2)配置副本政策;
(3)管理資料塊(Block)映射資訊;
(4)處理用戶端讀寫請求。
2)DataNode
就是Slave。NameNode下達指令,DataNode執行實際的操作。
(1)存儲實際的資料塊;
(2)執行資料塊的讀/寫操作。
3)Secondary NameNode
Secondary NameNode并非NameNode的熱備。當NameNode挂掉的時候,它并不能馬上替換NameNode
并提供服務。而是提供周期檢查點和清理任務,幫助NN合并editslog,減少NN啟動時間。
(1)輔助NameNode,分擔其工作量,如定期合并Fsimage和Edits,并推送給NameNode
(2)在緊急情況下,可輔助恢複NameNode
4)ResourceManager(JobTracker)
整個叢集資源(記憶體、CPU等)的老大。負責叢集中所有資源的統一管理和配置設定,它接受來自各個節點
(NodeManager)的資源彙報資訊,并把這些資訊按照一定的政策配置設定給各個應用程式(即
ApplicationMaster)。
(1)與用戶端互動,處理來自用戶端的請求。
(2)啟動和管理ApplicatinMaster,并在它運作失敗時重新啟動它。
(3)管理NodeManager,接受來自NodeManager的資源管理彙報資訊,并向NodeManager下達管理指令
(比如殺死Contanier)等。
(4)資源管理與排程,接收來自ApplicationMaster的資源申請請求,并為之配置設定資源(核心)。
5)NodeManager(TaskTracker)
NodeManager是YARN中單個節點的代理(單個節點伺服器資源老大),它需要與應用程式的
ApplicationMaster和叢集管理者ResourceManager互動;它從ApplicationMaster上接收有關Container的命
令并執行(比如啟動、停止Contaner);向ResourceManager彙報各個Container運作狀态和節點健康狀
況,并領取有關Container的指令(比如清理Container)。
NodeManager管理的是Container而不是任務,一個Container中可能運作着各種任務,但是對
NodeManager而言是透明的,它隻負責Container相關操作,比如管理Container的生命周期,即啟動
Container、監控Container和清理Container等。
(1)管理單個節點上的資源
(2)處理來自ResourceManager的指令
(3)處理來自ApplicationMaster的指令
6)DFSZKFailoverController
高可用時它負責監控NameNode的狀态,并及時的把狀态資訊寫入Zookeeper。它通過一個獨立線程周期
性的調用NameNode上的一個特定接口來擷取NameNode的健康狀态。ZKFC也有選擇誰作為Active
NameNode的權利,因為最多隻有兩個節點,選擇政策比較簡單(先到先得,輪換)。
7)JournalNode
高可用情況下存放NameNode的editlog檔案。
七、在叢集計算的時候,什麼是叢集的主要瓶頸
問過的一些公司:美團(2021.08)
參考答案:
磁盤IO(正解),CPU,記憶體,網絡帶寬
八、Hadoop的checkpoint流程
問過的一些公司:位元組
參考答案
在hdfs-site.xml檔案指定Secondary NameNode部署在哪個機器上。
當記錄條數超過100w條,或者時間超過3600s(1小時),Secondary NameNode提醒NameNode做
Checkpoint。
步驟如下:
1)Secondary NameNode提醒NameNode開始做Checkpoint;
2)NameNode上的edit_inprogress檔案滾動生成edit_sum檔案;
3)edit_inprogress滾動生成edit檔案,将滾動前的編輯日志edit和鏡像檔案fsimage拷貝到Secondary
NameNode;
4)Secondary NameNode 加載編輯日志和鏡像檔案到記憶體并合并;
5)生成新的鏡像檔案fsimage.chkpoint,拷貝fsimage.chkpoint到NameNode,NameNode将
fsimage.chkpoint重新命名成fsimage。
詳細版本
FsImage :
中繼資料序列化後在磁盤存儲的地方。包含HDFS檔案系統的所有目錄跟檔案inode序列化資訊
Memory:
中繼資料在記憶體中存儲的地方。
Edit檔案:
1)Edit 記錄用戶端更新中繼資料資訊的每一步操作(可通過Edits運算出中繼資料)。
2)一旦中繼資料有更新跟添加,中繼資料修改追加到Edits中然後修改記憶體中的中繼資料,這樣一旦NameNode
節點斷電,通過 FsImage 跟 Edits 的合并生成中繼資料。
3)Edits檔案不要過大,系統會定期的由 Secondary Namenode 完成 FsImage 和 Edits 的合并。
九、Hadoop的預設塊大小是多少?為什麼要設定這麼大?
可回答:1)Hadoop的block大小調大了會造成什麼影響?調大好還是調小好一點?為什麼?2)對于
MapReduce程式,block調大好還是調小好?為什麼?3)為什麼塊的大小不能設定的太小,也不能設定
的太大?4)HDFS的預設資料塊大小是多少?(128M)為什麼是128M?
回答技巧:從尋址和磁盤兩個方面回答
問過的一些公司:阿裡,位元組,觸寶(2021.07)
參考答案:
預設塊大小:
Hadoop 2.7.2版本及之前預設64MB,Hadoop 2.7.3版本及之後預設128M
塊大小:
HDFS的塊設定太小,會增加尋址時間,程式一直在找塊的開始位置,而且NameNode需要大量記憶體來存
儲中繼資料,不可取。
如果塊設定的太大,從磁盤傳輸資料的時間會明顯大于定位這個塊開始位置所需的時間。導緻程式在處
理這塊資料時,會非常慢。
如果尋址時間約為10ms,而傳輸速率為100MB/s,為了使尋址時間僅占傳輸時間的1%,我們要将塊大小
設定約為100MB。預設的塊大小128MB
塊的大小: 10ms*100*100M/s = 100M ,如圖
HDFS塊的大小設定主要取決于磁盤傳輸速率。
十、Block劃分的原因
問過的一些公司:Shopee
可回答:Hadoop為什麼要分塊存儲
參考答案:
目的:減少磁盤尋道的時間。
不設定block:因為資料是分散的存放磁盤上的,讀取資料時需要不停的進行磁盤尋道,開銷比較大。
使用block:一次可以讀取一個block中的資料,減少磁盤尋道的次數和時間
十一、Hadoop常見的壓縮算法?
問過的一些公司:阿裡
參考答案:
Hadoop中常用的壓縮算法有bzip2、gzip、lzo、snappy,其中lzo、snappy需要作業系統安裝native庫才
可以支援。
資料壓縮的位置如下所示。
MapReduce資料壓縮解析
1)輸入端采用壓縮
在有大量資料并計劃重複處理的情況下,應該考慮對輸入進行壓縮。然而,你無須顯示指定使用的編解
碼方式。Hadoop自動檢查檔案擴充名,如果擴充名能夠比對,就會用恰當的編解碼方式對檔案進行壓
縮和解壓。否則,Hadoop就不會使用任何編解碼器。
2)mapper輸出端采用壓縮
當map任務輸出的中間資料量很大時,應考慮在此階段采用壓縮技術。這能顯著改善内部資料Shuw le過
程,而Shuw le過程在Hadoop處理過程中是資源消耗最多的環節。如果發現資料量大造成網絡傳輸緩慢,
應該考慮使用壓縮技術。可用于壓縮mapper輸出的快速編解碼器包括LZO或者Snappy。
3)reducer輸出采用壓縮
在此階段啟用壓縮技術能夠減少要存儲的資料量,是以降低所需的磁盤空間。當mapreduce作業形成作
業鍊條時,因為第二個作業的輸入也已壓縮,是以啟用壓縮同樣有效。
壓縮方式對比
1)Gzip壓縮
優點:壓縮率比較高,而且壓縮/解壓速度也比較快;hadoop本身支援,在應用中處理gzip格式的檔案
就和直接處理文本一樣;大部分linux系統都自帶gzip指令,使用友善。
缺點:不支援split。
應用場景:當每個檔案壓縮之後在130M以内的(
1個塊大小内),都可以考慮用gzip壓縮格式。例如說
一天或者一個小時的日志壓縮成一個gzip檔案,運作mapreduce程式的時候通過多個gzip檔案達到并發。
hive程式,streaming程式,和java寫的mapreduce程式完全和文本處理一樣,壓縮之後原來的程式不需
要做任何修改。
2)Bzip2壓縮
優點:支援split;具有很高的壓縮率,比gzip壓縮率都高;hadoop本身支援,但不支援native;在linux
系統下自帶bzip2指令,使用友善。
缺點:壓縮/解壓速度慢;不支援native。
應用場景:适合對速度要求不高,但需要較高的壓縮率的時候,可以作為mapreduce作業的輸出格式;
或者輸出之後的資料比較大,處理之後的資料需要壓縮存檔減少磁盤空間并且以後資料用得比較少的情
況;或者對單個很大的文本檔案想壓縮減少存儲空間,同時又需要支援split,而且相容之前的應用程式
(即應用程式不需要修改)的情況 。
3)Lzo壓縮
優點:壓縮/解壓速度也比較快,合理的壓縮率;支援split,是hadoop中最流行的壓縮格式;可以在
linux系統下安裝lzop指令,使用友善。
缺點:壓縮率比gzip要低一些;hadoop本身不支援,需要安裝;在應用中對lzo格式的檔案需要做一些
特殊處理(為了支援split需要建索引,還需要指定inputformat為lzo格式)。
應用場景:一個很大的文本檔案,壓縮之後還大于200M以上的可以考慮,而且單個檔案越大,lzo優點
越越明顯。
4)Snappy壓縮
優點:高速壓縮速度和合理的壓縮率。
缺點:不支援split;壓縮率比gzip要低;hadoop本身不支援,需要安裝;
應用場景:當Mapreduce作業的Map輸出的資料比較大的時候,作為Map到Reduce的中間資料的壓縮格
式;或者作為一個Mapreduce作業的輸出和另外一個Mapreduce作業的輸入。
十二、Hadoop作業送出到YARN的流程?
問過的一些公司:位元組
參考答案:
作業送出全過程詳解
1)作業送出
第 1 步:Client 調用 job.waitForCompletion 方法,向整個叢集送出 MapReduce 作業。
第 2 步:Client 向 RM 申請一個作業 id。
第 3 步:RM 給 Client 傳回該 job 資源的送出路徑和作業 id。
第 4 步:Client 送出 jar 包、切片資訊和配置檔案到指定的資源送出路徑。
第 5 步:Client 送出完資源後,向 RM 申請運作 MrAppMaster。
2)作業初始化
第 6 步:當 RM 收到 Client 的請求後,将該 job 添加到容量排程器中。
第 7 步:某一個空閑的 NM 領取到該 Job。
第 8 步:該 NM 建立 Container,并産生 MRAppmaster。
第 9 步:下載下傳Client 送出的資源到本地。
3)任務配置設定
第 10 步:MrAppMaster 向 RM 申請運作多個 MapTask 任務資源。
第 11 步:RM 将運作 MapTask 任務配置設定給另外兩個NodeManager,另兩個 NodeManager分别領取任務并
建立容器。
4)任務運作
第 12 步:MR向兩個接收到任務的NodeManager發送程式啟動腳本,這兩個NodeManager分别啟動
MapTask,MapTask 對資料分區排序。
第13 步:MrAppMaster 等待所有MapTask 運作完畢後,向RM 申請容器,運作ReduceTask。
第 14 步:ReduceTask 向 MapTask 擷取相應分區的資料。
第 15 步:程式運作完畢後,MR 會向 RM 申請登出自己。
5)進度和狀态更新
YARN 中的任務将其進度和狀态(包括counter)傳回給應用管理器, 用戶端每秒(通過
mapreduce.client.progressmonitor.pollinterval設定)向應用管理器請求進度更新, 展示給使用者。
6)作業完成
除了向應用管理器請求作業進度外, 用戶端每 5 秒都會通過調用 waitForCompletion()來檢查作業是否完
成。時間間隔可以通過 mapreduce.client.completion.pollinterval 來設定。作業完成之後, 應用管理器和
Container 會清理工作狀态。作業的資訊會被作業曆史伺服器存儲以備之後使用者核查。
十三、Hadoop的Combiner的作用
問過的一些公司:冠群馳騁
參考答案:
作用
對每一個MapTask的輸出進行局部彙總,以減小網絡傳輸量
Combiner了解
Combiner是MapReduce程式中Mapper和Reducer之外的一種元件,它屬于優化方案,由于帶寬限制,應
該盡量限制map和reduce之間的資料傳輸數量。它在Map端把同一個key的鍵值對合并在一起并計算,計
算規則與reduce一緻,是以Combiner也可以看作特殊的Reducer。
Combiner和Reducer的差別在于運作的位置:
Combiner是在每一個MapTask所在的節點運作;
Reducer是接收全局所有Mapper的輸出結果。
在哪裡使用Combiner
map輸出資料根據分區排序完成後,在寫入檔案之前會執行一次combine操作(前提是作業中設定了這
個操作);
如果map輸出比較大,溢出檔案個數大于3(此值可以通過屬性min.num.spills.for.combine配置)時,在
merge的過程(多個spill檔案合并為一個大檔案)中前還會執行Combiner操作。
注意事項
不是每種作業都可以做combiner操作的,隻有滿足以下條件才可以:
Combiner隻應該用于那種Reduce的輸入key/value與輸出key/value類型完全一緻,因為Combine本
質上就是reduce操作。
計算邏輯上,Combine操作後不會影響計算結果,像求和,最大值就不會影響,求平均值就影響
了。
十四、Hadoop序列化和反序列化
問過的一些公司:位元組
參考答案:
1、序列化和反序列化
序列化
把記憶體中的對象,轉換成位元組序列(或其他資料傳輸協定)以便于存儲(持久化)和網絡傳輸。
反序列化
将收到位元組序列(或其他資料傳輸協定)或者是硬碟的持久化資料,轉換成記憶體中的對象
2、為什麼要序列化
一般來說,“活的”對象隻生存在記憶體裡,關機斷電就沒有了。而且“活的”對象隻能由本地的程序使用,
不能被發送到網絡上的另外一台計算機。然而序列化可以存儲“活的” 對象,可以将“活的”對象發送到遠
程計算機。
3、為什麼不用 Java 的序列化
Java 的序列化是一個重量級序列化架構(
Serializable),一個對象被序列化後,會附帶很多額外的資訊
(各種校驗資訊,Header,繼承體系等),不便于在網絡中高效傳輸。是以, Hadoop 自己開發了一套
序列化機制(Writable)。
4、Hadoop 序列化特點
緊湊:高效使用存儲空間。
快速:讀寫資料的額外開銷小。
互操作:支援多語言的互動
十五、Hadoop小檔案處理問題
可回到:Hadoop小檔案優化
問過的一些公司:小米,端點資料(2021.07),快手(2021.09),百度(2021.10),騰訊雲(2021.10)
參考答案:
小檔案指的是那些size比HDFS的block size小的多的檔案。Hadoop适合處理少量的大檔案,而不是大量
的小檔案。
1、小檔案導緻的問題
首先,在HDFS中,任何block,檔案或者目錄在記憶體中均以對象的形式存儲,每個對象約占150byte,如
果有1000 0000個小檔案,每個檔案占用一個block,則namenode大約需要2G空間。如果存儲1億個文
件,則namenode需要20G空間。這樣namenode記憶體容量嚴重制約了叢集的擴充。
其次,通路大量小檔案速度遠遠小于通路幾個大檔案。HDFS最初是為流式通路大檔案開發的,如果通路
大量小檔案,需要不斷的從一個datanode跳到另一個datanode,嚴重影響性能。
最後,處理大量小檔案速度遠遠小于處理同等大小的大檔案的速度。每一個小檔案要占用一個slot,而
task啟動将耗費大量時間甚至大部分時間都耗費在啟動task和釋放task上。
2、Hadoop自帶的解決方案
對于小檔案問題,Hadoop本身也提供了幾個解決方案,分别為: Hadoop Archive , Sequence
file 和 CombineFileInputFormat 。
Hadoop Archive
Hadoop Archive或者HAR,是一個高效地将小檔案放入HDFS塊中的檔案存檔工具,它能夠将多個小檔案
打包成一個HAR檔案,這樣在減少namenode記憶體使用的同時,仍然允許對檔案進行透明的通路。
對某個目錄/foo/bar下的所有小檔案存檔成/outputdir/ zoo.har:
hadoop archive -archiveName zoo.har -p /foo/bar /outputdir
當然,也可以指定HAR的大小(使用-Dhar.block.size)。
HAR是在Hadoop file system之上的一個檔案系統,是以所有fs shell指令對HAR檔案均可用,隻不過是文
件路徑格式不一樣,HAR的通路路徑可以是以下兩種格式:
har://scheme-hostname:port/archivepath/fileinarchive
har:///archivepath/fileinarchive(本節點)
可以這樣檢視HAR檔案存檔中的檔案:
hadoop dfs -ls har:///user/zoo/foo.har
輸出:
har:///user/zoo/foo.har/hadoop/dir1
har:///user/zoo/foo.har/hadoop/dir2
使用HAR時需要兩點
第一,對小檔案進行存檔後,原檔案并不會自動被删除,需要使用者自己删除;
第二,建立HAR檔案的過程實際上是在運作一個mapreduce作業,因而需要有一個hadoop叢集運作此命
令。
此外,HAR還有一些缺陷:
第一,一旦建立,Archives便不可改變。要增加或移除裡面的檔案,必須重新建立歸檔檔案。
第二,要歸檔的檔案名中不能有空格,否則會抛出異常,可以将空格用其他符号替換(使用-
Dhar.space.replacement.enable=true 和-Dhar.space.replacement參數)。
第三,存檔檔案不支援壓縮。
一個歸檔後的檔案,其存儲結構如下圖:
Sequence file
Sequence file由一系列的二進制key/value組成,如果為key小檔案名,value為檔案内容,則可以将大批
小檔案合并成一個大檔案。
Hadoop-0.21.0中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter類進行寫,讀和排序操
作。
建立sequence file的過程可以使用mapreduce工作方式完成,對于index,需要改進查找算法
優缺點:對小檔案的存取都比較自由,也不限制使用者和檔案的多少,但是該方法不能使用append方
法,是以适合一次性寫入大量小檔案的場景
CombineFileInputFormat
CombineFileInputFormat是一種新的inputformat,用于将多個檔案合并成一個單獨的split,另外,它會
考慮資料的存儲位置。
十六、Hadoop為什麼要從2.x更新到3.x?
可回答:Hadoop 3.x 版本相對于 Hadoop 2.x的新特性
問過的一些公司:位元組(2021.07)
參考答案:
Apache Hadoop 3.x在以前的主要發行版本(
hadoop-2.x)上進行了許多重大改進。
1、最低要求的Java版本從Java 7增加到Java 8
現在,已針對Java 8的運作時版本編譯了所有Hadoop JAR。仍在使用Java 7或更低版本的使用者必須更新
到Java 8。
2、支援HDFS中的糾删碼
糾删碼是一種持久存儲資料的方法,可節省大量空間。與标準HDFS副本機制的3倍開銷相比,像Reed
Solomon(10,4) 這樣的标準編碼的空間開銷是1.4倍。
由于糾删碼在重建期間會帶來額外的開銷,并且大多數情況下會執行遠端讀取,是以傳統上已将其用于
存儲較冷,通路頻率較低的資料。
在部署此功能時應考慮糾删碼機制的網絡和CPU開銷。
關于HDFS中糾删碼更詳細的介紹,可檢視我之前寫的這篇文章:
深入剖析 HDFS 3.x 新特性-糾删碼
3、Shell腳本重寫
Hadoop Shell腳本已被重寫,以修複許多長期存在的錯誤并包括一些新功能。Hadoop的開發人員盡管一
直在尋求相容性,但是某些更改可能會破壞現有的安裝。
4、MapReduce 任務本地優化
MapReduce 增加了對 map 輸出收集器的本地執行的支援,對于 shuw le 密集型工作,這可以使性能提高
30%或更多。
5、支援兩個以上的 NameNode
在之前的版本中,HDFS的高可用最多支援兩個NameNode。在HDFS 3.x 版本中,通過将編輯複制到法定
數量的三個JournalNode,該體系結構能夠容忍系統中任何一個節點的故障。
但是,某些部署需要更高的容錯度。這個新特性啟用了這一點,該功能允許使用者運作多個備用
NameNode。例如,通過配置三個NameNode和五個JournalNode,群集可以忍受兩個節點的故障,而不
僅僅是一個節點的故障。
6、多個服務的預設端口已更改
以前,多個Hadoop服務的預設端口在Linux臨時端口範圍内(
32768-61000)。這意味着在啟動時,服務
有時會由于與另一個應用程式的沖突而無法綁定到端口。
這些沖突的端口已移出臨時範圍,具體的端口更改如下:
NameNode 的端口:50070 --> 9870, 8020 --> 9820, 50470 --> 9871;
Secondary NameNode 的端口:50091 --> 9869, 50090 --> 9868;
DataNode 的端口:50020 --> 9867, 50010 --> 9866, 50475 --> 9865, 50075 --> 9864;
Hadoop KMS 的端口:16000 --> 9600(HBase的HMaster端口号與Hadoop KMS端口号沖突。兩者都
使用16000,是以 Hadoop KMS 更改為9600)。
7、支援Microsox Azure資料湖和阿裡雲對象存儲系統檔案系統連接配接器
Hadoop現在支援與Microsox Azure資料湖和Aliyun對象存儲系統內建,作為與Hadoop相容的替代檔案系
統。
8、資料内節點平衡器
單個DataNode可管理多個磁盤。在正常的寫操作過程中,磁盤将被均勻填充。但是,添加或替換磁盤可
能會導緻DataNode内部出現嚴重偏差。原有的HDFS平衡器無法處理這種情況。新版本的HDFS中有平衡
功能處理,該功能通過hdfs diskbalancer CLI調用。
9、基于HDFS路由器的聯合
基于HDFS路由器的聯合添加了一個RPC路由層,該層提供了多個HDFS名稱空間的聯合視圖。這簡化了現
有HDFS用戶端對聯合群集的通路。
10、YARN資源類型
YARN資源模型已被通用化,以支援使用者定義的CPU和記憶體以外的可計數資源類型。例如,叢集管理者可
以定義資源,例如GPU,軟體許可證或本地連接配接的存儲。然後可以根據這些資源的可用性來排程YARN任
務。
Hadoop的優缺點
問過的一些公司:小紅書(2021.11)
參考答案:
優點:
1)高可靠性
Hadoop底層維護多個資料副本,即使Hadoop某個計算元素或存儲出現故障時,也不會大緻資料的丢失
2)高擴充性
在叢集間配置設定任務資料,可友善的擴充數以千計的節點
3)高效性
在MapReduce的思想下,Hadoop是并行工作,加快任務處理速度
4)高容錯性
能夠自動将失敗的任務重新配置設定
缺點:
1)Hadoop不适用于低延遲資料通路
2)Hadoop不能高效存儲大量小檔案
3)Hadoop不支援多使用者寫入并任意修改檔案