国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Middleware ? Hadoop功能與使用詳解(HDFS+YARN)

這篇具有很好參考價(jià)值的文章主要介紹了Middleware ? Hadoop功能與使用詳解(HDFS+YARN)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1、服務(wù)概述

Hadoop是一個(gè)開源的分布式計(jì)算和存儲(chǔ)框架,由Apache基金會(huì)開發(fā)和維護(hù)。Hadoop 為龐大的計(jì)算機(jī)集群提供可靠的、可伸縮的應(yīng)用層計(jì)算和存儲(chǔ)支持,它允許使用簡(jiǎn)單的編程模型跨計(jì)算機(jī)群集分布式處理大型數(shù)據(jù)集,并且支持在單臺(tái)計(jì)算機(jī)到幾千臺(tái)計(jì)算機(jī)之間進(jìn)行擴(kuò)展。

Hadoop使用Java開發(fā),所以可以在多種不同硬件平臺(tái)的計(jì)算機(jī)上部署和使用。其核心部件包括分布式文件系統(tǒng) (Hadoop DFS,HDFS) 和MapReduce。

1.1 HDFS

Hadoop Distributed File System,Hadoop分布式文件系統(tǒng),簡(jiǎn)稱HDFS
Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

1.1.1 架構(gòu)解析

1.1.1.1 Block 數(shù)據(jù)塊
  • 基本存儲(chǔ)單元,1.x版本默認(rèn)64M,2.x版本之后默認(rèn)128M
  • 單個(gè)文件會(huì)被拆分成為一個(gè)個(gè)大小相同的塊數(shù)據(jù),存儲(chǔ)在不同的機(jī)器上,當(dāng)一個(gè)文件小于Block設(shè)置的大小,那么實(shí)際占用的空間為其文件的大小
  • 基本讀寫單位,類似于磁盤的頁(yè),每次都是讀寫一個(gè)塊;
  • 每個(gè)塊都會(huì)被復(fù)制到多個(gè)機(jī)器上,默認(rèn)副本數(shù)量為3。

Hadoop 1.x版本默認(rèn)為64M,Hadoop 2.x版本之后默認(rèn)為128M。

  • 減少搜索時(shí)間,一般情況下硬盤傳輸速率比尋道時(shí)間更快,較大的塊可以減少尋道時(shí)間;
  • 減少管理塊的數(shù)據(jù)開銷,每個(gè)塊都需要在NameNode上有對(duì)應(yīng)記錄,數(shù)量少可以減少這些記錄;
  • 對(duì)較大的數(shù)據(jù)塊進(jìn)行讀寫,可以降低網(wǎng)絡(luò)通信的次數(shù)和成本。
1.1.1.2 NameNode 名稱節(jié)點(diǎn)
  • 存儲(chǔ)文件的metadata,運(yùn)行時(shí)所有數(shù)據(jù)都保存到內(nèi)存(因此推薦部署節(jié)點(diǎn)性能內(nèi)存偏大),整個(gè)HDFS可存儲(chǔ)的文件數(shù)受限于NameNode的內(nèi)存大??;
  • NameNode主要存放文件系統(tǒng)樹及所有文件、目錄的元數(shù)據(jù)。元數(shù)據(jù)持久化為2種形式:namespcae image 鏡像文件 + edit log 日志文件,持久化數(shù)據(jù)中不包括Block所在的節(jié)點(diǎn)列表,及文件的Block分布在集群中的哪些節(jié)點(diǎn)上,這些信息是在系統(tǒng)重啟的時(shí)候重新構(gòu)建(通過Datanode匯報(bào)的Block信息)。
  • 一個(gè)Block在NameNode中對(duì)應(yīng)一條記錄(一般一個(gè)Block占用150字節(jié)),如果是大量的小文件,會(huì)消耗大量?jī)?nèi)存;同時(shí)map task的數(shù)量是由splits來決定的,所以用MapReduce處理大量的小文件時(shí),就會(huì)產(chǎn)生過多的map task,線程管理開銷將會(huì)增加作業(yè)時(shí)間;處理大量小文件的速度遠(yuǎn)遠(yuǎn)小于處理同等大小的大文件的速度。因此Hadoop建議存儲(chǔ)大文件;
  • 數(shù)據(jù)會(huì)定時(shí)保存到本地磁盤,但不保存Block的位置信息,而是由DataNode注冊(cè)時(shí)上報(bào)和運(yùn)行時(shí)維護(hù)(NameNode中與DataNode相關(guān)的信息并不保存到NameNode的文件系統(tǒng)中,而是NameNode每次重啟后,動(dòng)態(tài)重建);
  • NameNode失效則整個(gè)HDFS都會(huì)失效,因此優(yōu)先保證NameNode的可用性,HDFS針對(duì)單點(diǎn)故障提供了2種解決機(jī)制: 備份持久化元數(shù)據(jù) / 使用Secondary NameNode。
1.1.1.3 Secondary NameNode 第二名稱節(jié)點(diǎn)

SecondaryNameNode有兩個(gè)作用:一是鏡像備份,二是日志與鏡像的定期合并。兩個(gè)過程同時(shí)進(jìn)行,稱為checkpoint。

鏡像備份:定期備份fsimage文件;

Checkpoint:將日志與鏡像的定期合并操作,避免edit log過大,通過創(chuàng)建檢查點(diǎn)checkpoint來合并(合并周期與鏡像大小可以通過core-site.xml設(shè)置)。它會(huì)維護(hù)一個(gè)合并后的namespace image副本, 可用于在Namenode完全崩潰時(shí)恢復(fù)數(shù)據(jù),因此SNN并非是NN的備用節(jié)點(diǎn),并不會(huì)再NN異常時(shí)主動(dòng)切換。具體流程如下:

  • SecondaryNameNode通知NameNode準(zhǔn)備提交edits文件,此時(shí)主節(jié)點(diǎn)產(chǎn)生edits.new;
  • SecondaryNameNode通過http get方式獲取NameNode的fsimage與edits文件(在SecondaryNameNode的current同級(jí)目錄下可見到 temp.check-point或者previous-checkpoint目錄,這些目錄中存儲(chǔ)著從namenode拷貝來的鏡像文件);
  • SecondaryNameNode開始合并獲取的上述兩個(gè)文件,產(chǎn)生一個(gè)新的fsimage文件fsimage.ckpt;
  • SecondaryNameNode用http post方式發(fā)送fsimage.ckpt至NameNode;
  • NameNode將fsimage.ckpt與edits.new文件分別重命名為fsimage與edits,然后更新fstime,整個(gè)checkpoint過程到此結(jié)束。 在新版本的hadoop中(hadoop0.21.0),SecondaryNameNode兩個(gè)作用被兩個(gè)節(jié)點(diǎn)替換, checkpoint node與backup node. SecondaryNameNode備份由三個(gè)參數(shù)控制fs.checkpoint.period控制周期,fs.checkpoint.size控制日志文件超過多少大小時(shí)合并, dfs.http.address表示http地址,這個(gè)參數(shù)在SecondaryNameNode為單獨(dú)節(jié)點(diǎn)時(shí)需要設(shè)置。

Secondary Namenode通常運(yùn)行在另一臺(tái)機(jī)器,因?yàn)楹喜⒉僮餍枰馁M(fèi)大量的CPU和內(nèi)存。其數(shù)據(jù)落后于Namenode,因此當(dāng)Namenode完全崩潰時(shí),會(huì)出現(xiàn)數(shù)據(jù)丟失問題。 通常做法是拷貝NFS中的備份元數(shù)據(jù)到Secondary NameNode,將其作為新的Namenode。

1.1.1.4 DataNode 數(shù)據(jù)節(jié)點(diǎn)
  • 存儲(chǔ)具體的Block數(shù)據(jù);
  • 負(fù)責(zé)數(shù)據(jù)的讀寫操作和復(fù)制操作;
  • DataNode啟動(dòng)時(shí)會(huì)向NameNode報(bào)告當(dāng)前存儲(chǔ)的數(shù)據(jù)塊信息,后續(xù)也會(huì)定時(shí)報(bào)告修改信息;
  • DataNode之間會(huì)進(jìn)行通信,復(fù)制數(shù)據(jù)塊,保證數(shù)據(jù)的冗余性;
1.1.1.5 Block Caching 塊緩存

DataNode通常直接從磁盤讀取數(shù)據(jù),但是頻繁使用的Block可以在內(nèi)存中緩存。

默認(rèn)情況下,一個(gè)Block只有一個(gè)數(shù)據(jù)節(jié)點(diǎn)會(huì)緩存。但是可以針對(duì)每個(gè)文件設(shè)置個(gè)性化配置,作業(yè)調(diào)度器可以利用緩存提升性能,例如MapReduce可以把任務(wù)運(yùn)行在有Block緩存的節(jié)點(diǎn)上,用戶或者應(yīng)用可以向NameNode發(fā)送緩存指令(緩存哪個(gè)文件,緩存多久), 緩存池的概念用于管理一組緩存的權(quán)限和資源。

1.1.1.6 HDFS Federation 聯(lián)邦

我們知道NameNode的內(nèi)存會(huì)制約文件數(shù)量,HDFS Federation提供了一種橫向擴(kuò)展NameNode的方式。在Federation模式中,每個(gè)NameNode管理命名空間的一部分,例如一個(gè)NameNode管理/user目錄下的文件, 另一個(gè)NameNode管理/share目錄下的文件。
每個(gè)NameNode管理一個(gè)namespace volumn,所有volumn構(gòu)成文件系統(tǒng)的元數(shù)據(jù)。每個(gè)NameNode同時(shí)維護(hù)一個(gè)Block Pool,保存Block的節(jié)點(diǎn)映射等信息。各NameNode之間是獨(dú)立的,一個(gè)節(jié)點(diǎn)的失敗不會(huì)導(dǎo)致其他節(jié)點(diǎn)管理的文件不可用。
客戶端使用mount table將文件路徑映射到NameNode。mount table是在Namenode群組之上封裝了一層,這一層也是一個(gè)Hadoop文件系統(tǒng)的實(shí)現(xiàn),通過viewfs:協(xié)議訪問。

1.1.1.7 Rack Awareness 機(jī)架感知

參考官網(wǎng)文章

在讀取和寫入的過程中,namenode在分配Datanode的時(shí)候,會(huì)考慮節(jié)點(diǎn)之間的距離。HDFS中距離沒有
采用帶寬來衡量,因?yàn)閷?shí)際中很難準(zhǔn)確度量?jī)膳_(tái)機(jī)器之間的帶寬。
Hadoop把機(jī)器之間的拓?fù)浣Y(jié)構(gòu)組織成樹結(jié)構(gòu),并且用到達(dá)公共父節(jié)點(diǎn)所需跳轉(zhuǎn)數(shù)之和作為距離。事實(shí)上這是一個(gè)距離矩陣的例子。下面的例子簡(jiǎn)明地說明了距離的計(jì)算:

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

  • 同一數(shù)據(jù)中心,同一機(jī)架,同一節(jié)點(diǎn)距離為0;
  • 同一數(shù)據(jù)中心,同一機(jī)架,不同節(jié)點(diǎn)距離為2;
  • 同一數(shù)據(jù)中心,不同機(jī)架,不同節(jié)點(diǎn)距離為4;
  • 不同數(shù)據(jù)中心,不同機(jī)架,不同節(jié)點(diǎn)距離為6。

注意:Hadoop集群的拓?fù)浣Y(jié)構(gòu)需要手動(dòng)配置,如果沒配置,Hadoop默認(rèn)所有節(jié)點(diǎn)位于同一個(gè)數(shù)據(jù)中心的同一機(jī)架上!

1.1.2 讀寫操作與可靠性

1.1.2.1 寫操作

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

  • 客戶端將文件寫入本地磁盤的HDFS Client文件中;
  • 當(dāng)臨時(shí)文件大小達(dá)到一個(gè)Block大小時(shí),HDFS Client通知NameNode申請(qǐng)寫入文件;
  • NameNode在HDFS的文件系統(tǒng)中創(chuàng)建一個(gè)文件,并把該Block ID和要寫入的DataNode列表返回給HDFS Client;
  • HDFS Client收到這個(gè)信息后,將文件內(nèi)容寫入第一個(gè)DataNode(一般以4Kb單位進(jìn)行傳輸,集群讀寫操作時(shí)緩沖區(qū)大小可在core-site.xml配置io.file.buffer.size);
  • 當(dāng)?shù)谝粋€(gè)DataNode接收后,將數(shù)據(jù)寫入本地磁盤,同時(shí)傳輸給第二個(gè)DataNode,以此類推當(dāng)?shù)谌齻€(gè)DataNode寫入本地磁盤(默認(rèn)副本數(shù)量為3),數(shù)據(jù)在DataNode之間是通過pipeline的方式進(jìn)行復(fù)制的;
  • 當(dāng)寫入操作完成后,DataNode會(huì)發(fā)現(xiàn)一個(gè)確認(rèn)給前一個(gè)DataNode,最后由第一個(gè)DataNode返回確認(rèn)寫入完成給HDFS Client;
  • 當(dāng)HDFS Client接收到這個(gè)確認(rèn)寫入數(shù)據(jù)后,會(huì)向NameNode發(fā)送一個(gè)最終的確認(rèn);
  • 當(dāng)某個(gè)DataNode寫入失敗時(shí),數(shù)據(jù)會(huì)繼續(xù)寫入其他的DataNode,然后NameNode會(huì)尋找另一個(gè)正常的DataNode繼續(xù)復(fù)制,以保證數(shù)據(jù)副本數(shù);
  • 每個(gè)Block都會(huì)有一個(gè)校驗(yàn)碼,并存儲(chǔ)在獨(dú)立的文件中,以便讀操作時(shí)校驗(yàn)其完整性;
  • 文件寫完后(HDFS Client關(guān)閉),NameNode提交文件(這時(shí)文件才可見,如果提交前,NameNode垮掉,那文件也就丟失了。fsync:只保證數(shù)據(jù)的信息寫到NameNode上,但并不保證數(shù)據(jù)已經(jīng)被寫到DataNode中)。
1.1.2.2 讀操作

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

  • HDFS Client向NameNode發(fā)送讀請(qǐng)求;
  • NameNode返回文件的所有Block和這些Block所在的DataNodes(包括復(fù)制節(jié)點(diǎn));
  • 客戶端直接從DataNode中讀取數(shù)據(jù),如果該DataNode讀取失?。―ataNode失效或校驗(yàn)碼不對(duì)),則從復(fù)制節(jié)點(diǎn)中讀?。ㄈ绻x取的數(shù)據(jù)就在本機(jī),則直接讀取,否則通過網(wǎng)絡(luò)讀取)。
1.1.2.3 可靠性
  • 多副本機(jī)制:DataNode中存儲(chǔ)的Block均擁有多個(gè)副本數(shù),默認(rèn)為3,支持在hdfs-site.xml中設(shè)置。
  • 機(jī)架感知:通過節(jié)點(diǎn)之間發(fā)送一個(gè)數(shù)據(jù)包,來感應(yīng)它們是否在同一個(gè)機(jī)架,不同副本存放在不同機(jī)架上節(jié)點(diǎn)。
  • 心跳機(jī)制:NameNode周期性從DataNode接受心跳信息和塊報(bào)告,NameNode根據(jù)塊報(bào)告驗(yàn)證元數(shù)據(jù),沒有按時(shí)發(fā)送心跳的DataNode會(huì)被標(biāo)記為宕機(jī),NameNode不會(huì)發(fā)送任何I/O請(qǐng)求到異常節(jié)點(diǎn),若是DataNode失效造成副本數(shù)不足設(shè)定值,NameNode會(huì)在合適的時(shí)機(jī)重新下發(fā)復(fù)制操作到正常的DataNode。
  • 安全模式:NameNode啟動(dòng)時(shí)會(huì)先經(jīng)過一個(gè)"安全模式"階段,安全模式階段不會(huì)產(chǎn)生數(shù)據(jù)寫操作,在此階段NameNode收集各個(gè)DataNode的報(bào)告,當(dāng)數(shù)據(jù)塊達(dá)到最小副本數(shù)以上時(shí),會(huì)被認(rèn)為是"安全"的,在一定比例(支持自定義設(shè)置)的數(shù)據(jù)塊被確定為"安全" 后,在過若干時(shí)間后安全模式結(jié)束;當(dāng)檢測(cè)到副本數(shù)不足的數(shù)據(jù)塊時(shí),該數(shù)據(jù)塊會(huì)被復(fù)制,直到滿足最小副本數(shù)要求。
  • 校驗(yàn)機(jī)制:在文件創(chuàng)立時(shí),每個(gè)數(shù)據(jù)塊都產(chǎn)生效驗(yàn)和,效驗(yàn)和會(huì)作為單獨(dú)一個(gè)隱藏文件保存在命名空間下,客戶端獲取數(shù)據(jù)時(shí)可以檢查效驗(yàn)和是否相同,從而發(fā)現(xiàn)數(shù)據(jù)塊是否損壞,如果正在讀取的數(shù)據(jù)塊損壞,則可以繼續(xù)讀取其他副本。
  • 回收站:刪除文件時(shí),其實(shí)是放入回收站 /trash路徑,回收站里的文件支持快速恢復(fù),支持設(shè)置一個(gè)時(shí)間閾值,當(dāng)回收站里文件的存放時(shí)間超過了這個(gè)閾值,就被徹底刪除,并且釋放占用的數(shù)據(jù)塊;
  • 元數(shù)據(jù)保護(hù):映像文件和事物日志是NameNode的核心數(shù)據(jù),可配置為多副本,副本會(huì)降低NameNode的處理速度,但是會(huì)增加安全性,NameNode依然是單點(diǎn),弱發(fā)生故障需要手工進(jìn)行切換。

1.1.3 NameNode元數(shù)據(jù)解析

元數(shù)據(jù)持久化為2種形式:namespcae image 鏡像文件 + edit log 日志文件,存儲(chǔ)路徑通過在core-site.xml配置文件里設(shè)置參數(shù)hadoop.tmp.dir的值。

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

可以看到在dfs文件下的name目錄存放edits與fsimage文件,其內(nèi)容均為二進(jìn)制,無法直接查看(由于數(shù)據(jù)量較大,因此HDFS取消了編碼效果,可以通過工具查看)

$ hdfs oev -i <edits/fsimage_file> -o <tmp_file.xml>
# 將二進(jìn)制文件輸出為xml格式文件查看,文件路徑和名稱支持自定義

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

1.2 YARN

1.2.1 架構(gòu)演變

Hadoop 1.x 架構(gòu)

  • JobTracker: 負(fù)責(zé)資源管理,跟蹤資源消耗和可用性,作業(yè)生命周期管理(調(diào)度作業(yè)任務(wù),跟蹤進(jìn)度,為任務(wù)提供容錯(cuò));
  • TaskTracker: 加載或關(guān)閉任務(wù),定時(shí)報(bào)告任務(wù)狀態(tài)。

此架構(gòu)會(huì)有以下問題:

  • JobTracker是MapReduce的集中處理點(diǎn),存在單點(diǎn)故障風(fēng)險(xiǎn);
  • JobTracker完成了太多的任務(wù),造成了過多的資源消耗,當(dāng)MapReduce job非常多的時(shí)候,會(huì)造成很大的內(nèi)存開銷。這也是業(yè)界普遍總結(jié)出老Hadoop的 MapReduce只能支持4000節(jié)點(diǎn)主機(jī)的上限;
  • 在TaskTracker端,以Map/Reduce Task的數(shù)目作為資源的表示過于簡(jiǎn)單,沒有考慮到CPU/Mem的占用情況,如果兩個(gè)大內(nèi)存消耗的Task被調(diào)度到了一塊,很容易出現(xiàn)OOM風(fēng)險(xiǎn);
  • 在TaskTracker端,把資源強(qiáng)制劃分為Map Task Slot 和Reduce Task Slot , 如果當(dāng)系統(tǒng)中只有Map Task 或者只有Reduce Task的時(shí)候,會(huì)造成資源的浪費(fèi),也就集群資源利用的問題。

Hadoop 2.x 架構(gòu)

YARN就是將JobTracker的職責(zé)進(jìn)行拆分,將資源管理和任務(wù)調(diào)度監(jiān)控拆分成獨(dú)立的進(jìn)程:一個(gè)全局的資源管理和一個(gè)每個(gè)作業(yè)的管理(ApplicationMaster)ResourceManager和NodeManager提供了計(jì)算資源的分配和管理,而ApplicationMaster則完成應(yīng)用程序的運(yùn)行。

  • ResourceManager: 全局資源管理和任務(wù)調(diào)度;
  • NodeManager: 單個(gè)節(jié)點(diǎn)的資源管理和監(jiān)控;
  • ApplicationMaster: 單個(gè)作業(yè)的資源管理和任務(wù)監(jiān)控;
  • Container: 資源申請(qǐng)的單位和任務(wù)運(yùn)行的容器。

兩種版本架構(gòu)對(duì)比

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

YARN架構(gòu)下形成了一個(gè)通用的資源管理平臺(tái)和一個(gè)通用的應(yīng)用計(jì)算平臺(tái),避免了舊架構(gòu)的單點(diǎn)問題和資源利用率問題,同時(shí)也讓運(yùn)行的應(yīng)用不再局限于MapReduce形式。

1.2.2 基本流程

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

  • Job submission 提交Job:從ResourceManager中獲取一個(gè)Application ID檢查作業(yè)輸出配置,計(jì)算輸入分片copy job資源(job jar、配置文件、分片信息)到HDFS,以便后面任務(wù)的執(zhí)行;
  • Job initialization 初始化job:ResourceManager將作業(yè)遞交給Scheduler(有很多調(diào)度算法,一般是根據(jù)優(yōu)先級(jí))Scheduler為作業(yè)分配一個(gè)Container,ResourceManager就加載一個(gè)Application master process并交給NodeManager;管理ApplicationMaster主要是創(chuàng)建一系列的監(jiān)控進(jìn)程來跟蹤作業(yè)的進(jìn)度,同時(shí)獲取輸入分片,為每一個(gè)分片創(chuàng)建一個(gè)Map task和相應(yīng)的reduce task,Application Master還決定如何運(yùn)行作業(yè),如果作業(yè)很?。膳渲茫?,則直接在同一個(gè)JVM下運(yùn)行;
  • Task assignment 任務(wù)分配:ApplicationMaster向Resource Manager申請(qǐng)資源(一個(gè)個(gè)的Container,指定任務(wù)分配的資源要求)一般是根據(jù)data locality來分配資源;
  • Task execution 任務(wù)執(zhí)行:ApplicationMaster根據(jù)ResourceManager的分配情況,在對(duì)應(yīng)的NodeManager中啟動(dòng)Container從HDFS中讀取任務(wù)所需資源(job jar,配置文件等),然后執(zhí)行該任務(wù)
  • Progress and status update 進(jìn)度與狀態(tài)更新:定時(shí)將任務(wù)的進(jìn)度和狀態(tài)報(bào)告給ApplicationMaster Client定時(shí)向ApplicationMaster獲取整個(gè)任務(wù)的進(jìn)度和狀態(tài)
  • Job completion 任務(wù)完成:Client定時(shí)檢查整個(gè)作業(yè)是否完成,作業(yè)完成后會(huì)自動(dòng)清空臨時(shí)文件、目錄等。

1.2.3 進(jìn)程組件

YARN將JobTracker拆分為四個(gè)組件 + 一個(gè)故障組件。

1.2.3.1 ResourceManager 資源管理

負(fù)責(zé)全局的資源管理和任務(wù)調(diào)度,把整個(gè)集群當(dāng)成計(jì)算資源池,只關(guān)注分配,不負(fù)責(zé)應(yīng)用與容錯(cuò)。

資源管理

  • 以前資源是每個(gè)節(jié)點(diǎn)分成一個(gè)個(gè)的Map slot和Reduce slot,現(xiàn)在是一個(gè)個(gè)Container,每個(gè)Container可以根據(jù)需要運(yùn)行ApplicationMaster、Map、Reduce或者任意的程序;
  • 以前的資源分配是靜態(tài)的,目前是動(dòng)態(tài)的,資源利用率更高;
  • Container是資源申請(qǐng)的單位,一個(gè)資源申請(qǐng)格式:<resource-name, priority, resource-requirement, number-of-containers>,resource-name:主機(jī)名、機(jī)架名或*(代表任意機(jī)器), resource-requirement:目前只支持CPU和內(nèi)存;
  • 用戶提交作業(yè)到ResourceManager,然后在某個(gè)NodeManager上分配一個(gè)Container來運(yùn)行ApplicationMaster,ApplicationMaster再根據(jù)自身程序需要向ResourceManager申請(qǐng)資源;
  • YARN有一套Container的生命周期管理機(jī)制,而ApplicationMaster和其Container之間的管理是應(yīng)用程序自己定義的。

任務(wù)調(diào)度

  • 只關(guān)注資源的使用情況,根據(jù)需求合理分配資源;
  • Scheluer可以根據(jù)申請(qǐng)的需要,在特定的機(jī)器上申請(qǐng)?zhí)囟ǖ馁Y源(ApplicationMaster負(fù)責(zé)申請(qǐng)資源時(shí)的數(shù)據(jù)本地化的考慮,ResourceManager將盡量滿足其申請(qǐng)需求,在指定的機(jī)器上分配Container,從而減少數(shù)據(jù)移動(dòng))。

內(nèi)部結(jié)構(gòu)

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

  • Client Service: 應(yīng)用提交、終止、輸出信息(應(yīng)用、隊(duì)列、集群等的狀態(tài)信息);
  • Adaminstration Service: 隊(duì)列、節(jié)點(diǎn)、Client權(quán)限管理;
  • ApplicationMasterService: 注冊(cè)、終止ApplicationMaster, 獲取ApplicationMaster的資源申請(qǐng)或取消的請(qǐng)求,并將其異步地傳給Scheduler, 單線程處理;
  • ApplicationMaster Liveliness Monitor: 接收ApplicationMaster的心跳消息,如果某個(gè)ApplicationMaster在一定時(shí)間內(nèi)沒有發(fā)送心跳,則被任務(wù)失效,其資源將會(huì)被回收,然后ResourceManager會(huì)重新分配一個(gè)ApplicationMaster運(yùn)行該應(yīng)用(默認(rèn)嘗試2次);
  • Resource Tracker Service: 注冊(cè)節(jié)點(diǎn), 接收各注冊(cè)節(jié)點(diǎn)的心跳消息;
  • NodeManagers Liveliness Monitor: 監(jiān)控每個(gè)節(jié)點(diǎn)的心跳消息,如果長(zhǎng)時(shí)間沒有收到心跳消息,則認(rèn)為該節(jié)點(diǎn)無效, 同時(shí)所有在該節(jié)點(diǎn)上的Container都標(biāo)記成無效,也不會(huì)調(diào)度任務(wù)到該節(jié)點(diǎn)運(yùn)行;
  • ApplicationManager: 管理應(yīng)用程序,記錄和管理已完成的應(yīng)用;
  • ApplicationMaster Launcher: 一個(gè)應(yīng)用提交后,負(fù)責(zé)與NodeManager交互,分配Container并加載ApplicationMaster,也負(fù)責(zé)終止或銷毀;
  • YarnScheduler: 資源調(diào)度分配, 有FIFO(with Priority),F(xiàn)air,Capacity方式;
  • ContainerAllocationExpirer: 管理已分配但沒有啟用的Container,超過一定時(shí)間則將其回收。
1.2.3.2 NodeManager 節(jié)點(diǎn)管理

Node節(jié)點(diǎn)下的Container管理。

  • 啟動(dòng)時(shí)向ResourceManager注冊(cè)并定時(shí)發(fā)送心跳消息,等待ResourceManager的指令;
  • 監(jiān)控Container的運(yùn)行,維護(hù)Container的生命周期,監(jiān)控Container的資源使用情況;
  • 啟動(dòng)或停止Container,管理任務(wù)運(yùn)行時(shí)的依賴包(根據(jù)ApplicationMaster的需要,啟動(dòng)Container之前將需要的程序及其依賴包、配置文件等拷貝到本地)

內(nèi)部結(jié)構(gòu)

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

  • NodeStatusUpdater: 啟動(dòng)向ResourceManager注冊(cè),報(bào)告該節(jié)點(diǎn)的可用資源情況,通信的端口和后續(xù)狀態(tài)的維護(hù);

  • ContainerManager: 接收RPC請(qǐng)求(啟動(dòng)、停止),資源本地化(下載應(yīng)用需要的資源到本地,根據(jù)需要共享這些資源)

    PUBLIC: /filecache

    PRIVATE: /usercache//filecache

    APPLICATION: /usercache//appcache//(在程序完成后會(huì)被刪除)

  • ContainersLauncher: 加載或終止Container;

  • ContainerMonitor: 監(jiān)控Container的運(yùn)行和資源使用情況;

  • ContainerExecutor: 和底層操作系統(tǒng)交互,加載要運(yùn)行的程序。

1.2.3.3 ApplicationMaster 應(yīng)用管理

單個(gè)作業(yè)的資源管理和任務(wù)監(jiān)控。

功能描述

  • 計(jì)算應(yīng)用的資源需求,資源可以是靜態(tài)或動(dòng)態(tài)計(jì)算的,靜態(tài)的一般是Client申請(qǐng)時(shí)就指定了,動(dòng)態(tài)則需要ApplicationMaster根據(jù)應(yīng)用的運(yùn)行狀態(tài)來決定;
  • 根據(jù)數(shù)據(jù)來申請(qǐng)對(duì)應(yīng)位置的資源(Data Locality);
  • 向ResourceManager申請(qǐng)資源,與NodeManager交互進(jìn)行程序的運(yùn)行和監(jiān)控,監(jiān)控申請(qǐng)的資源的使用情況,監(jiān)控作業(yè)進(jìn)度;
  • 跟蹤任務(wù)狀態(tài)和進(jìn)度,定時(shí)向ResourceManager發(fā)送心跳消息,報(bào)告資源的使用情況和應(yīng)用的進(jìn)度信息;
  • 負(fù)責(zé)本作業(yè)內(nèi)的任務(wù)的容錯(cuò)。

ApplicationMaster可以是用任何語(yǔ)言編寫的程序,它和ResourceManager和NodeManager之間是通過ProtocolBuf交互,以前是一個(gè)全局的JobTracker負(fù)責(zé)的,現(xiàn)在每個(gè)作業(yè)都一個(gè),可伸縮性更強(qiáng),至少不會(huì)因?yàn)樽鳂I(yè)太多,造成JobTracker瓶頸。同時(shí)將作業(yè)的邏輯放到一個(gè)獨(dú)立的ApplicationMaster中,使得靈活性更加高,每個(gè)作業(yè)都可以有自己的處理方式,不用綁定到MapReduce的處理模式上。

一般的MapReduce是根據(jù)Block數(shù)量來定Map和Reduce的計(jì)算數(shù)量,然后一般的Map或Reduce就占用一個(gè)Container;數(shù)據(jù)本地化是通過HDFS的Block分片信息獲取的。

1.2.3.4 Container 容器
  • 基本的資源單位(CPU、內(nèi)存等);
  • Container可以加載任意程序,而且不限于Java;
  • 一個(gè)Node可以包含多個(gè)Container,也可以是一個(gè)大的Container;
  • ApplicationMaster可以根據(jù)需要,動(dòng)態(tài)申請(qǐng)和釋放Container。
1.2.3.5 Failover 故障處理

Job任務(wù)失敗

  • 運(yùn)行時(shí)異?;蛘逬VM退出都會(huì)報(bào)告給ApplicationMaster;

  • 通過心跳來檢查掛住的任務(wù)(timeout),會(huì)檢查多次(可配置)才判斷該任務(wù)是否失效;

  • 一個(gè)作業(yè)的任務(wù)失敗率超過配置,則認(rèn)為該作業(yè)失?。?/p>

  • 失敗的任務(wù)或作業(yè)都會(huì)有ApplicationMaster重新運(yùn)行。

ApplicationMaster失敗

  • ApplicationMaster定時(shí)發(fā)送心跳信號(hào)到ResourceManager,通常一旦ApplicationMaster失敗,則認(rèn)為失敗,但也可以通過配置多次后才失?。?/li>
  • 一旦ApplicationMaster失敗,ResourceManager會(huì)啟動(dòng)一個(gè)新的ApplicationMaster;
  • 新的ApplicationMaster負(fù)責(zé)恢復(fù)之前錯(cuò)誤的ApplicationMaster的狀態(tài)(yarn.app.mapreduce.am.job.recovery.enable=true),這一步是通過將應(yīng)用運(yùn)行狀態(tài)保存到共享的存儲(chǔ)上來實(shí)現(xiàn)的,ResourceManager不會(huì)負(fù)責(zé)任務(wù)狀態(tài)的保存和恢復(fù);
  • Client也會(huì)定時(shí)向ApplicationMaster查詢進(jìn)度和狀態(tài),一旦發(fā)現(xiàn)其失敗,則向ResouceManager詢問新的ApplicationMaster。

NodeManager失敗

  • NodeManager定時(shí)發(fā)送心跳到ResourceManager,如果超過一段時(shí)間沒有收到心跳消息,ResourceManager就會(huì)將其移除;
  • 任何運(yùn)行在該NodeManager上的任務(wù)和ApplicationMaster都會(huì)在其他NodeManager上進(jìn)行恢復(fù);
  • 如果某個(gè)NodeManager失敗的次數(shù)太多,ApplicationMaster會(huì)將其加入黑名單(ResourceManager沒有),任務(wù)調(diào)度時(shí)不在其上運(yùn)行任務(wù)。

ResourceManager失敗

  • 通過checkpoint機(jī)制,定時(shí)將其狀態(tài)保存到磁盤,然后失敗的時(shí)候,重新運(yùn)行;
  • 通過zookeeper同步狀態(tài)和實(shí)現(xiàn)透明的HA。

1.3 MapReduce

MapReduce的思想就是“分而治之”,Map負(fù)責(zé) 分,Reduce負(fù)責(zé) 治。

一種分布式的計(jì)算方式指定一個(gè)Map函數(shù),用來把一組鍵值對(duì)映射成一組新的鍵值對(duì),指定并發(fā)的Reduce(歸約)函數(shù),用來保證所有映射的鍵值對(duì)中的每一個(gè)共享相同的鍵組。

map: (K1, V1) → list(K2, V2) combine: (K2, list(V2)) → list(K2, V2) reduce: (K2, list(V2)) → list(K3, V3)

MapReduce主要是先讀取文件數(shù)據(jù),然后進(jìn)行Map處理,接著Reduce處理,最后把處理結(jié)果寫到文件中,因此Map輸出格式和Reduce輸入格式一定是相同的。

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce
Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

1.3.1 Map

Mapper負(fù)責(zé)“分”,即把復(fù)雜的任務(wù)分解為若干個(gè)“簡(jiǎn)單的任務(wù)”來處理?!昂?jiǎn)單的任務(wù)”包含三層含義:

  • 數(shù)據(jù)或計(jì)算的規(guī)模相對(duì)原任務(wù)要大大縮小;
  • 就近計(jì)算,即任務(wù)會(huì)分配到存放著所需數(shù)據(jù)的節(jié)點(diǎn)上進(jìn)行計(jì)算;
  • 并行計(jì)算,彼此間幾乎沒有依賴關(guān)系。

1.3.2 Reduce

Reducer負(fù)責(zé)對(duì)map階段的結(jié)果進(jìn)行匯總。至于需要多少個(gè)Reducer,用戶可以根據(jù)具體問題,通過在mapred-site.xml配置文件里設(shè)置參數(shù)mapred.reduce.tasks的值,默認(rèn)為1。

1.3.3 讀取數(shù)據(jù)

通過InputFormat決定讀取的數(shù)據(jù)的類型,然后拆分成一個(gè)個(gè)InputSplit,每個(gè)InputSplit對(duì)應(yīng)一個(gè)Map處理,RecordReader讀取InputSplit的內(nèi)容給Map。

1.3.3.1 InputFormat 輸入格式化

決定讀取數(shù)據(jù)的格式,可以是文件或數(shù)據(jù)庫(kù)等。

  • 驗(yàn)證作業(yè)輸入的正確性,如格式等;
  • 將輸入文件切割成邏輯分片(InputSplit),一個(gè)InputSplit將會(huì)被分配給一個(gè)獨(dú)立的Map任務(wù);
  • 提供RecordReader實(shí)現(xiàn),讀取InputSplit中的"K-V對(duì)"供Mapper使用。
1.3.3.2 InputSplit 輸入分割

代表一個(gè)個(gè)邏輯分片,并沒有真正存儲(chǔ)數(shù)據(jù),只是提供了一個(gè)如何將數(shù)據(jù)分片的方法,Split內(nèi)有Location信息,利于數(shù)據(jù)局部化,一個(gè)InputSplit給一個(gè)單獨(dú)的Map處理。

1.3.3.3 RecordReader 記錄讀者

將InputSplit拆分成一個(gè)個(gè)<key,value>對(duì)給Map處理,也是實(shí)際的文件讀取分隔對(duì)象</key,value>。

1.3.3.4 Mapper 映射器

主要是讀取InputSplit的每一個(gè)Key,Value對(duì)并進(jìn)行處理

1.3.3.5 Shuffle 清洗器

對(duì)Map的結(jié)果進(jìn)行排序并傳輸?shù)絉educe進(jìn)行處理 Map的結(jié)果并不是直接存放到硬盤,而是利用緩存做一些預(yù)排序處理 Map會(huì)調(diào)用Combiner,壓縮,按key進(jìn)行分區(qū)、排序等,盡量減少結(jié)果的大小 每個(gè)Map完成后都會(huì)通知Task,然后Reduce就可以進(jìn)行處理。

2、配置文件常用參數(shù)

[root@master hadoop]# ll
total 116
drwxr-xr-x 2 1024 1024  4096 Jul 29  2022 bin
drwxr-xr-x 3 1024 1024  4096 Jul 29  2022 etc
drwxr-xr-x 2 1024 1024  4096 Jul 29  2022 include
drwxr-xr-x 3 1024 1024  4096 Jul 29  2022 lib
drwxr-xr-x 4 1024 1024  4096 Jul 29  2022 libexec
-rw-rw-r-- 1 1024 1024 24707 Jul 29  2022 LICENSE-binary
drwxr-xr-x 2 1024 1024  4096 Jul 29  2022 licenses-binary
-rw-rw-r-- 1 1024 1024 15217 Jul 17  2022 LICENSE.txt
-rw-rw-r-- 1 1024 1024 29473 Jul 17  2022 NOTICE-binary
-rw-rw-r-- 1 1024 1024  1541 Apr 22  2022 NOTICE.txt
-rw-rw-r-- 1 1024 1024   175 Apr 22  2022 README.txt
drwxr-xr-x 3 1024 1024  4096 Jul 29  2022 sbin
drwxr-xr-x 4 1024 1024  4096 Jul 29  2022 share

[root@master hadoop]# ll etc/hadoop/
total 180
-rw-r--r-- 1 1024 1024  9213 Jul 29  2022 capacity-scheduler.xml
-rw-r--r-- 1 1024 1024  1335 Jul 29  2022 configuration.xsl
-rw-r--r-- 1 1024 1024  2567 Jul 29  2022 container-executor.cfg
-rw-r--r-- 1 1024 1024   970 Jul 11 14:08 core-site.xml												# 核心站點(diǎn)配置
-rw-r--r-- 1 1024 1024  3999 Jul 29  2022 hadoop-env.cmd
-rw-r--r-- 1 1024 1024 16721 Jul 11 14:15 hadoop-env.sh												# Hadoop環(huán)境變量
-rw-r--r-- 1 1024 1024  3321 Jul 29  2022 hadoop-metrics2.properties
-rw-r--r-- 1 1024 1024 11765 Jul 29  2022 hadoop-policy.xml
-rw-r--r-- 1 1024 1024  3414 Jul 29  2022 hadoop-user-functions.sh.example
-rw-r--r-- 1 1024 1024   683 Jul 29  2022 hdfs-rbf-site.xml
-rw-r--r-- 1 1024 1024  1040 Jul 11 14:02 hdfs-site.xml												# HDFS配置
-rw-r--r-- 1 1024 1024  1484 Jul 29  2022 httpfs-env.sh
-rw-r--r-- 1 1024 1024  1657 Jul 29  2022 httpfs-log4j.properties
-rw-r--r-- 1 1024 1024   620 Jul 29  2022 httpfs-site.xml
-rw-r--r-- 1 1024 1024  3518 Jul 29  2022 kms-acls.xml
-rw-r--r-- 1 1024 1024  1351 Jul 29  2022 kms-env.sh
-rw-r--r-- 1 1024 1024  1860 Jul 29  2022 kms-log4j.properties
-rw-r--r-- 1 1024 1024   682 Jul 29  2022 kms-site.xml
-rw-r--r-- 1 1024 1024 13700 Jul 29  2022 log4j.properties
-rw-r--r-- 1 1024 1024   951 Jul 29  2022 mapred-env.cmd
-rw-r--r-- 1 1024 1024  1764 Jul 29  2022 mapred-env.sh												# MapReduce環(huán)境變量
-rw-r--r-- 1 1024 1024  4113 Jul 29  2022 mapred-queues.xml.template
-rw-r--r-- 1 1024 1024   758 Jul 29  2022 mapred-site.xml											# MapReduce配置
drwxr-xr-x 2 1024 1024  4096 Jul 29  2022 shellprofile.d
-rw-r--r-- 1 1024 1024  2316 Jul 29  2022 ssl-client.xml.example
-rw-r--r-- 1 1024 1024  2697 Jul 29  2022 ssl-server.xml.example
-rw-r--r-- 1 1024 1024  2681 Jul 29  2022 user_ec_policies.xml.template
-rw-r--r-- 1 1024 1024    10 Jul 29  2022 workers
-rw-r--r-- 1 1024 1024  2250 Jul 29  2022 yarn-env.cmd
-rw-r--r-- 1 1024 1024  6329 Jul 29  2022 yarn-env.sh													# YARN環(huán)境變量
-rw-r--r-- 1 1024 1024  2591 Jul 29  2022 yarnservice-log4j.properties
-rw-r--r-- 1 1024 1024   690 Jul 29  2022 yarn-site.xml												# YARN配置

2.1 core-site.xml

  • hadoop.tmp.dir:數(shù)據(jù)臨時(shí)存放目錄,默認(rèn)/tmp/hadoop-${user.name};
  • fs.defaultFS:定義HDFS文件系統(tǒng)的主機(jī)信息與端口號(hào),hdfs://[ip|hostname]:port,hadoop1.x默認(rèn)端口9000,hadoop2.x默認(rèn)端口8020;
  • io.file.buffer.size:集群讀寫操作時(shí)緩沖區(qū)大小,默認(rèn)4K;

2.2 hdfs-site.xml

  • dfs.namenode.name.dir:DFS 名稱節(jié)點(diǎn)在文件系統(tǒng)內(nèi)存儲(chǔ)名稱表 fsimage 的路徑,多個(gè)目錄使用逗號(hào)間隔,名稱表會(huì)復(fù)制存儲(chǔ)到所有目錄中,默認(rèn)為file://${hadoop.tmp.dir}/dfs/name;
  • dfs.datanode.data.dir:DFS 數(shù)據(jù)節(jié)點(diǎn)在文件系統(tǒng)內(nèi)存儲(chǔ)數(shù)據(jù)的路徑,多個(gè)目錄使用逗號(hào)間隔,數(shù)據(jù)將存儲(chǔ)在所有目錄中,通常存儲(chǔ)在不同設(shè)備上,默認(rèn)為file://${hadoop.tmp.dir}/dfs/data;
  • dfs.replication:DFS 數(shù)據(jù)庫(kù)的副本數(shù)量,默認(rèn)為3;
  • dfs.blocksize:文件系統(tǒng)中塊大小,以字節(jié)為單位,可以使用k/m/g/t/p/e指定大小,默認(rèn)為128M;
  • dfs.namenode.http-address:WebHDFS UI監(jiān)聽地址與端口,默認(rèn)為0.0.0.0:50070;
  • dfs.webhdfs.enabled:是否啟用WebHDFS UI,默認(rèn)為false,開啟為true;
  • fs.checkpoint.period:多長(zhǎng)時(shí)間記錄一次hdfs的鏡像,默認(rèn)1小時(shí);
  • fs.checkpoint.size:一次記錄多大的size的鏡像,默認(rèn)64M。

2.3 mapred-site.xml

若是在etc/hadoop/目錄下沒有mapred-site.xml文件,倒是有一個(gè)mapred-site.xml.template樣板,可以復(fù)制一份進(jìn)行修改配置。

  • mapreduce.framework.name:指定執(zhí)行MapReduce作業(yè)的運(yùn)行時(shí)框架,屬性值可以是local,classic或yarn;
  • mapreduce.jobhistory.address:指定查看運(yùn)行完mapreduce程序的服務(wù)器的IP協(xié)議的主機(jī)名和端口號(hào),默爾為0.0.0.0:10020;
  • mapreduce.jobhistory.webapp.address:指定使用WebUI查看mapreduce程序的主機(jī)名和端口號(hào),默認(rèn)為0.0.0.0:19888;

2.4 yarn-site.xml

  • yarn.nodemanager.aux-services:指定在進(jìn)行mapreduce作業(yè)時(shí),yarn使用mapreduce_shuffle混洗技術(shù);
  • yarn.nodemanager.aux-services.mapreduce_shuffle.class:指定混洗技術(shù)對(duì)應(yīng)的字節(jié)碼文件,value = org.apache.hadoop.mapred.ShuffleHandler;
  • yarn.resourcemanager.hostname:指定resourcemanager的主機(jī)名,默認(rèn)為0.0.0.0;
  • yarn.resourcemanager.address:指定在RM中的應(yīng)用程序管理器接口的地址,默認(rèn)為${yarn.resourcemanager.hostname}:8032;
  • yarn.resourcemanager.scheduler.address:指定RM調(diào)度程序接口的地址,默認(rèn)為${yarn.resourcemanager.hostname}:8030;
  • yarn.resourcemanager.resource-tracker.address:指定RM下的resource-tracker的地址,默認(rèn)為${yarn.resourcemanager.hostname}:8031;
  • yarn.resourcemanager.admin.address:指定RM管理界面的地址,默認(rèn)為${yarn.resourcemanager.hostname}:8033;
  • yarn.resourcemanager.webapp.address:指定RM的web訪問的地址,默認(rèn)為${yarn.resourcemanager.hostname}:8088;

3、環(huán)境安裝

3.1 安裝包下載

官網(wǎng)安裝包下載鏈接:https://hadoop.apache.org/releases.html,下載二進(jìn)制文件即可。

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

3.2 單機(jī)部署

Hadoop單機(jī)部署的情況下沒有太大必要部署YARN服務(wù),只是單純部署HDFS作為測(cè)試環(huán)境完成實(shí)驗(yàn)即可。

[root@master tar]# tar -xf hadoop-3.3.4.tar.gz -C /middleware/
[root@master tar]# cd /middleware/
[root@master middleware]# ln -s hadoop-3.3.4/ hadoop

[root@master middleware]# cd hadoop
[root@master hadoop]# ll
total 116
drwxr-xr-x 2 1024 1024  4096 Jul 29  2022 bin
drwxr-xr-x 3 1024 1024  4096 Jul 29  2022 etc
drwxr-xr-x 2 1024 1024  4096 Jul 29  2022 include
drwxr-xr-x 3 1024 1024  4096 Jul 29  2022 lib
drwxr-xr-x 4 1024 1024  4096 Jul 29  2022 libexec
-rw-rw-r-- 1 1024 1024 24707 Jul 29  2022 LICENSE-binary
drwxr-xr-x 2 1024 1024  4096 Jul 29  2022 licenses-binary
-rw-rw-r-- 1 1024 1024 15217 Jul 17  2022 LICENSE.txt
-rw-rw-r-- 1 1024 1024 29473 Jul 17  2022 NOTICE-binary
-rw-rw-r-- 1 1024 1024  1541 Apr 22  2022 NOTICE.txt
-rw-rw-r-- 1 1024 1024   175 Apr 22  2022 README.txt
drwxr-xr-x 3 1024 1024  4096 Jul 29  2022 sbin
drwxr-xr-x 4 1024 1024  4096 Jul 29  2022 share

[root@master hadoop]# vim etc/hadoop/hadoop-env.sh 
export JAVA_HOME=/middleware/jdk

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

[root@master hadoop]# source etc/hadoop/hadoop-env.sh 
[root@master hadoop]# ./bin/hadoop version
Hadoop 3.3.4
Source code repository https://github.com/apache/hadoop.git -r a585a73c3e02ac62350c136643a5e7f6095a3dbb
Compiled by stevel on 2022-07-29T12:32Z
Compiled with protoc 3.7.1
From source with checksum fb9dd8918a7b8a5b430d61af858f6ec
This command was run using /middleware/hadoop-3.3.4/share/hadoop/common/hadoop-common-3.3.4.jar

[root@master hadoop]# vim etc/hadoop/core-site.xml  
<configuration>
 <property>
     <name>fs.defaultFS</name>
     <value>hdfs://localhost:9000</value>
 </property>
 <property>
     <name>hadoop.tmp.dir</name>
     <value>/middleware/hadoop/</value>
 </property>
</configuration>

[root@master hadoop]# vim etc/hadoop/hdfs-site.xml 
<configuration>
 <property>
     <name>dfs.replication</name>
     <value>1</value>
 </property>
 <property>
     <name>dfs.webhdfs.enabled</name>
     <value>true</value>
 </property>
 <property>
  <name>dfs.namenode.http-address</name>
  <value>0.0.0.0:50070</value>
 </property>
</configuration>

[root@master hadoop]# bin/hdfs namenode -format
~
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/9.134.244.180
************************************************************/

[root@master hadoop]# tree dfs/
dfs/
└── name
    └── current
        ├── fsimage_0000000000000000000
        ├── fsimage_0000000000000000000.md5
        ├── seen_txid
        └── VERSION

2 directories, 4 files

[root@master hadoop]# ./sbin/start-dfs.sh
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [localhost]
Last login: Tue Jul 11 13:55:17 CST 2023 from 10.95.19.138 on pts/0
localhost: ssh: connect to host localhost port 22: Connection refused
Starting datanodes
Last login: Tue Jul 11 14:10:44 CST 2023 on pts/0
localhost: ssh: connect to host localhost port 22: Connection refused
Starting secondary namenodes [master]
Last login: Tue Jul 11 14:10:44 CST 2023 on pts/0
master: ssh: connect to host master port 22: Connection refused

[root@master hadoop]# vim etc/hadoop/hadoop-env.sh
export HADOOP_SSH_OPTS="-p 36000"

[root@master hadoop]# ./sbin/start-dfs.sh

3.3 集群部署(推薦)

環(huán)境準(zhǔn)備:JDK安裝與升級(jí) + 集群免密登錄。

# 制作密鑰文件(持續(xù)回車保持默認(rèn)配置)
[root@master hadoop]# ssh-keygen -t rsa -b 4096								# t為加密算法類型,b為秘鑰長(zhǎng)度
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 			# 秘鑰文件存儲(chǔ)位置
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:FbNOpySF2pNAo2vR9L53bm91fSgJf/MYnHBwTenf35o root@localhost.localhost
The key's randomart image is:
+---[RSA 4096]----+
|     .+  .+    oo|
|     +.o.. +. ...|
|    o .+o.= .o.  |
|     o..+*.o. .. |
|    o   S.oo = o+|
|   .     .  + B B|
|        . . .o *=|
|         . o. o.+|
|           ..oE. |
+----[SHA256]-----+

# 集群節(jié)點(diǎn)互相發(fā)放密鑰文件,首次發(fā)放需要進(jìn)行登錄密碼驗(yàn)證,三臺(tái)機(jī)器共計(jì)發(fā)放秘鑰文件六次(本機(jī)不需要發(fā)送到本機(jī))
[root@master hadoop]# ssh-copy-id master
[root@master hadoop]# ssh-copy-id node1
[root@master hadoop]# ssh-copy-id node2

# 配置hosts,將IP替換為當(dāng)前環(huán)境下地址即可
[root@master hadoop]# vim /etc/hosts 
# [hadoop_cluster]
$ip1 master
$ip2 node1
$ip3 node2

3.3.1 HDFS

3.3.1.1 部署
# 解壓過程省略
[root@master hadoop]# vim etc/hadoop/hadoop-env.sh
export JAVA_HOME=/middleware/jdk
export HADOOP_SSH_OPTS="-p 36000"

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

[root@master hadoop]# vim etc/hadoop/core-site.xml
<configuration>
    <!--指定HDFS的數(shù)量-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!--secondary namenode 所在主機(jī)的IP和端口-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node1:50090</value>
    </property>
    <property>
        <name>dfs.namenode.http-address</name>
        <value>master:50090</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

[root@master hadoop]# vim etc/hadoop/hdfs-site.xml
<configuration>
    <!--指定HDFS的數(shù)量-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!--secondary namenode 所在主機(jī)的IP和端口-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node1:50090</value>
    </property>
</configuration>

[root@master hadoop]# vim etc/hadoop/mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

[root@master hadoop]# vim etc/hadoop/yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8034</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
</configuration>

[root@master hadoop]# vim workers 
master
node1
node2

# 格式化HDFS
[root@master hadoop]# ./bin/hdfs namenode -format
~
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/9.134.244.180
************************************************************/

# 啟動(dòng)服務(wù)
[root@master hadoop]# ./sbin/start-dfs.sh
Starting namenodes on [master]
Last login: Fri Sep  8 12:30:14 CST 2023 from 10.91.28.109 on pts/2
Starting datanodes
Last login: Fri Sep  8 15:24:19 CST 2023 on pts/1
node2: WARNING: /middleware/hadoop-3.3.4/logs does not exist. Creating.
node1: WARNING: /middleware/hadoop-3.3.4/logs does not exist. Creating.
Starting secondary namenodes [node1]
Last login: Fri Sep  8 15:24:21 CST 2023 on pts/1

# 進(jìn)程驗(yàn)證
[root@master hadoop]# jps
806826 Jps
801889 DataNode
801667 NameNode

[root@node1 middleware]# jps
1109584 Jps
1095393 DataNode
1095563 SecondaryNameNode

[root@node2 /middleware]# jps
29733 Jps
12063 DataNode
3.3.1.2 驗(yàn)證

HDFS Web端驗(yàn)證:http://9.134.244.180:50090,端口配置參考本文2.1章節(jié)core-site.xml中dfs.namenode.http-address參數(shù)詳解。

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

HDFS參數(shù)詳解:
    -ls                         # 查看目錄
    -mkdir                      # 創(chuàng)建目錄
    -rmdir                      # 刪除空目錄
    -rm                         # 刪除文件或文件夾
    	-r 												# 強(qiáng)制刪除非空目錄
    -moveFromLocal              # 從本地剪切到HDFS
    -copyFromLocal              # 從本地復(fù)制到HDFS
    -copyToLocal                # 從HDFS復(fù)制到本地
    -appendToFile               # 追加文件到末尾
    -cat                        # 查看文件內(nèi)容
    -cp                         # 在HDFS上復(fù)制文件
    -mv                         # 在HDFS上移動(dòng)文件
    -get                        # = copyToLocal
    -put                        # = copyFromLocal
    -getmerge                   # 合并下載多個(gè)文件
    -tail                       # 從末尾查看
    -chgrp/-chmod/-chwon        # 修改文件所屬權(quán)限
    -du                         # 統(tǒng)計(jì)文件夾的大小
    -setrep                     # 設(shè)置HDFS中文件副本數(shù)(取決于DN數(shù)量)

# 上傳或下載測(cè)試
[root@master hadoop]# echo "this is test!" > ./aaa.txt 
[root@master hadoop]# ./bin/hdfs dfs -put ./aaa.txt /
[root@master hadoop]# ./bin/hdfs dfs -ls /
Found 1 items
-rw-r--r--   3 root supergroup         14 2023-09-11 14:29 /aaa.txt

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

3.3.1.3 數(shù)據(jù)存儲(chǔ)

HDFS的數(shù)據(jù)存儲(chǔ)路徑為core-site.xml內(nèi)dfs.datanode.data.dir參數(shù)的值。

[root@master hadoop]# tree dfs/data/current/BP-1096417423-9.134.244.180-1694157712400/current/finalized/subdir0/subdir0/
dfs/data/current/BP-1096417423-9.134.244.180-1694157712400/current/finalized/subdir0/subdir0/
├── blk_1073741825
├── blk_1073741825_1001.meta

0 directories, 2 files

[root@master hadoop]# cd dfs/data/current/BP-1096417423-9.134.244.180-1694157712400/current/finalized/subdir0/subdir0/
[root@master subdir0]# cat blk_1073741825
this is test!

[root@node1 hadoop]# cd dfs/data/current/BP-1096417423-9.134.244.180-1694157712400/current/finalized/subdir0/subdir0/
[root@node1 subdir0]# cat blk_1073741825
this is test!

[root@node2 hadoop]# cd dfs/data/current/BP-1096417423-9.134.244.180-1694157712400/current/finalized/subdir0/subdir0/
[root@node2 subdir0]# cat blk_1073741825
this is test!

# 三臺(tái)機(jī)器的存儲(chǔ)數(shù)據(jù)完全一致,原因:core-site.xml內(nèi)dfs.replication的副本數(shù)量默認(rèn)值為3

3.3.2 YARN

3.3.2.1 部署
# 配置MapReduce、YARN并分發(fā)到node1與node2
[root@master hadoop]# vimetc/hadoop/mapred-site.xml 
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

[root@master hadoop]# vim etc/hadoop/yarn-site.xml 
<configuration>
  <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
  </property>
 <property>
       <name>yarn.resourcemanager.address</name>
        <value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
  </property>
 <property>
        <name>yarn.nodemanager.resource-tracker.address</name>
        <value>master:8031</value>
  </property>
</configuration>

[root@master hadoop]# ./sbin/start-yarn.sh
Starting resourcemanager
Last login: Mon Sep 11 14:35:42 CST 2023 on pts/2
Starting nodemanagers
Last login: Mon Sep 11 15:19:31 CST 2023 on pts/1

# 進(jìn)程驗(yàn)證
[root@master hadoop]# jps
809885 Jps
809508 NodeManager
809302 ResourceManager
801889 DataNode
801667 NameNode

[root@node1 hadoop]# jps
1095393 DataNode
1117415 Jps
1095563 SecondaryNameNode
1116957 NodeManager

[root@node2 /middleware]# jps
6407 NodeManager
6909 Jps
12063 DataNode
3.3.2.2 驗(yàn)證

YARN Web端驗(yàn)證:http://9.134.244.180:8088,端口配置參考本文2.4章節(jié)yarn-site.xml中yarn.resourcemanager.webapp.address參數(shù)詳解。

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

# 創(chuàng)建測(cè)試環(huán)境,上傳一個(gè)文本文檔到HDFS中
[root@master hadoop]# ./bin/hdfs dfs -mkdir -p /input
[root@master hadoop]# vim word.txt
I’m LiHua , a Chinese student taking summer course in your university . I’m writing to ask for help . I came here last month and found my courses interesting .But I have some difficulty with note-taking and I have no idea of how to use the library . I was told the learning center provides help for students and I’m anxious to get help from you. I have no class on Tuesdays mornings and Friday afternoons . Please let me know which day is ok with you. You may email or phone me . Here are my email address and phone number :lihua@1236.com ; 1234567.
[root@master hadoop]# ./bin/hdfs dfs -put ./word.txt /input

# 使用YARN進(jìn)行文件單詞統(tǒng)計(jì)操作,輸入文件(存儲(chǔ)在HDFS服務(wù)):/input/word.txt,輸出文件:/output/count.txt
[root@master hadoop]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input/word.txt /output/count.txt
2023-09-11 15:52:39,678 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at master/9.134.244.180:8032
2023-09-11 15:52:39,932 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/root/.staging/job_1694418178447_0001
2023-09-11 15:52:42,335 INFO input.FileInputFormat: Total input files to process : 1
2023-09-11 15:52:42,762 INFO mapreduce.JobSubmitter: number of splits:1
2023-09-11 15:52:45,028 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1694418178447_0001
2023-09-11 15:52:45,029 INFO mapreduce.JobSubmitter: Executing with tokens: []
2023-09-11 15:52:45,141 INFO conf.Configuration: resource-types.xml not found
2023-09-11 15:52:45,141 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.
2023-09-11 15:52:45,326 INFO impl.YarnClientImpl: Submitted application application_1694418178447_0001
2023-09-11 15:52:45,359 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1694418178447_0001/
2023-09-11 15:52:45,360 INFO mapreduce.Job: Running job: job_1694418178447_0001
2023-09-11 15:52:50,413 INFO mapreduce.Job: Job job_1694418178447_0001 running in uber mode : false
2023-09-11 15:52:50,414 INFO mapreduce.Job:  map 0% reduce 0%
2023-09-11 15:52:50,426 INFO mapreduce.Job: Job job_1694418178447_0001 failed with state FAILED due to: Application application_1694418178447_0001 failed 2 times due to AM Container for appattempt_1694418178447_0001_000002 exited with  exitCode: 1
Failing this attempt.Diagnostics: [2023-09-11 15:52:49.413]Exception from container-launch.
Container id: container_1694418178447_0001_02_000001
Exit code: 1

[2023-09-11 15:52:49.446]Container exited with a non-zero exit code 1. Error file: prelaunch.err.
Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

Please check whether your <HADOOP_HOME>/etc/hadoop/mapred-site.xml contains the below configuration:
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>

[2023-09-11 15:52:49.447]Container exited with a non-zero exit code 1. Error file: prelaunch.err.
Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

Please check whether your <HADOOP_HOME>/etc/hadoop/mapred-site.xml contains the below configuration:
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>

For more detailed output, check the application tracking page: http://master:8088/cluster/app/application_1694418178447_0001 Then click on links to logs of each attempt.
. Failing the application.
2023-09-11 15:52:50,440 INFO mapreduce.Job: Counters: 0
# 失敗原因:mapreduce配置缺失
[root@master hadoop]# ./bin/hadoop classpath							# 將下面輸出的':'修改為','
/middleware/hadoop-3.3.4/etc/hadoop:/middleware/hadoop-3.3.4/share/hadoop/common/lib/*:/middleware/hadoop-3.3.4/share/hadoop/common/*:/middleware/hadoop-3.3.4/share/hadoop/hdfs:/middleware/hadoop-3.3.4/share/hadoop/hdfs/lib/*:/middleware/hadoop-3.3.4/share/hadoop/hdfs/*:/middleware/hadoop-3.3.4/share/hadoop/mapreduce/*:/middleware/hadoop-3.3.4/share/hadoop/yarn:/middleware/hadoop-3.3.4/share/hadoop/yarn/lib/*:/middleware/hadoop-3.3.4/share/hadoop/yarn/*

# 追加配置到MapReduce,并且分發(fā)到node1與node2
[root@master hadoop]# vim etc/hadoop/mapred-site.xml 
	<property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
    <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
    	<name>yarn.application.classpath</name>
    	<value>/middleware/hadoop-3.3.4/etc/hadoop,
		/middleware/hadoop-3.3.4/share/hadoop/common/lib/*,
		/middleware/hadoop-3.3.4/share/hadoop/common/*,
		/middleware/hadoop-3.3.4/share/hadoop/hdfs,
		/middleware/hadoop-3.3.4/share/hadoop/hdfs/lib/*,
		/middleware/hadoop-3.3.4/share/hadoop/hdfs/*,
		/middleware/hadoop-3.3.4/share/hadoop/mapreduce/*,
		/middleware/hadoop-3.3.4/share/hadoop/yarn,
		/middleware/hadoop-3.3.4/share/hadoop/yarn/lib/*,
		/middleware/hadoop-3.3.4/share/hadoop/yarn/*</value>
    </property>

# 服務(wù)重啟
[root@master hadoop]# ./sbin/stop-yarn.sh && ./sbin/start-yarn.sh 
Stopping nodemanagers
Last login: Mon Sep 11 15:42:57 CST 2023 on pts/1
master: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
node1: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
Stopping resourcemanager
Last login: Mon Sep 11 16:04:48 CST 2023 on pts/1
Starting resourcemanager
Last login: Mon Sep 11 16:04:56 CST 2023 on pts/1
Starting nodemanagers
Last login: Mon Sep 11 16:04:58 CST 2023 on pts/1

# 重新執(zhí)行
[root@master hadoop]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input/word.txt /output/count.txt
2023-09-11 16:06:15,116 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at master/9.134.244.180:8032
2023-09-11 16:06:15,361 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/root/.staging/job_1694419501011_0001
2023-09-11 16:06:15,826 INFO input.FileInputFormat: Total input files to process : 1
2023-09-11 16:06:16,259 INFO mapreduce.JobSubmitter: number of splits:1
2023-09-11 16:06:16,591 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1694419501011_0001
2023-09-11 16:06:16,591 INFO mapreduce.JobSubmitter: Executing with tokens: []
2023-09-11 16:06:16,706 INFO conf.Configuration: resource-types.xml not found
2023-09-11 16:06:16,707 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.
2023-09-11 16:06:16,904 INFO impl.YarnClientImpl: Submitted application application_1694419501011_0001
2023-09-11 16:06:16,945 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1694419501011_0001/
2023-09-11 16:06:16,945 INFO mapreduce.Job: Running job: job_1694419501011_0001
2023-09-11 16:06:25,035 INFO mapreduce.Job: Job job_1694419501011_0001 running in uber mode : false
2023-09-11 16:06:25,035 INFO mapreduce.Job:  map 0% reduce 0%
2023-09-11 16:06:30,080 INFO mapreduce.Job:  map 100% reduce 0%
2023-09-11 16:06:35,100 INFO mapreduce.Job:  map 100% reduce 100%
2023-09-11 16:06:36,110 INFO mapreduce.Job: Job job_1694419501011_0001 completed successfully
2023-09-11 16:06:36,191 INFO mapreduce.Job: Counters: 54
        File System Counters
                FILE: Number of bytes read=915
                FILE: Number of bytes written=555667
                FILE: Number of read operations=0
                FILE: Number of large read operations=0
                FILE: Number of write operations=0
                HDFS: Number of bytes read=654
                HDFS: Number of bytes written=601
                HDFS: Number of read operations=8
                HDFS: Number of large read operations=0
                HDFS: Number of write operations=2
                HDFS: Number of bytes read erasure-coded=0
        Job Counters 
                Launched map tasks=1
                Launched reduce tasks=1
                Data-local map tasks=1
                Total time spent by all maps in occupied slots (ms)=2216
                Total time spent by all reduces in occupied slots (ms)=2858
                Total time spent by all map tasks (ms)=2216
                Total time spent by all reduce tasks (ms)=2858
                Total vcore-milliseconds taken by all map tasks=2216
                Total vcore-milliseconds taken by all reduce tasks=2858
                Total megabyte-milliseconds taken by all map tasks=2269184
                Total megabyte-milliseconds taken by all reduce tasks=2926592
        Map-Reduce Framework
                Map input records=1
                Map output records=106
                Map output bytes=980
                Map output materialized bytes=915
                Input split bytes=98
                Combine input records=106
                Combine output records=77
                Reduce input groups=77
                Reduce shuffle bytes=915
                Reduce input records=77
                Reduce output records=77
                Spilled Records=154
                Shuffled Maps =1
                Failed Shuffles=0
                Merged Map outputs=1
                GC time elapsed (ms)=99
                CPU time spent (ms)=1150
                Physical memory (bytes) snapshot=595423232
                Virtual memory (bytes) snapshot=5482131456
                Total committed heap usage (bytes)=546832384
                Peak Map Physical memory (bytes)=325435392
                Peak Map Virtual memory (bytes)=2638544896
                Peak Reduce Physical memory (bytes)=269987840
                Peak Reduce Virtual memory (bytes)=2843586560
        Shuffle Errors
                BAD_ID=0
                CONNECTION=0
                IO_ERROR=0
                WRONG_LENGTH=0
                WRONG_MAP=0
                WRONG_REDUCE=0
        File Input Format Counters 
                Bytes Read=556
        File Output Format Counters 
                Bytes Written=601

# 執(zhí)行完成
[root@master hadoop]# ./bin/hdfs dfs -ls /output/count.txt
Found 2 items
-rw-r--r--   3 root supergroup          0 2023-09-11 16:06 /output/count.txt/_SUCCESS										# 執(zhí)行結(jié)果標(biāo)識(shí)
-rw-r--r--   3 root supergroup        601 2023-09-11 16:06 /output/count.txt/part-r-00000								# 執(zhí)行結(jié)果
[root@master hadoop]# ./bin/hdfs dfs -cat /output/count.txt/part-r-00000
,       1
.       5
.But    1
1234567.        1
:lihua@1236.com 1# 結(jié)果太多,此處省略

新任務(wù)job_1694419501011_0001執(zhí)行成功,網(wǎng)頁(yè)展示如下:

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

點(diǎn)擊任務(wù)可查看詳細(xì)信息:Attempt:應(yīng)用Application的嘗試任務(wù);Logs:嘗試任務(wù)日志;Node:執(zhí)行嘗試任務(wù)節(jié)點(diǎn)。

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

Attempt嘗試任務(wù)詳情:

  • Num Node Local Containers (satisfied by)表示在同一節(jié)點(diǎn)上啟動(dòng)任務(wù)的容器數(shù)量。即,任務(wù)需要的資源可以滿足在同一節(jié)點(diǎn)上啟動(dòng),而不需要通過網(wǎng)絡(luò)從其他節(jié)點(diǎn)上獲取資源的容器數(shù)量。
  • Num Rack Local Containers (satisfied by)表示在同一機(jī)架上啟動(dòng)任務(wù)的容器數(shù)量。即,任務(wù)需要的資源可以從同一機(jī)架上的其他節(jié)點(diǎn)上獲取,而不需要通過網(wǎng)絡(luò)從不同機(jī)架上獲取資源的容器數(shù)量。
  • Num Off Switch Containers (satisfied by)表示需要跨機(jī)架獲取資源的容器數(shù)量。即,任務(wù)需要的資源無法從同一機(jī)架上的其他節(jié)點(diǎn)上獲取,而需要通過網(wǎng)絡(luò)從不同機(jī)架上獲取資源的容器數(shù)量。

這些指標(biāo)對(duì)于優(yōu)化Hadoop集群的性能和資源利用率非常重要。例如,如果Num Node Local Containers的數(shù)量太少,可能表示某些節(jié)點(diǎn)的資源利用率不足;如果Num Off Switch Containers的數(shù)量太多,可能表示集群的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)需要優(yōu)化。

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

3.3.2.3 資源控制

YARN資源控制流程如下:

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

  • MR程序提交到客戶端所在的節(jié)點(diǎn);
  • YarnRunner向ResourceManager申請(qǐng)一個(gè)Application;
  • RM將該應(yīng)用程序的資源路徑返回給YarnRunner;
  • 該程序?qū)⑦\(yùn)行所需資源提交到HDFS上;
  • 程序資源提交完畢后,申請(qǐng)運(yùn)行mrAppMaste;
  • RM將用戶的請(qǐng)求初始化成一個(gè)Task;
  • 其中一個(gè)NodeManager領(lǐng)取到Task任務(wù);
  • 該NodeManager創(chuàng)建容器Container,并產(chǎn)生MRAppmaster;
  • Container從HDFS上拷貝資源到本地;
  • MRAppmaster向RM 申請(qǐng)運(yùn)行MapTask資源;
  • RM將運(yùn)行MapTask任務(wù)分配給另外兩個(gè)NodeManager,另兩個(gè)NodeManager分別領(lǐng)取任務(wù)并創(chuàng)建容器;
  • MR向兩個(gè)接收到任務(wù)的NodeManager發(fā)送程序啟動(dòng)腳本,這兩個(gè)NodeManager分別啟動(dòng)MapTask,MapTask對(duì)數(shù)據(jù)分區(qū)排序;
  • MrAppMaster等待所有MapTask運(yùn)行完畢后,向RM申請(qǐng)容器,運(yùn)行ReduceTask;
  • ReduceTask向MapTask獲取相應(yīng)分區(qū)的數(shù)據(jù);
  • 程序運(yùn)行完畢后,MR會(huì)向RM申請(qǐng)注銷自己;

YARN執(zhí)行任務(wù)案例

[root@master hadoop]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input/word.txt /output/count.txt
2023-09-12 11:03:02,112 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at master/9.134.244.180:8032														# 客戶端申請(qǐng)RM連接
2023-09-12 11:03:02,385 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/root/.staging/job_1694487467398_0001		# RM返回客戶端HDFS的job id存儲(chǔ)路徑

# 插入當(dāng)時(shí)查看記錄
[root@master bin]# ./hdfs dfs -ls  /tmp/hadoop-yarn/staging/root/.staging/job_1694487467398_0002
Found 6 items
-rw-r--r--  10 root supergroup     280990 2023-09-12 11:23 /tmp/hadoop-yarn/staging/root/.staging/job_1694487467398_0002/job.jar
-rw-r--r--  10 root supergroup        105 2023-09-12 11:23 /tmp/hadoop-yarn/staging/root/.staging/job_1694487467398_0002/job.split
-rw-r--r--   3 root supergroup         34 2023-09-12 11:23 /tmp/hadoop-yarn/staging/root/.staging/job_1694487467398_0002/job.splitmetainfo
-rw-r--r--   3 root supergroup     236995 2023-09-12 11:23 /tmp/hadoop-yarn/staging/root/.staging/job_1694487467398_0002/job.xml
-rw-r--r--   3 root supergroup          0 2023-09-12 11:23 /tmp/hadoop-yarn/staging/root/.staging/job_1694487467398_0002/job_1694487467398_0002_1.jhist
-rw-r--r--   3 root supergroup     273861 2023-09-12 11:23 /tmp/hadoop-yarn/staging/root/.staging/job_1694487467398_0002/job_1694487467398_0002_1_conf.xml

2023-09-12 11:03:03,491 INFO input.FileInputFormat: Total input files to process : 1		# 需要處理的文件總數(shù)
2023-09-12 11:03:03,993 INFO mapreduce.JobSubmitter: number of splits:1
2023-09-12 11:03:04,356 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1694487467398_0001		# 任務(wù)令牌
2023-09-12 11:03:04,356 INFO mapreduce.JobSubmitter: Executing with tokens: []
2023-09-12 11:03:04,477 INFO conf.Configuration: resource-types.xml not found
2023-09-12 11:03:04,477 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.
2023-09-12 11:03:04,667 INFO impl.YarnClientImpl: Submitted application application_1694487467398_0001		# 提交的job任務(wù)
2023-09-12 11:03:04,703 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1694487467398_0001/
																										# 跟蹤查看job任務(wù)執(zhí)行的URL
2023-09-12 11:03:04,704 INFO mapreduce.Job: Running job: job_1694487467398_0001														# 運(yùn)行中的job任務(wù)
2023-09-12 11:03:12,785 INFO mapreduce.Job: Job job_1694487467398_0001 running in uber mode : false
2023-09-12 11:03:12,785 INFO mapreduce.Job:  map 0% reduce 0%																							# MapReduce進(jìn)度
2023-09-12 11:03:16,824 INFO mapreduce.Job:  map 100% reduce 0%																						# 當(dāng)Map執(zhí)行完成開始Reduce
2023-09-12 11:03:21,846 INFO mapreduce.Job:  map 100% reduce 100%																					# Map+Reduce均完成
2023-09-12 11:03:22,855 INFO mapreduce.Job: Job job_1694487467398_0001 completed successfully							# job任務(wù)完成標(biāo)識(shí)
2023-09-12 11:03:22,934 INFO mapreduce.Job: Counters: 54
        File System Counters													# 文件系統(tǒng)計(jì)數(shù)統(tǒng)計(jì)									
                FILE: Number of bytes read=915
                FILE: Number of bytes written=555663
                FILE: Number of read operations=0
                FILE: Number of large read operations=0
                FILE: Number of write operations=0
                HDFS: Number of bytes read=654
                HDFS: Number of bytes written=601
                HDFS: Number of read operations=8
                HDFS: Number of large read operations=0
                HDFS: Number of write operations=2
                HDFS: Number of bytes read erasure-coded=0
        Job Counters 																	# job任務(wù)計(jì)數(shù)統(tǒng)計(jì)
                Launched map tasks=1
                Launched reduce tasks=1
                Data-local map tasks=1
                Total time spent by all maps in occupied slots (ms)=2280
                Total time spent by all reduces in occupied slots (ms)=1981
                Total time spent by all map tasks (ms)=2280
                Total time spent by all reduce tasks (ms)=1981
                Total vcore-milliseconds taken by all map tasks=2280
                Total vcore-milliseconds taken by all reduce tasks=1981
                Total megabyte-milliseconds taken by all map tasks=2334720
                Total megabyte-milliseconds taken by all reduce tasks=2028544
        Map-Reduce Framework													# MapReduce框架信息
                Map input records=1
                Map output records=106
                Map output bytes=980
                Map output materialized bytes=915
                Input split bytes=98
                Combine input records=106
                Combine output records=77
                Reduce input groups=77
                Reduce shuffle bytes=915
                Reduce input records=77
                Reduce output records=77
                Spilled Records=154
                Shuffled Maps =1
                Failed Shuffles=0
                Merged Map outputs=1
                GC time elapsed (ms)=72
                CPU time spent (ms)=880
                Physical memory (bytes) snapshot=553959424
                Virtual memory (bytes) snapshot=5285777408
                Total committed heap usage (bytes)=591921152
                Peak Map Physical memory (bytes)=327335936
                Peak Map Virtual memory (bytes)=2640453632
                Peak Reduce Physical memory (bytes)=226623488
                Peak Reduce Virtual memory (bytes)=2645323776
        Shuffle Errors																	# Shuffle錯(cuò)誤統(tǒng)計(jì)
                BAD_ID=0
                CONNECTION=0
                IO_ERROR=0
                WRONG_LENGTH=0
                WRONG_MAP=0
                WRONG_REDUCE=0
        File Input Format Counters 											# 文件輸入格式計(jì)數(shù)器
                Bytes Read=556
        File Output Format Counters 										# 文件輸出格式計(jì)數(shù)器
                Bytes Written=601

3.3.3 集群控制腳本

#!/bin/bash

read -p "please input 'hdfs/yarn/all/help':" a1
cd /middleware/hadoop/sbin					# hadoop安裝路徑

case ${a1:-help} in
	hdfs )
		read -p "please input 'start/stop/restart':" b2
		case ${b2:-help} in
			start )
				bash start-dfs.sh
			;;
			stop )
				bash stop-dfs.sh
			;;
			restart )
				bash stop-dfs.sh && bash start-dfs.sh
			;;
			* )
				echo "ERROR,please input 'start/stop/restart'!"
			;;
		esac
	;;
	yarn )
		read -p "please input 'start/stop/restart':" c3
		case ${c3:-help} in
			start )
				bash start-yarn.sh
			;;
			stop )
				bash stop-yarn.sh
			;;
			restart )
				bash stop-yarn.sh && bash start-yarn.sh
			;;
			* )
				echo "ERROR,please input 'start/stop/restart'!"
			;;
		esac
	;;
	all )
		read -p "please input 'start/stop/restart':" d4
		case ${d4:-help} in
			start )
				bash start-all.sh
			;;
			stop )
				bash stop-all.sh
			;;
			restart )
				bash stop-all.sh && bash start-all.sh
			;;
			* )
				echo "ERROR,please input 'start/stop/restart'!"
			;;
		esac
	;;
	* )
		echo "ERROR,please input 'hdfs/yarn/all/help'!"
	;;
esac

cd - > /dev/null 2>&1

4、常見操作

4.1 NN異?;謴?fù)

模擬NN節(jié)點(diǎn)異常,將SNN fsimage數(shù)據(jù)導(dǎo)入NN進(jìn)行恢復(fù)的場(chǎng)景。

[root@master hadoop]# kill -9 19514									# NameNode進(jìn)程
1.2 
[root@node1 hadoop]# ll dfs/
total 8
drwx------ 3 root root 4096 Sep 11 14:35 data
drwxr-xr-x 3 root root 4096 Sep 11 14:35 namesecondary
# 備份NN數(shù)據(jù)
[root@master hadoop]# mkdir /tmp/nn_backup/
[root@master hadoop]# mv dfs/name/* /tmp/nn_backup/
# 將SNN的數(shù)據(jù)拷貝到NN
[root@node1 hadoop]# scp -r -P 36000 dfs/namesecondary/* master:/middleware/hadoop/dfs/name/
# 導(dǎo)入元數(shù)據(jù)
[root@master hadoop]# ./bin/hadoop namenode –importCheckpoint
# 啟動(dòng)HDFS
[root@master hadoop]# ./sbin/start-dfs.sh
# 導(dǎo)入fsimage文件后,可能需要等待一段時(shí)間才能完成所有塊的復(fù)制和狀態(tài)更新。在此期間,HDFS可能無法對(duì)外提供完全正常的服務(wù)

4.2 安全模式

HDFS集群正常開啟時(shí)處于短暫的安全模式,不能執(zhí)行重要操作(寫操作),待集群?jiǎn)?dòng)完成后,自動(dòng)退出安全模式。

# 查看
[root@master hadoop-1]# ./bin/hdfs dfsadmin -safemode get
Safe mode is OFF
# 開啟
[root@master hadoop-1]# ./bin/hdfs dfsadmin -safemode enter
Safe mode is ON
# 關(guān)閉
[root@master hadoop-1]# ./bin/hdfs dfsadmin -safemode leave
Safe mode is OFF
# 等待
[root@master hadoop-1]# ./bin/hdfs dfsadmin -safemode wait
Safe mode is OFF

4.3 數(shù)據(jù)平衡

新加入的節(jié)點(diǎn),沒有數(shù)據(jù)塊的存儲(chǔ),或HDFS長(zhǎng)期使用過程發(fā)現(xiàn)其數(shù)據(jù)分布不均衡,部分節(jié)點(diǎn)遠(yuǎn)超其他節(jié)點(diǎn)時(shí),使得集群整體來看負(fù)載還不均衡。因此需要對(duì)HDFS數(shù)據(jù)存儲(chǔ)設(shè)置負(fù)載均衡。

# 默認(rèn)的數(shù)據(jù)傳輸帶寬比較低,可以設(shè)置為64M
[root@master hadoop]# ./bin/hdfs dfsadmin -setBalancerBandwidth 67108864
# 默認(rèn)balancer的threshold為10%(各個(gè)節(jié)點(diǎn)與集群總的存儲(chǔ)使用率相差不超過10%)
[root@master hadoop]# ./sbin/start-balancer.sh -threshold 5

4.4 集群擴(kuò)/縮容

4.4.1 擴(kuò)容

# 配置免密登錄,參考本文3.3章節(jié)環(huán)境準(zhǔn)備操作
[root@master hadoop]# ssh-keygen -t rsa -b 4096
# 下發(fā)密鑰到其他節(jié)點(diǎn),并拷貝其他節(jié)點(diǎn)密鑰到本地,共計(jì)6次(對(duì)外3次,對(duì)內(nèi)3次)
[root@master hadoop]# ssh-copy-id master

# 附加hosts
[root@node3 hadoop]# vim /etc/hosts$ip4 node3

# 附加workers
[root@node3 hadoop]# vim workers
~
node3

# 啟動(dòng)node3 DdataNode與NodeManager
[root@node3 hadoop]# hadoop-daemon.sh start datanode
[root@node3 hadoop]# yarn-daemon.sh start nodemanager

# 可以使用工具查看YARN NM機(jī)器列表;HDFS DN列表可通過瀏覽器查看ip:50090中DataNodes頁(yè)面
[root@master hadoop]# ./bin/yarn node -list
2023-09-12 14:28:47,291 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at master/9.134.244.180:8032
Total Nodes:4
         Node-Id             Node-State Node-Http-Address       Number-of-Running-Containers
    master:41295                RUNNING       master:8042                                  0
     node2:38853                RUNNING        node2:8042                                  0
     node1:41665                RUNNING        node1:8042                                  0
     node3:41573                RUNNING        node3:8042                                  0

# 開啟node3為DN后數(shù)據(jù)塊不會(huì)立刻存儲(chǔ)到node3上,可以使用數(shù)據(jù)平衡操作重新平衡數(shù)據(jù)分配
[root@node3 hadoop]# ./bin/hdfs dfsadmin -setBalancerBandwidth 104857600
[root@node3 hadoop]# ./bin/hdfs balancer -threshold 1					# 集群數(shù)據(jù)較少,因此閾值設(shè)置為1,平衡操作參考本文4.3章節(jié),等待集群自均衡完成即可

4.4.2 縮容

DataNode縮容不像擴(kuò)容那樣啟動(dòng)一個(gè)節(jié)點(diǎn)即可, 縮容需要把當(dāng)前節(jié)點(diǎn)數(shù)據(jù)移出去,Hadoop已經(jīng)提供了下線功能,前提是在NameNode機(jī)器的hdfs-site.xml配置文件中需要提前配置dfs.hosts.exclude屬性,該屬性指向的文件就是所謂的黑名單列表,會(huì)被NameNode排除在集群之外。如果文件內(nèi)容為空,則意味著不禁止任何機(jī)器。所以在安裝Hadoop的時(shí)候就需要指定好改配置,如果最開始沒有配置該參數(shù),則需要添加后重啟NameNode 。

# 在NameNode所在服務(wù)器的配置目錄etc/hadoop下創(chuàng)建dfs.hosts.exclude文件,并添加需要退役的主機(jī)名稱。
[root@master hadoop]# vim hdfs-site.xml<property>
    <name>dfs.hosts.exclude</name>
    <value>/middleware/hadoop/etc/hadoop/excludes</value>
</property>
# 重啟NN使其配置生效

[root@master hadoop]# vim /middleware/hadoop/etc/hadoop/excludes
node3
# 如果副本數(shù)是3,在線的節(jié)點(diǎn)小于等于3,是不能下線成功的,需要修改副本數(shù)后才能下線。

# 刷新NameNode、刷新ResourceManager進(jìn)程
[root@master hadoop]# ./bin/hdfs dfsadmin -refreshNodes
[root@master hadoop]# ./bin/yarn rmadmin –refreshNodes
# 等待退役節(jié)點(diǎn)狀態(tài)為decommissioned(所有塊已經(jīng)復(fù)制完成),停止該節(jié)點(diǎn)及節(jié)點(diǎn)資源管理器

# 停止node3進(jìn)程
[root@master hadoop]# ./sbin/hadoop-daemon.sh stop datanode
[root@master hadoop]# ./sbin/yarn-daemon.sh stop nodemanager

4.5 回收站

在HDFS中刪除的文件不會(huì)直接徹底清掉,會(huì)先丟棄到回收站中(HDFS回收站路徑:/user/root/.Trash/),過一段時(shí)間之后,自動(dòng)清空垃圾桶當(dāng)中的文件。

在core-site.xml配置中fs.trash.interval=0代表禁用回收站,大于0時(shí)表示啟用回收站,以分鐘為單位的垃圾回收時(shí)間;默認(rèn)值fs.trash.checkpoint.interval=0,如果是0,值等同于fs.trash.interval,以分鐘為單位的垃圾回收檢查間隔。要求fs.trash.checkpoint.interval<=fs.trash.interval。

[root@master hadoop]# vim core-site.xml
<!--  開啟hdfs的垃圾桶機(jī)制,刪除掉的數(shù)據(jù)可以從垃圾桶中回收,單位分鐘 -->
<property>
  <name>fs.trash.interval</name>
  <value>10</value>
</property>

[root@master hadoop]# ./sbin/stop-dfs.sh && ./sbin/start-dfs.sh

# 測(cè)試刪除
[root@master hadoop]# ./bin/hdfs dfs -put ./aaa.txt /delete.txt
[root@master hadoop]# ./bin/hdfs dfs -rm /delete.txt
2023-09-11 19:37:43,757 INFO fs.TrashPolicyDefault: Moved: 'hdfs://master:9000/delete.txt' to trash at: hdfs://master:9000/user/root/.Trash/Current/delete.txt
[root@master hadoop]# ./bin/hdfs dfs -ls /user/root/.Trash/Current/
Found 1 items
-rw-r--r--   3 root supergroup         14 2023-09-11 19:37 /user/root/.Trash/Current/delete.txt

# 恢復(fù)數(shù)據(jù)
[root@master hadoop]# ./bin/hadoop fs -mv /user/root/.Trash/Current/delete.txt /
[root@master hadoop]# ./bin/hdfs dfs -ls /delete.txt
-rw-r--r--   3 root supergroup         14 2023-09-11 19:37 /delete.txt
# 清空回收站
[root@master bin]# ./hadoop fs -expunge
2023-09-12 11:02:07,077 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://master:9000/user/root/.Trash
2023-09-12 11:02:07,077 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://master:9000/user/root/.Trash
2023-09-12 11:02:07,087 INFO fs.TrashPolicyDefault: TrashPolicyDefault#createCheckpoint for trashRoot: hdfs://master:9000/user/root/.Trash
2023-09-12 11:02:07,094 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/root/.Trash/230912110207

4.6 Snapshot 快照

Snapshot是HDFS整個(gè)文件系統(tǒng),或者某個(gè)目錄在某個(gè)時(shí)刻的鏡像。**快照不是數(shù)據(jù)的簡(jiǎn)單拷貝,快照只做差異的記錄!**HDFS 快照的核心功能包括:數(shù)據(jù)恢復(fù)、數(shù)據(jù)備份、數(shù)據(jù)測(cè)試。

  • 差異拷貝:在 HDFS 中,如果在其中一個(gè)目錄比如/A下創(chuàng)建一個(gè)快照,則快照文件中將會(huì)存在與/A目錄下完全一致的子目錄文件結(jié)構(gòu)以及相應(yīng)的屬性信息,通過命令也能看到快照里面具體的文件內(nèi)容。但是這并不意味著快照已經(jīng)對(duì)此數(shù)據(jù)進(jìn)行完全的拷貝 。這里遵循一個(gè)原則:對(duì)于大多不變的數(shù)據(jù),你所看到的數(shù)據(jù)其實(shí)是當(dāng)前物理路徑所指的內(nèi)容,而發(fā)生變更的inode數(shù)據(jù)才會(huì)被快照額外拷貝;
  • HDFS快照不會(huì)復(fù)制Datanode中的塊,只記錄了塊列表和文件大?。?/li>
  • HDFS快照不會(huì)對(duì)常規(guī)HDFS操作產(chǎn)生不利影響,修改記錄按逆時(shí)針順序進(jìn)行,因此可以直接訪問當(dāng)前數(shù)據(jù),通過從當(dāng)前數(shù)據(jù)中減去修改來計(jì)算快照數(shù)據(jù);

4.6.1 操作命令

HDFS 中可以針對(duì)整個(gè)文件系統(tǒng)或者文件系統(tǒng)中某個(gè)目錄創(chuàng)建快照,但是創(chuàng)建快照的前提是相應(yīng)的目錄開啟快照的功能。

# 啟用快照功能
[root@master hadoop]# ./hdfs dfsadmin -allowSnapshot $path
# 禁用快照功能
[root@master hadoop]# ./hdfs dfsadmin -disallowSnapshot $path
# 對(duì)目錄創(chuàng)建快照
[root@master hadoop]# ./hdfs dfs -createSnapshot $path
# 指定名稱創(chuàng)建快照
[root@master hadoop]# ./hdfs dfs -createSnapshot $path $name
# 重命名快照
[root@master hadoop]# ./hdfs dfs -renameSnapshot $path $name1 $name2
# 列出當(dāng)前用戶所有可快照目錄
[root@master hadoop]# ./hdfs lsSnapshottableDir
# 比較兩個(gè)快照目錄的不同之處
[root@master hadoop]# ./hdfs snapshotDiff $path1 $path2
# # 刪除快照
[root@master hadoop]# ./hdfs dfs -deleteSnapshot $path $name

4.6.2 快照使用

4.6.2.1開啟快照
[root@master hadoop]# ./bin/hdfs dfsadmin -allowSnapshot /input
Allowing snapshot on /input succeeded

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

4.6.2.2 對(duì)指定目錄創(chuàng)建快照
[root@master hadoop]# ./bin/hdfs dfs -createSnapshot /input
Created snapshot /input/.snapshot/s20230912-144829.624

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

[root@master hadoop]# ./bin/hdfs dfs -createSnapshot /input mysnap1
Created snapshot /input/.snapshot/mysnap1

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

4.6.2.3 重命名快照
[root@master hadoop]# ./bin/hdfs dfs -renameSnapshot /input mysnap1 mysnap2
Renamed snapshot mysnap1 to mysnap2 under hdfs://master:9000/input

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

4.6.2.4 列出當(dāng)前用戶所有可以快照的目錄
[root@master hadoop]# ./bin/hdfs lsSnapshottableDir
drwxr-xr-x 0 root supergroup 0 2023-09-12 14:49 2 65536 /input
4.6.2.5 比較兩個(gè)快照不同之處
[root@master hadoop]# echo 222 > 2.txt
[root@master hadoop]# ./bin/hadoop fs -appendToFile 2.txt /input/1.txt
[root@master hadoop]# ./bin/hadoop fs -cat /input/1.txt
222
[root@master hadoop]# ./bin/hdfs dfs -createSnapshot /input mysnap3
Created snapshot /input/.snapshot/mysnap3
[root@master hadoop]# ./bin/hadoop fs -put 2.txt /input
[root@master hadoop]# ./bin/hdfs dfs -createSnapshot /input mysnap4
Created snapshot /input/.snapshot/mysnap4
[root@master hadoop]# ./bin/hdfs snapshotDiff /input mysnap2 mysnap4
Difference between snapshot mysnap2 and snapshot mysnap4 under directory /input:
M       .
+       ./1.txt
+       ./2.txt

# 表頭備注:
# + The file/directory has been created.
# - The file/directory has been deleted.
# M The file/directory has been modified.
# R The file/directory has been renamed.

4.6.2.6 刪除快照
[root@master hadoop]# ./bin/hdfs dfs -deleteSnapshot /input mysnap4
Deleted snapshot mysnap4 under hdfs://master:9000/input
4.6.2.7 刪除有快照的目錄
# 擁有快照的目錄不允許被刪除(強(qiáng)制-r仍不可刪除),某種程度上也保護(hù)了文件安全
[root@master hadoop]# ./bin/hadoop fs -rm -r /input
rm: Failed to move to trash: hdfs://master:9000/input: The directory /input cannot be deleted since /input is snapshottable and already has snapshots

5、錯(cuò)誤記錄

5.1 Java版本不兼容

java版本過高,與當(dāng)前Hadoop部分代碼不兼容導(dǎo)致功能異常,報(bào)錯(cuò)如下:

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

降低Java版本,本環(huán)境使用TencentJDK 17(為何不用Oracle JDK的原因:虛擬機(jī)為測(cè)試機(jī)器,版權(quán)問題無法使用),降低為TencentJDK 8。

[root@node2 ~]# tar -xf /root/TencentKona8.0.15.b2_jdk_linux-x86_64_8u382.tar.gz  -C /middleware/
[root@node2 ~]# cd /middleware/
# 由于之前JDK部署為軟鏈接,因此降低版本只需要更新軟鏈接即可
export JAVA_HOME=/middleware/jdk
export PATH=${JAVA_HOME}/bin:$PATH
export CLASSPATH=.:${JAVA_HOME}/lib

[root@node2 /middleware]# unlink jdk
[root@node2 /middleware]# ln -s TencentKona-8.0.15-382/ jdk
[root@node2 /middleware]# source /etc/profile
[root@node2 /middleware]# java -version
openjdk version "1.8.0_382"
OpenJDK Runtime Environment (Tencent Kona 8.0.15) (build 1.8.0_382-b2)
OpenJDK 64-Bit Server VM (Tencent Kona 8.0.15) (build 25.382-b2, mixed mode, sharing)

# 重啟服務(wù)
[root@master hadoop]# ./sbin/stop-dfs.sh && ./sbin/start-dfs.sh

重新使用瀏覽器登錄或刷新頁(yè)面即可查看到數(shù)據(jù)展示正常。

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

5.2 無法正常查看文件內(nèi)容

上傳一個(gè)文件后,使用Head eth file或Tail the file時(shí)無法正常查看文件內(nèi)容,報(bào)錯(cuò)如下:

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce

這是因?yàn)闄C(jī)器內(nèi)部發(fā)送請(qǐng)求為http://node2:9864/webhdfs/v1/aaa.txt請(qǐng)求時(shí),當(dāng)前物理機(jī)器無法識(shí)別node2的ip地址導(dǎo)致異常,需要更改本地Hosts,添加master、node1、node2三個(gè)機(jī)器的ip地址。

  • MAC:/etc/hosts

  • Windows:C:\Windows\System32\drivers\etc\hosts

修改完成后刷新頁(yè)面重新訪問即可恢復(fù)。
Middleware ? Hadoop功能與使用詳解(HDFS+YARN),Middleware,hadoop,hdfs,大數(shù)據(jù),yarn,mapreduce文章來源地址http://www.zghlxwxcb.cn/news/detail-733461.html

到了這里,關(guān)于Middleware ? Hadoop功能與使用詳解(HDFS+YARN)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【運(yùn)維】hadoop 集群安裝(三)hdfs、yarn集群配置、nodemanager健康管理講解

    上篇簡(jiǎn)單說明了多節(jié)點(diǎn)的hadoop節(jié)點(diǎn)怎么安裝,但是沒有細(xì)致的分析hadoop相關(guān)配置,具體怎么根據(jù)環(huán)境進(jìn)行配置,接下來我們對(duì)這些配置進(jìn)行講解 Daemon Environment Variable NameNode HDFS_NAMENODE_OPTS DataNode HDFS_DATANODE_OPTS Secondary NameNode HDFS_SECONDARYNAMENODE_OPTS ResourceManager YARN_RESOURCEMANAGER_OP

    2024年02月10日
    瀏覽(18)
  • 三臺(tái)異構(gòu)服務(wù)器搭建hadoop HA集群史上最詳細(xì)方案(HDFS+YARN)

    三臺(tái)異構(gòu)服務(wù)器搭建hadoop HA集群史上最詳細(xì)方案(HDFS+YARN)

    ?一、系統(tǒng)基礎(chǔ)服務(wù)配置 主機(jī)名 IP 操作系統(tǒng) CPU 內(nèi)存 磁盤 Hive01 10.86.102.104 Centos 7.9.2009 Xeon 4208 X16 192G 46T Hive02 10.86.102.102 Centos 7.9.2009 Xeon 4208 X16 192G 46T Hive03 10.86.102.105 Centos 7.9.2009 Xeon 8260 X48 256G ? ? ? ? 11T 最終組成的是一個(gè)雙副本56T的集群,設(shè)置YARN內(nèi)存共400GB(可調(diào)) 3臺(tái)服務(wù)

    2024年02月07日
    瀏覽(19)
  • HADOOP HDFS詳解

    HADOOP HDFS詳解

    目錄 第一章 概述 1.1大數(shù)據(jù)的特征(4V) 1.2 大數(shù)據(jù)的應(yīng)用場(chǎng)景 1.3大數(shù)據(jù)的發(fā)展前景 1.4企業(yè)大數(shù)據(jù)的一般處理流程 1.4.1數(shù)據(jù)源 1.4.2數(shù)據(jù)采集或者同步 1.4.3數(shù)據(jù)存儲(chǔ) 1.4.4 數(shù)據(jù)清洗 1.4.5 數(shù)據(jù)分析 1.4.6數(shù)據(jù)展示 第二章 hadoop介紹 2.1.hadoop 目標(biāo) 2.2 hadoop的介紹 2.3 hadoop起源 2.4 Hadoop版本

    2024年03月13日
    瀏覽(16)
  • 【Hadoop精講】HDFS詳解

    【Hadoop精講】HDFS詳解

    目錄 理論知識(shí)點(diǎn) 角色功能 元數(shù)據(jù)持久化 安全模式 SecondaryNameNode(SNN) 副本放置策略 HDFS寫流程 HDFS讀流程 HA高可用 CPA原則 Paxos算法 HA解決方案 HDFS-Fedration解決方案(聯(lián)邦機(jī)制) 另一臺(tái)機(jī)器就是SecondaryNameNode(SNN) 不保存位置信息的原因,是因?yàn)楫?dāng)機(jī)器重啟恢復(fù)后,DN會(huì)和NN建立心

    2024年02月02日
    瀏覽(20)
  • hadoop-hdfs簡(jiǎn)介及常用命令詳解(超詳細(xì))

    HDFS(Hadoop Distributed File System)是Apache Hadoop生態(tài)系統(tǒng)中的分布式文件系統(tǒng),用于存儲(chǔ)和處理大規(guī)模數(shù)據(jù)集。HDFS具有高容錯(cuò)性、高可靠性和高吞吐量的特點(diǎn),適用于大數(shù)據(jù)處理和分析場(chǎng)景。本文將介紹HDFS的基本概念和常用操作,幫助您更好地理解和使用HDFS。 HDFS 是一個(gè)分布式

    2024年02月04日
    瀏覽(24)
  • Java 操作 Hadoop 集群之 HDFS 的應(yīng)用案例詳解

    Java 操作 Hadoop 集群之 HDFS 的應(yīng)用案例詳解

    注意:本文內(nèi)容基于 Hadoop 集群搭建完成基礎(chǔ)上: Linux 系統(tǒng) CentOS7 上搭建 Hadoop HDFS集群詳細(xì)步驟 本文的內(nèi)容是基于下面前提: Hadoop 集群搭建完成并能正常啟動(dòng)和訪問 Idea 和 Maven 分別安裝完成 需要有 JavaSE 基礎(chǔ)和熟悉操作hadoop 的 hdfs dfs 命令 Maven 及 idea 中 Maven 相關(guān)配置 本地

    2024年04月16日
    瀏覽(46)
  • Hadoop入門學(xué)習(xí)筆記——三、使用HDFS文件系統(tǒng)

    Hadoop入門學(xué)習(xí)筆記——三、使用HDFS文件系統(tǒng)

    視頻課程地址:https://www.bilibili.com/video/BV1WY4y197g7 課程資料鏈接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd=5ay8 Hadoop入門學(xué)習(xí)筆記(匯總) 3.1.1. HDFS文件系統(tǒng)基本信息 HDFS和Linux系統(tǒng)一樣,均是以 / 作為根目錄的組織形式; 如何區(qū)分HDFS和Linux文件系統(tǒng): Linux文件系統(tǒng)以 file:// 作為

    2024年01月16日
    瀏覽(31)
  • Hadoop學(xué)習(xí)-集群配置文件core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml

    Hadoop學(xué)習(xí)-集群配置文件core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml

    配置核心文件 core-site.xml 編輯core-site.xml(進(jìn)入hadoop文件夾內(nèi)) hdfs-site.xml yarn-site.xml mapred-site.xml 配置完后要分發(fā)給其他服務(wù)器,可以使用之前寫的分發(fā)腳本xsync進(jìn)行快速分發(fā) 配置workers(各集群節(jié)點(diǎn)) 啟動(dòng)集群 如果集群是第一次啟動(dòng) ,需要在 hadoop102 節(jié)點(diǎn)格式化 NameNode(注意:格式

    2024年02月08日
    瀏覽(23)
  • 【Hadoop】HDFS讀寫流程和客戶端命令使用

    【Hadoop】HDFS讀寫流程和客戶端命令使用

    ?? 個(gè)人主頁(yè)——??開著拖拉機(jī)回家_Linux,Java基礎(chǔ)學(xué)習(xí),大數(shù)據(jù)運(yùn)維-CSDN博客 ????? ???? 希望本文能夠給您帶來一定的幫助??文章粗淺,敬請(qǐng)批評(píng)指正!???? ???????????????? ?????????????? ???????????????????????? 感謝點(diǎn)贊和關(guān)注 ,每天進(jìn)步

    2024年02月11日
    瀏覽(29)
  • 大數(shù)據(jù)技術(shù)之Hadoop:使用命令操作HDFS(四)

    大數(shù)據(jù)技術(shù)之Hadoop:使用命令操作HDFS(四)

    目錄 一、創(chuàng)建文件夾 二、查看指定目錄下的內(nèi)容 三、上傳文件到HDFS指定目錄下 四、查看HDFS文件內(nèi)容 五、下載HDFS文件 六、拷貝HDFS文件 七、HDFS數(shù)據(jù)移動(dòng)操作 八、HDFS數(shù)據(jù)刪除操作 九、HDFS的其他命令 十、hdfs web查看目錄 十一、HDFS客戶端工具 11.1 下載插件 11.2 本地安裝Had

    2024年02月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包