深入理解h集群和網絡_第1頁
深入理解h集群和網絡_第2頁
深入理解h集群和網絡_第3頁
深入理解h集群和網絡_第4頁
深入理解h集群和網絡_第5頁
已閱讀5頁,還剩12頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、深入理解 Hadoop 集群和網絡云計算和 Hadoop 中網絡是討論得相對比較少的領域。本文原文由 Dell 企業技術Brad Hedlund 撰寫,他曾在思科工作多年,專長是數據中心、云網絡等。文章素材基于作者的研究、實驗和 Cloudera 的培訓資料。Linux 公社(LinuxIDC.com)于 2006 年 9 月 25 日并開通,Linux 現在已經成為一種廣受關注和支持的一種操作系統,IDC是互聯網數據中心, LinuxIDC 就是關于 Linux 的數據中心。Linux 公社是專業的 Linux 系統門戶,實時發布最新 Linux 資訊,包括 Linux、Ubuntu、Fed

2、ora、RedHat、Linux、Linux 教程、Linux 認證、SUSE Linux、Android、Oracle、Hadoop、CentOS 等技術。本文將著重于討論 Hadoop 集群的體系結構和方法,及它如何與網絡和服務器基礎設施的關系。最開始我們先學習一下 Hadoop 集群運作的基礎原理。Hadoop 里的服務器Hadoop 主要的任務部署分為 3 個部分,分別是:Client,主節點和從節點。主節點主要負責 Hadoop 兩個關鍵功能模塊 HDFS、MapReduce 的監督。當 Job Tracker 使用 Map Reduce 進行和調度數據的并行處理時,名稱節點則負責

3、HDFS 監視和調度。從節點負責了運行的絕大部分,擔當所有數據儲存和指令計算的苦差。每個從節點既扮演者數據節點的又沖當與他們主節點通信的守護進程。守護進程隸屬于 Job Tracker,數據節點在歸屬于名稱節點。Client集合了 Hadoop 上所有的集群設置,但既不包括主節點也不包括從節點。取而代之的是客戶端的作用是把數據加載到集群中,遞交給 Map Reduce 數據處理工作的描述,并在工作結束后取回或者查看結果。在小的集群中(大約 40 個節點)可能會面對單物理設備處理多任務,比如同時 Job Tracker 和名稱節點。作為大集群的中間件,一般情況下都是用的服務器去處理單個任務。在真

4、正的集群中是沒有虛擬服務器和管理層的存在的,這樣就沒有了多余的性能損耗。Hadoop 在 Linux 系統上運行的最好,直接操作底層硬件設施。這就說明 Hadoop 實際上是直接在虛擬機上工作。這樣在花費、易學性和速度上有著無與倫比的優勢。Hadoop 集群上面是一個典型 Hadoop 集群的構造。一系列機架通過大量的機架轉換與機架式服務器(不是刀片服務器)連接起來,通常會用 1GB 或者 2GB 的寬帶來支撐連接。10GB 的帶寬雖然不常見,但是卻能顯著的提高 CPU和磁盤驅動器的密集性。上一層的機架轉換會以相同的帶寬同時連接著許多機架,形成集群。大量擁有自身磁盤儲存器、CPU 及 DRAM

5、 的服務器將成為從節點。同樣有些將成為主節點,這些擁有少量磁盤儲存器的卻有著更快的 CPU 及更大的 DRAM。下面我們來看一下應用程序是怎樣的吧:adoop 的工作流程在計算機行業競爭如此激烈的情況下,究竟什么是 Hadoop 的生存之道?它又切實的解決了什么問題?簡而言之,商業及都存在大量的數據需要被快速的分析和處理。把這些大塊的數據切開,然后分給大量的計算機,讓計算機并行的處理這些數據 這就是 Hadoop能做的。下面這個簡單的例子里,有一個龐大的數據文件(給部門的電子郵件)??焖俚慕厝∠隆癛efund”在郵件中出現的次數。這是個簡單的字數統計練習。Client 將把數據加載到集群中(F

6、ile.txt),提交數據分析工作的描述(word cout),集群將會把結果儲存到一個新的文件中(Results.txt),然后 Client 就會讀結果文檔。向 HDFS 里寫入 FileHadoop 集群在沒有注入數據之前是不起作用的,所以我們先從加載龐大的 File.txt 到集群中開始。首要的目標當然是數據快速的并行處理。為了實現這個目標,我們需要竟可能多的同時工作。最后,Client 將把數據分成更小的模塊,然后分到不同的上貫穿整個集群。模塊分的越小,做數據并行處理的就越多。同時這些還可能出故障,所以為了避免數據丟失就需要單個數據同時在不同的上處理。所以每塊數據都會在集群上被重復的

7、加載。Hadoop 的默認設置是每塊數據重復加載 3 次。這個可以通過hdfs-site.xml 文件中的 dfs.replication 參數來設置。Client 把 File.txt 文件分成 3 塊。Cient 會和名稱節點達成協議(通常是 TCP 9000 協議)然后得到將要拷貝數據的 3 個數據節點列表。然后 Client 將會把每塊數據直接寫入數據節點中(通常是 TCP 50010 協議)。收到數據的數據節點將會把數據到其他數據節點中,循環只到所有數據節點都完成拷貝為止。名稱節點只負責提供數據的位置和數據在族群中的去處(文件系統元數據)。Hadoop 的 Rack Awarenes

8、sHadoop 還擁有“Rack Awareness”的理念。作為 Hadoop 的管理員,你可以在集群中自行的定義從節點的機架數量。但是為什么這樣做會給你帶來麻煩呢?兩個關鍵的是:數據損失預防及網絡性能。別忘了,為了防止數據丟失,每塊數據都會拷貝在多個上。假如同一塊數據的多個拷貝都在同一個機架上,而恰巧的是這個機架出現了故障,那么這帶來的絕對是一團糟。為了這樣的事情發生,則必須有人知道數據節點的位置,并根據實際情況在集群中作出明智的位置分配。這個人就是名稱節點。假使通個機架中兩臺對比不同機架的兩臺會有的帶寬更低的延時。大部分情況下這是真實存在的。機架轉換的上行帶寬一般都低于其下行帶寬。此外,

9、機架內的通信的延時一般都低于跨機架的(也不是全部)。那么假如 Hadoop 能實現“Rack Awareness”的理念,那么在集群性能上無疑會有著顯著的提升!是的,它真的做到了!太棒了,對不對?但是掃興的事情發生了,首次使用你必須手動的去定義它。不斷的優化,保持信息的準確。假如機架轉換能夠自動的給名稱節點提供它的數據節點列表,這樣又完美了?或者反過來,數據節點可以自行的告知名稱節點他們所連接的機架轉換,這樣也的話也同樣完美。在括補結構中網絡中,假如能知道名稱節點可以通過 OpenFlow器到節點的位置,那無疑是更加令人興奮的。準備 HDFS 寫入現在 Client 已經把 File.txt

10、分塊并做好了向集群中加載的準備,下面先從 Block A 開始。Client 向名稱節點發出寫 File.txt 的請求,從名稱節點處獲得通行證,然后得到每塊數據目標數據節點的列表。名稱節點使用的 Rack Awareness 數據來改變數據節點提供列表。規則就是對于每塊數據 3 份拷貝,總有兩份存在同一個機架上,另外一份則必須放到另一個機架上。所以給 Client 的列表都必須遵從這個規則。在 Client 將 File.txt 的“Block A”部分寫入集群之前,Client 還期待知道所有的目標數據節點是否已準備就緒。它將取出列表中給 Block A 準備的第一個數據節點,打開 TCP

11、 50010 協議,并告訴數據節點,注意!準備好接收 1 塊數據,這里還有一份列表包括了數據節點 5 和數據節點 6,確保他們同樣已準備就緒。然后再由 1 傳達到 5,接著 5 傳達到 6。數據節點將從同樣的 TCP 通道中響應上一級令,只到 Client 收到原始數據節點 1的的“就緒”。只到此刻,Client 才真正的準備在集群中加載數據塊。HDFS 載入通道當數據塊寫入集群后,3 個(當然數據節點個數參照上文的設置)數據節點將打開一個同步通道。這就意味著,當一個數據節點接收到數據后,它同時將在通道中給下一個數據節點送上一份拷貝。這里同樣是一個借助 Rack Awareness 數據提升集

12、群性能的例子。注意到沒有,第二個和第三個數據節點在同一個機架中,這樣他們之間的傳輸就獲得了高帶寬和低延時。只到這個數據塊被的寫入 3 個節點中,下一個就才會開始。HDFS 通道載入當 3 個節點都的接收到數據塊后,他們將給名稱節點個“Block Received”報告。并向通道返回“Success”消息,然后關閉TCP 回話。Client 收到接收的消息后會報告給名稱節點數據已接收。名稱節點將會更新它元數據中的節點位置信息。Client將會開啟下一個數據塊的處理通道,只到所有的數據塊都寫入數據節點。Hadoop 會使用大量的網絡帶寬和。代表性的處理一些 TB 級別的文件。使用 Hadoop 的

13、默認配置,每個文件都會被三份。也就是 1TB 的文件將耗費 3TB 的網絡傳輸及 3TB 的磁盤空間。Client 寫入跨度集群每個塊的管道完成后的文件被寫入到集群。如預期的文件被散布在整個集群的,每臺有一個相對較小的部分數據。個文件的塊數越多,的的數據有可能。的 CPU和磁盤驅動器,意味著數據能得到的并行處理能力和更快的結果。這是建造大型的、寬的集群的背后的,為了數據處理、更快。當數增加和集群增寬時,我們的網絡需要進行適當的擴展。擴展集群的另法是深入。就是在你的擴展個磁盤驅動器和的 CPU,而不是增加的數量。在擴展深度上,你把的注意力集中在用較少的來滿足的網絡 I/O 需求上。在這個模型中,

14、你的 Hadoop 集群如何過渡到萬兆以太網節點成為一個重要的考慮因素。名稱節點名稱節點包含所有集群的文件系統元數據和監督健康狀況的數據節點以及協調對數據的。這個名字節點是 HDFS 的器。它本身不擁有任何集群數據。這個名稱節點只知道塊一個文件,并在這些塊位于集群中。數據節點每 3 秒通過 TCP 信號交換向名稱節點檢測信號,使用相同的端定義名稱節點守護進程,通常 TCP 9000。每 10 個檢測信號作為一個塊報告,那里的數據節點告知它的所有塊的名稱節點。塊報告名稱節點構建它的元數據和確保第三塊副本存在不同的機架上存在于不同的節點上。名稱節點是 Hadoop 分布式文件系統(HDFS)的一個

15、關鍵組件。沒有它,客戶端將無法從 HDFS 寫入或文件,它就不可能去調度和執行 Map Reduce 工作。正因為如此,電源、熱插拔風扇、冗余網卡連接等等來裝備名稱節點和配置高度冗余的企業級服務器使一個不錯的想法。重新副本如果名稱節點停止從一個數據節點接收檢測信號,假定它已經,任何數據必須也消失了。基于塊從節點接受到報告,這個名稱節點知道哪個副本連同節點塊,并可決定重新這些塊到其他數據節點。它還將參考機架感知數據,以保持在一個機架內的兩個副本。考慮一下這個場景,整個機架的服務器網絡脫落,也許是因為一個機架交換機故障或電源故障。這個名稱節點將開始指示集群中的其余節點重新該機架中丟失的所有數據塊。

16、如果在那個機架中的每個服務器有 12TB 的數據,這可能是數百個 TB 的數據需要開始穿越網絡。名稱節點Hadoop 服務器被稱為名稱節點。一個常見的誤解是,這個為名稱節點提供了一個高可用性的備份,這并非如此。名稱節點偶爾連接到名字節點,并獲取一個副本的名字節點內存中的元數據和文件用于元數據。名稱節點在一個新的文件集中結合這些信息,并將其遞送回名稱節點,同時自身保留一份復本。如果名稱節點,名稱節點保留的文件可用于恢復名稱節點。從 HDFS 客戶端當客戶想要從 HDFS一個文件,它再一次咨詢名稱節點,并要求提供文件塊的位置??蛻魪拿總€塊列表選擇一個數據節點和用 TCP 的 50010 端口一個塊

17、。直到前塊完成,它才會進入下一個塊。從 HDFS 中數據節點有些情況下,一個數據節點守護進程本身需要從 HDFS 中數據塊。一種這樣的情況是數據節點被要求處理本地沒有的數據,因此它必須從網絡上的另一個數據節點檢索數據,在它開始處理之前。另一個重要的例子是這個名稱節點的 Rack Awareness 認知提供了最佳的網絡行為。當數據節點詢問數據塊里名稱節點的位置時,名稱節點將檢查是否在同一機架中的另一種數據節點有數據。如果是這樣,這個名稱節點從檢索數據里提供了機架上的位置。該流程不需要遍歷兩個以上的交換機和擁擠的找到另一個機架中的數據。在機架上檢索的數據更快,數據處理就可以開始的更早,,工作完成

18、得更快。Map Task現在 file.txt 在集群中蔓延,我有機會提供極其快速和高效的并行處理的數據。包含 Hadoop 的并行處理框架被稱為 MapReduce,模型中命名之后的兩個步驟是 Map 和 Reduce。第一步是 Map 過程。這就是我們同時要求我們的他們本地的數據塊上來運行一個計算。在這種情況下,我們要求我們的對“Refund”這個詞在 File.txt 的數據塊中出現的次數進行計數。開始此過程,客戶端提交 Map Reduce 作業的 Job Tracker,詢問“多少次在 File.txt 中出現 Refund”(意譯 Java 代碼)。Job Tracker名稱節點了

19、解哪些數據節點有 File.txt 塊。Job Tracker 提供了這些節點上運行的 Task Tracker 與 Java 代碼需要在他們的本地數據上執行的 Map 計算。這個 Task Tracker 啟動一個 Map 任務和監視任務進展。這 Task Tracker 提供了檢測信號并向Job Tracker 返回任務狀態。每個 Map 任務完成后,每個節點在其臨時本地中其本地計算的結果。這被稱作“中間數據”。 下一步將通過網絡傳輸此中間數據到 Reduce 任務最終計算節點上運行。Map Task 非本地雖然 Job Tracker 總是試圖選擇與當地數據做 Map task 的節點,

20、但它可能并不總是能夠這樣做。其中一個可能是因為所有的節點與本地數據,已經有太多的其他任務運行,并且不能接受了。在這種情況下, Job Tracker 將查閱名稱節點的 Rack Awareness 知識,可推薦同一機架中的其他節點的名稱節點。作業將把這個任務交給同一機架中的一個節點,節點去尋找的數據時,它需要的名稱節點將指示其機架中的另一個節點來獲取數據。Reduce Task 從 Map Tasks 計算接收到的數據第二階段的 Map Reduce 框架稱為 Reduce。上的 Map 任務已經完成了和生成它們的中間數據。現在我們需要收集所有的這些中間數據,組合并提純以便進一步處理,這樣我們

21、會有一個最終結果。Job Tracker 在集群中的任何一個節點上開始一個 Reduce 任務,并指示 Reduce 任務從所有已完成的 Map 任務中獲取中間數據。Map 任務可能幾乎同時應對 Reducer,導致讓你一下子有大量的節點TCP 數據到一個節點。這種流量狀況通常被稱為“Incast”或者“fan-in”。對于網絡處理大量的 incast 條件,其重要的網絡交換機擁有精心設計的內部流量管理能力,以及足夠的緩沖區(不太大也不能太?。?。Reducer 任務現在已經從 Map 任務里收集了所有的中間數據,可以開始最后的計算階段。在本例中,我們只需添加出現“Refund”這個詞的總數,并

22、將結果寫入到一個名為 Results 的 txt 文件里。這個名為 Results 的 txt 文件,被寫入到 HDFS 以下我們已經涵蓋的進程中,把文件分成塊,流水線這些塊等。當完成時,客戶機可以從 HDFS 和被認為是完整的工作里Results.txt。我們簡單的字數統計工作并導致大量的中間數據在網絡上傳輸。然而,其他工作可能會產生大量的中間數據,比如對 TB 級數據進行排序。如果你是一個勤奮的網絡管理員,你將了解關于 Map Reduce 和你的集群將運行的作業類型,以及作業類型如何影響你的網絡流量。如果你是一個 Hadoop 網絡明星,你甚至能夠提出更好的代碼來解決 Map Reduce 任務,以優化網絡的性能,從而加快工作完工時間。不平衡的 Hadoop 集群Hadoop 可以為你的組織提供一個真正的,它讓你身邊的數據開發出了很多之前未

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論