Hadoop权威指南 _03_第I部分Hadoop基础知识_第1章初识Hadoop.
第I部分Hadoop基礎知識
第1章初識Hadoop.
比較喜歡這句極其形象的比喻。
“在古時候,人們用牛來拉重物。當一頭牛拉不動根圓木時,人們從來沒有考慮過要想方設法培育出一種更強壯的牛。同理,我們也不該想方設法打造什么超級計算機,而應該千方百計綜合利用更多計算機來解決問題。”
-葛蕾絲·霍珀(Grace Hopper)
?
1TB=1024GB
1PB=1024TB
1EB=1024PB
1ZB=1000EB
?
有句話說得好:“大數據勝于好算法。”意思是說對于某些應用(譬如根據以往的偏好來推薦電影和音樂),不論算法有多牛,基于小數據的推薦效果往往都不如基于大量可用數據的一般算法的推薦效果。
?
當然現在我們擁有這些大量的數據,所以如何存儲和分析這些數據,成了我們要討論和研究的。
?
經典問題:1TB的硬盤,其傳播速度為100MB/S,讀完整個硬盤中的數據至少得花2.5小時。怎么解決短時間內讀取完這1TB數據?
讀完整個硬盤中的數據需要更長時間,寫入數據就別提了。一個很簡單的減少讀取時間的辦法是同時從多個硬盤上讀數據。試想,如果我們有100個硬盤,每個硬盤存儲1%的數據,并行讀取,那么不到兩分鐘就可以讀完所有數據。
僅使用硬盤容量的1%似乎很浪費。但是我們可以存儲100 個數據集,每個數據集1TB,并實現共享硬盤的讀取。可以想象,用戶肯定很樂于通過硬盤共享來縮短數據分析時間;并且,從統計角度來看,用戶的分析工作都是在不同時間點進行的,所以彼此之間的干擾并不太大。
雖然如此,但要對多個硬盤中的數據并行進行讀/寫數據,還有更多問題要解決。
第一個需要解決的是硬件故障問題。一旦開始使用多個硬件,其中個別硬件就很有可能發生故障。為了避免數據丟失,最常見的做法是復制(replication):系統保存數據的復本(replica),一旦有系統發生故障,就可以使用另外保存的復本。例如,冗余硬盤陣列(RAID)就是按這個原理實現的,另外,Hadoop 的文件系統(Hadoop Distributed FileSystem, HDFS)也是一類,不過它采取的方法稍有不同,詳見后文的描述。
第二個問題是大多數分析任務需要以某種方式結合大部分數據來共同完成分析,即從一個硬盤讀取的數據可能需要與從另外99個硬盤中讀取的數據結合使用。各種分布式系統允許結合不同來源的數據進行分析,但保證其正確性是一個非常大的挑戰。MapReduce提出.個編程模型,該模型抽象出這些硬盤讀/寫問題并將其轉換為對一個數據集(由鍵-值對組成)的計算。后文將詳細討論這個模型,這樣的計算由map和reduce兩部分組成,而且只有這兩部分提供對外的接口。與HDFS類似,MapReduce自身也有很高的可靠性。
簡而言之,Hadoop 為我們提供了一個可靠的且可擴展的存儲和分析平臺。此外,由于Hadoop運行在商用硬件上且是開源的,因而可以說Hadoop的使用成本是在可承受范圍內的。
?
我的理解:也就是說既然1TB的文件一臺機器的話,讀取需要2.5小時,那么,我們用100臺機器去進行讀取,每臺機器讀取其百分之一的數據,并且100臺機器同時進行讀取,那么時間會減少至1.5分鐘。不過由于是100臺機器,我們不敢確認100臺機器永遠不會出錯,萬一某臺機器宕機,數據就會丟失,這里我們采用復制的方法,如果這臺機器宕機,那么我們就使用保存的副本進行讀取。那么這分散的100份數據如何結合使用,也就到了我們的分布式計算框架MapReduce.
?
從MapReduce 的所有長處來看,它基本上是一個批處理系統,并不適合交互式分析。你不可能執行一條查詢并在幾秒內或更短的時間內得到結果。典型情況下,執行查詢需要幾分鐘或更多時間。因此MapReduce更適合那種沒有用戶在現場等待查詢結果的離線使用場景。
?
隨著Hadoop的發展,已經超越了批處理本身,實際上,名詞"Hadoop" 有時被用于指代一個更大的、多個項目組成的生態系統,而不僅僅是HDFS和MapReduce。這些項目都屬于分布式計算和大規模數據處理范疇。這些項目中有許多都是由Apache軟件基金會管理,該基金會為開源軟件項目社區提供支持,其中包括最初的HTTP server項目(基金會的名稱也來源于這個項目)。
如 HBase : 一種使用HDFS做底層存儲的鍵值存儲模型。
???????YARN :集群管理系統
???????等等
?
無論Hadoop上出現了多少不同的處理框架,就批處理而言,MapReduce 仍然有著一席之地。 MapReduce提出的一些概念更具有通用性(例如, 輸入格式、數據集分片等),因此最好是能夠了解MapReduce的工作機制。
這段話也說出了為什么用一章去寫MapReduce.
?
根據系統之間差異提出問題,
1.為什么不能用配有大量硬盤的數據庫來進行大規模數據分析?我們為什么需要Hadoop?
這兩個問題的答案來自于計算機硬盤的另一個發展趨勢:尋址時間的提升遠遠不敵于傳輸速率的提升。尋址是將磁頭移動到特定硬盤位置進行讀/寫操作的過程。它是導致硬盤操作延遲的主要原因,而傳輸速率取決于硬盤的帶寬。
如果數據訪問模式中包含大量的硬盤尋址,那么讀取大量數據集就必然會花更長的時間(相較于流數據讀取模式,流讀取主要取決于傳輸速率)。另方面,如果數據庫系統只更新一小部分記錄,那么傳統的B樹(關系型數據庫中使用的這種數據結構,受限于尋址的速率)就更有優勢。但數據庫系統如果有大量數據更新時,B樹的效率就明顯落后于MapReduce, 因為需要使用“排序/合并" (sort/merge)來重建數據庫。
簡單來說MapReduce 適合一次寫入、多次讀取數據的應用,關系型數據庫則更適合持續更新的數據集。
?
?
Hadoop盡量在計算節點上存儲數據,以實現數據的本地快速訪問。“數據本地化(data locality)特性是Hadoop數據處理的核心,并因此而獲得良好的性能。意識到網絡帶寬是數據中心環境最珍貴的資源(到處復制數據很容易耗盡網絡帶寬)之后,Hadoop通過顯式網絡拓撲結構來保留網絡帶寬。注意,這種排列方式并沒有降低Hadoop對計算密集型數據進行分析的能力。
MapReduce有三大設計目標:(1)為只需要短短幾分鐘或幾個小時就可以完成的作業提供服務; (2)運行于同一個內部有高速網絡連接的數據中心內; (3)數據中心內的計算機都是可靠的、專門的硬件。
?
總結
以上是生活随笔為你收集整理的Hadoop权威指南 _03_第I部分Hadoop基础知识_第1章初识Hadoop.的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop权威指南 _02大体目录
- 下一篇: Scala _11SparkWordCo