Hadoop自動化安裝和配置的問題在于隱藏了許多Hadoop組件協同工作的重要細節,本書介紹如何手動安裝和配置主要的Hadoop組件,以便高效使用Hadoop平臺。通過設置一個完全可運行的集群,可對Hadoop內部的運行機制產生更深入的了解,并且有助于你調試任何可能發生的問題。本書還介紹了保障基于Hadoop的大數據平臺安全的實現方案和最佳實踐,覆蓋Kerberos安全協議和Hadoop安全機制的設計,并包括在企業內部來確保Hadoop及其生態系統相關組件安全的詳細方案。
1. 手把手教你配置高效的Hadoop集群,充分利用Hadoop平臺的優勢。2. 為Hadoop生態系統實現強健的端到端的安全保障。
Danil Zburivsky 資深數據庫管理員,目前是全球數據基礎構架管理公司Pythian的咨詢師,其客戶涉及金融、娛樂以及通信領域,主要方向是創建各種Hadoop集群。研究興趣包括Python編程、機器學習等。
Sudheesh Narayanan 在大數據解決方案咨詢與實施領域具有豐富經驗的實踐者和技術戰略家。他在IT領域的經驗超過15年,涉及信息管理、商務智能、大數據分析及云應用和J2EE應用開發等。
譯者簡介
Danil Zburivsky 資深數據庫管理員,目前是全球數據基礎構架管理公司Pythian的咨詢師,其客戶涉及金融、娛樂以及通信領域,主要方向是創建各種Hadoop集群。研究興趣包括Python編程、機器學習等。
Sudheesh Narayanan 在大數據解決方案咨詢與實施領域具有豐富經驗的實踐者和技術戰略家。他在IT領域的經驗超過15年,涉及信息管理、商務智能、大數據分析及云應用和J2EE應用開發等。
譯者簡介
劉杰 中國科學院軟件所副研究員,具有多年Hadoop平臺研發與實施經驗,與團隊一起研發基于Hadoop的可視化大數據分析工具Haflow,該工具應用于醫療、交通等多個領域。研究方向包括企業數據集成、面向大數據的系統軟件、數據挖掘等。
沈鑫 畢業于同濟大學計算機科學與技術系,資深網絡工程師,從事網絡安全、管理信息系統的開發與維護,參與開發了多個相關的項目。興趣愛好是網絡安全技術與嵌入式技術。
第1章
構建Hadoop集群
Hadoop是一款免費開源的分布式存儲和計算平臺。在構建該平臺后,用戶可以使用商用硬件中的集群來存儲和處理大量數據。在過去的數年中,Hadoop已經成為大數據項目的事實標準。本章會講述以下內容:
選擇Hadoop集群硬件。
Hadoop發行版。
為Hadoop集群選擇操作系統。
本章會講解為Hadoop集群選擇和配置硬件的概念,還會介紹不同的Hadoop發行版(其數量每年都在增加)以及它們之間的異同點。
無論讀者是Hadoop管理員還是架構師,構建集群的第一步是確定使用硬件的類型以及成本,但是在讀者下單購買硬件準備大干一場之前還有一些必要的問題需要考慮。這些問題都與集群設計有關,比如集群需要存儲的數據量、數據增長率的估計、主要的數據訪問模式,集群是主要用于預定義的計劃任務,還是用于探索性數據分析的多租戶環境?Hadoop的架構和數據訪問模型具有極大的靈活性,它能夠承載不同類型的工作量,比如批處理海量數據或者配合諸如Impala這樣的項目進行實時分析。
某些集群更適合于特定類型的任務,因此在選擇硬件階段就應考慮到集群的設計以及目的,這是非常重要的。在處理由成百上千個服務器所組成的集群時,最初有關硬件和總體布局的決定會對集群的性能、穩定性以及對應的成本起著至關重要的作用。
1.1 選擇Hadoop集群硬件
Hadoop是可擴展的集群,它采用非共享系統處理大規模并行數據。Hadoop的總體概念是單個節點對于整個集群的穩定性和性能來說并不重要。根據這種設計理念,我們可以在單個節點上選擇能夠高效處理少量(相對于整體的數據量大小)數據的硬件并且在硬件層面也無需過分追求穩定性和冗余性。讀者可能已經知道,Hadoop集群由多種類型的服務器所組成。它們中有主節點,比如NameNode、備份NameNode以及JobTracker,還有稱為DataNode的工作節點。除了核心的Hadoop成員外,我們通常還會采用多種輔助服務器,比如網關、Hue服務器以及Hive元存儲服務器。典型的Hadoop集群結構如圖1-1所示。
圖1-1Hadoop集群的典型布局
這些類型的服務器在集群中各有分工,因此對于節點的硬件規格和可靠性要求也不盡相同。我們首先討論針對DataNode的不同硬件配置,隨后講解有關NameNode和JobTracker的典型配置。
1.1.1 選擇DataNode硬件
DataNode是Hadoop集群中的主要工作節點,它的作用主要有以下兩種:存儲分布式文件系統數據以及執行MapReduce任務。DataNode是Hadoop的主要存儲和計算資源。有些讀者可能認為既然DataNode在集群中扮演了如此重要的角色,我們就應該盡可能地使用最好的硬件。事實并非如此。在Hadoop的設計理念中將DataNode定義為“臨時工”,也就是說,服務器作為集群的一部分需要足夠高效地完成任務,同時在出現故障時替換的成本不會太過昂貴。在大型集群中的硬件故障頻率可能是核心Hadoop開發者所考慮的最為重要的因素之一。Hadoop通過將冗余實現從硬件遷移到了軟件解決了這一問題。
Hadoop提供了多種級別的冗余。每個DataNode只存儲了分布式文件系統文件的部分數據塊,同時這些分塊在不同節點中進行了多次復制,因此在單個服務器故障時,數據仍然能保證可訪問性。根據讀者選擇的配置,集群甚至能夠承受多個故障節點。除此之外,Hadoop還允許我們指定服務器位于機架上的位置并且在不同的機架上存儲多份數據副本,這樣即使在整個機架的服務器發生故障時也能極大地增加數據的可訪問性(盡管這并不能嚴格地保證)。這種設計理念意味著我們無需為Hadoop DataNode采用獨立磁盤冗余陣列(RAID)控制器。
我們可以為本地磁盤使用一種稱為簡單磁盤捆綁(JBOD)的配置來代替RAID。它為Hadoop的工作負載提供了更加出色的性能并且減少了硬件成本。由于冗余性是由分布式文件系統提供的,因此我們不必擔心單個磁盤發生故障。
存儲數據是DataNode的首要工作。它的第二個工作是作為數據處理節點運行自定義的MapReduce代碼。MapReduce作業有多種不同的任務組成,它們在多個DataNode中并列執行并且在所有子任務都完成后作業才能生成邏輯上的統一結果。
因此Hadoop需要在存儲和計算層面都提供冗余性。Hadoop通過在不同節點上重新執行失敗的任務來實現這點,這樣就不會擾亂整體作業。同樣它會跟蹤那些故障率較高、響應速度較慢的節點,最終這些節點會被列入到黑名單中并且從集群中剔除。
那么典型的DataNode需要配置何種硬件呢?在理想情況下,DataNode應該是一個平衡的系統,它應該擁有適量的磁盤存儲容量以及運行功率。定義“平衡的系統”和“適量的存儲容量”并不像聽起來那么容易。在我們嘗試構建具有可擴展性的最佳Hadoop集群時有需要考慮的因素。其中最重要的問題之一是集群的總存儲量以及集群存儲密度。這些參數關系密切。總存儲量相對比較容易進行估算。基本上只需要了解集群中容納的數據量就能夠解決問題。根據下面的步驟讀者可以估算集群中所需的存儲量。
1. 確定數據源:列舉所有已知的數據源并且確認是否需要引入所有或者部分數據。讀者應該保留群集總存儲量的15%~20%,甚至更多,這是為新數據源或者未知的數據增長預留的容量。
2. 估算數據增長率:每個確定的數據源都有對應的數據攝入率。舉例來說,讀者準備從OLTP數據庫中進行導出,我們可以清楚地估算出該數據源在特定時間段內所生成的數據量。當然,讀者也需要進行一些導出測試來獲得準確的數字。
3. 將估算的存儲量乘以副本因子(replication factor):到目前為止,我們所討論的都是可用存儲量。Hadoop通過將數據塊進行多次復制并將它們放置在集群中的不同節點中來實現分布式文件系統層面的冗余性。默認情況下,每個分塊都會進行3次復制。通過增加或者減少副本因子,讀者可以對該參數進行調整。將副本因子設置為1并不可取,因為這樣集群中就不存在任何的可靠性。我們首先應該獲取集群存儲量的估算值,然后將它乘以副本因子。如果讀者估算今年需要300TB的可用容量并且所設置的副本因子為3,那么我們所需的存儲量大約為900TB。
4. 考慮MapReduce臨時文件以及系統數據:MapReduce任務在映射(map)執行和化簡(Reduce)步驟之間會生成中間數據。這些臨時數據并不位于分布式文件系統中,因此讀者需要為臨時文件預留服務器磁盤總量的25%~30%。此外,還應該為操作系統預留單獨的磁盤分卷,但是操作系統的存儲要求通常并不重要。
確定所有可用以及原始的集群存儲量是選擇DataNode硬件標準的第一步。為了更進一步進行討論,我們將集群所有可用的存儲量稱為原始容量,從硬件角度來說這點是非常重要的。另一個重要的標準是數據密度,它是集群總存儲量與DataNode數量之間的商。通常我們有兩種選擇:采用大量配置低存儲密度的服務器或者使用少量具有高存儲密度的服務器。我們將對這兩者進行介紹同時加以比較。