天天看點

《Hadoop與大資料挖掘》一2.1 Hadoop概述

本節書摘來華章計算機《Hadoop與大資料挖掘》一書中的第1章 ,第1.1節,張良均 樊 哲 位文超 劉名軍 許國傑 周 龍 焦正升 著 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

2.1.1 Hadoop簡介

随着現代社會的發展,各種資訊資料存量與增量都非常大,很多情況下需要我們能夠對TB級,甚至PB級資料集進行存儲和快速分析,然而單機的計算機,無論是硬碟存儲、網絡IO、計算CPU還是記憶體都是非常有限的。針對這種情況,Hadoop應運而生。

那麼,Hadoop是什麼呢?我們可以很容易在一些比較權威的網站上找到它的定義,例如:Hadoop是一個由Apache基金會所開發的分布式系統基礎架構,它可以使使用者在不了解分布式底層細節的情況下開發分布式程式,充分利用叢集的威力進行高速運算和存儲。

從其定義就可以發現,它解決了兩大問題:大資料存儲、大資料分析。也就是Hadoop的兩大核心:HDFS和MapReduce。

HDFS(Hadoop Distributed File System)是可擴充、容錯、高性能的分布式檔案系統,異步複制,一次寫入多次讀取,主要負責存儲。

MapReduce為分布式計算架構,主要包含map(映射)和reduce(歸約)過程,負責在HDFS上進行計算。

要深入學習Hadoop,就不得不提到Google的3篇相關論文,也就是Hadoop的基礎理論。

2003年發表的《The Google File System》,奠定了“首個商用的超大型分布式檔案系統”,進而驗證這種分布式檔案系統架構是可行的。

2004年發表的《MapReduce: Simplifed Data Processing on Large Clusters》,汲取了函數式程式設計設計思想,倡導把計算移動到資料思想,該思想的應用大大加快了資料的處理分析。

2006年發表的《Bigtable: A Distributed Storage System for Structured Data》,這一論文同樣也是告訴大家,這種分布式資料庫的架構是可行的。

說到這裡,我們來簡單了解下Hadoop的發展曆史,如圖2-1所示。

《Hadoop與大資料挖掘》一2.1 Hadoop概述

2002~2004年,第一輪網際網路泡沫剛剛破滅,很多網際網路從業人員都失業了。我們的“主角”Doug Cutting也不例外,他隻能寫點技術文章賺點稿費來養家糊口。但是Doug Cutting不甘寂寞,懷着對夢想和未來的渴望,與他的好朋友Mike Cafarella一起開發出一個開源的搜尋引擎Nutch,并曆時一年把這個系統做到能支援億級網頁的搜尋。但是當時的網頁數量遠遠不止這個規模,是以兩人不斷改進,想讓支援的網頁量再多一個數量級。

在2003年和2004年,Google分别公布了GFS和MapReduce兩篇論文。Doug Cutting 和Mike Cafarella發現這與他們的想法不盡相同,且更加完美,完全脫離了人工運維的狀态,實作了自動化。

在經過一系列周密考慮和詳細總結後,2006年,Dog Cutting放棄創業,随後幾經周折加入了Yahoo公司(Nutch的一部分也被正式引入),機緣巧合下,他以自己兒子的一個玩具大象的名字Hadoop命名了該項目。

當系統進入Yahoo以後,項目逐漸發展并成熟了起來。首先是叢集規模,從最開始幾十台機器的規模發展到能支援上千個節點的機器,中間做了很多工程性質的工作; 然後是除搜尋以外的業務開發,Yahoo逐漸将自己廣告系統的資料挖掘相關工作也遷移到了Hadoop上,使Hadoop系統進一步成熟化了。

2007年,紐約時報在100個亞馬遜的虛拟機伺服器上使用Hadoop轉換了4TB的圖檔資料,更加加深了人們對Hadoop的印象。

在2008年的時候,一位Google的工程師發現要把當時的Hadoop放到任意一個叢集中去運作是一件很困難的事情,是以就與幾個好朋友成立了一個專門商業化Hadoop的公司Cloudera。同年,Facebook團隊發現他們很多人不會寫Hadoop的程式,而對SQL的一套東西很熟,是以他們就在Hadoop上建構了一個叫作Hive的軟體,專門用于把SQL轉換為Hadoop的MapReduce程式。

2011年,Yahoo将Hadoop團隊獨立出來,成立了一個子公司Hortonworks,專門提供Hadoop相關的服務。

說了這麼多,那Hadoop有哪些優點呢?

Hadoop是一個能夠讓使用者輕松架構和使用的分布式計算的平台。使用者可以輕松地在Hadoop上開發和運作處理海量資料的應用程式。其優點主要有以下幾個。

高可靠性:Hadoop按位存儲和處理資料的能力值得人們信賴。

高擴充性:Hadoop是在可用的計算機集簇間配置設定資料并完成計算任務的,這些集簇可以友善地擴充到數以千計的節點中。

高效性:Hadoop能夠在節點之間動态地移動資料,并保證各個節點的動态平衡,是以處理速度非常快。

高容錯性:Hadoop能夠自動儲存資料的多個副本,并且能夠自動将失敗的任務重新配置設定。

低成本:與一體機、商用資料倉庫以及QlikView、Yonghong Z-Suite等資料集市相比,Hadoop是開源的,項目的軟體成本是以會大大降低。

Hadoop帶有用Java語言編寫的架構,是以運作在Linux生産平台上是非常理想的,Hadoop 上的應用程式也可以使用其他語言編寫,比如C++。