程式扎記: [ 深入雲計算 ] 初識 Hadoop

標籤

2013年10月27日 星期日

[ 深入雲計算 ] 初識 Hadoop

Preface: 
Hadoop 起源於 2002 年開始的 Apache Nutch, 他是 Apache Lucene 的子項目之一. 直到 2006 年, Hadoop 才逐漸成為一套完整而獨立的軟件, 並被正式命名. 當時最大的支持者是 Yahoo!. 2008 年初, Hadoop 開始應用到 Yahoo 以外的互聯網公司. Hadoop 並不是一個縮寫, 而是一個虛擬的名字. 該項目的創建者 Doug Cutting 是這樣解釋 Hadoop 的得名: 
Hadoop名稱來自於作者小孩的一個絨毛填充黃色大象玩具,而官方的吉祥物也採用了該圖案(下圖),主要原因在於開發這項套件的過程中作者需要為開套件提供一個代號方便溝通,而Hadoop這個名字具備了幾個特性,如相當容易拼字和發音,毫無意義、且沒有在任何地方使用過,因此雀屏中選.

Hadoop 的起源: 
MapReduce 編成思想是由 Google 工程師 Jeffrey Dean 於 2004 年提出來的, 與此同時, Google 也發表了 GFS, BigTable 等底層系統以應用 MapReduce 模型. 2007 年, Google 公司發布了Google's MapReduce Programming Model-Revised 論文, 在該論文中介紹了 Google MapReduce 模型以及 Sazwall 並行處理海量數據分析語言. Google 以 MapReduce 做為基石, 逐漸發展成全球互聯網的佼佼者. 然而也許出於技術保密的目的, 在該論文中並沒有透漏其 MapReduce 的實現細節. 

Hadoop 之父 Doug Cutting 開發出 Hadoop 是 MapReduce 的開源實現, 使得 MapReduce 技術能如此迅速的發展. 2006 年 Doug Cutting 獲邀加入 Yahoo 並專攻 Hadoop 項目並對其進行開發並於 2006 年 2 月, Hadoop 項目從 Nutch 項目中獨立出來, 並正式成為 Apache 組織中一個專注於 DFS 與 MapReduce 的開源項目. 同年 4 月, Hadoop 搜尋排序速度打敗了世界紀錄, 成為世界上最快的 TB 等級數據排序系統. 在一個 910 個節點上, Hadoop 僅僅用了 209 秒, 就完成了對 1TB 數據的排序! (上一屆花了 297 秒). 2008 年 11 月, Google 宣布它的 MapReduce 只用了 68 秒就完成了 1TB 數據的排序. 同時 Yahoo 團隊採用 Hadoop 對 1TB 數據進行排序只花了 62 秒. 

如今 Hadoop 不僅致力於應付廣大網絡流量的科學研究, 而且還涉及搜尋引擎, 廣告優化, 機器學習等領域, 並成為 IT 產業裡優秀的大數據平台. 

什麼是 Hadoop: 
Hadoop 是一個分布式處理的軟體框架, 主要處理大量數據並實現了 MapReduce 一樣的編程思想與架構, 能在大量計算機組成的叢集中運行海量資料並進行分布式計算. 它可以處理的數據等級能夠到達 PB 級別 (1PB = 1,000TB), 並可以讓應用程序在上千結點中進行分布式處理, 處理方式是 可靠的, 高效的, 並具備 動態擴充 能力. 
- Hadoop 是可靠的 
如果計算元素或者存儲數據失敗, 它可以啟動和維護多個工作數據副本, 確保失敗的節點能夠重新對數據進行分布式處理. Hadoop 中的 HDFS 分布式文件系統採用了備份恢復機制以及 MapReduce 中的任務採用了監控機制, 這保證了分布式處理的可靠性.

- Hadoop 是高效的 
Hadoop 的工作方式是平行運算, 採用這種方式可以加快數據處理. HDFS 中高效數據交互的實現和 MapReduce 中的 Local Data 處理方式, 體現了處理海量資料的具體實現.

- Hadoop 具備動態擴充能力 
Hadoop 能動態添加節點並可以處理不同的數據級別, 大到能夠處理 PB 級別的數據. 除此之外, Hadoop 是 Open Source Project, 任何人都可以放心的使用與擴充它而不太需要考慮費用問題. 目前 Hadoop 項目已經在超過 2000 個計算節點的叢集上進行過演示, 而它的目標是 10,000 個計算節點.

- Hadoop 支持的開發語言 
Hadoop 是使用 Java 語言開發, 因此具備跨平台的特性. 而在使用 Hadoop 時除了可以使用 Java 撰寫程式外, 其他的編程語言如 C++ 也支援.
File access can be achieved through the native Java API, the Thrift API to generate a client in the language of the users' choosing (C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml), the command-line interface, or browsed through the HDFS-UI webapp over HTTP.

- Hadoop 的組成 
Hadoop 主要的兩個部分是分布式儲存 HDFS 和 分布式計算 MapReduce. HDFS 是一個 Master/Slave 的結構, 就一般佈署來說, 在 master 上只運行一個 NameNode, 而在每一個 slave 上運行一個 DataNode. MapReduce 是一個編程模型, 用以進行大數據的計算. MapReduce 的名字源於這個模型中的兩項核心操作: Map 和 Reduce.
* Map: 把一組數據一對一映射為多組群數據,
* Reduce: 對多組群數據進行有序合併.
而 Map 與 Reduce 可以看成兩個函數, HDFS 與 MapReduce 會在之後深入介紹.

Hadoop 的族群: 
整個 Hadoop 的核心內容分別列舉如下: 
- HDFS 
分布式文件系統, 是 GFS 的開源實現.

- MapReduce 
分布式平行編成模型與程式執行框架, 是 Google 提出的 MapReduce 的開源實現.

- Common 
是整個 Hadoop 項目的核心, 包括一組分布式文件系統和通用 I/O 的組件與接口 (序列化, Java RPC 和持久化數據結構)

- Avro 
一種支援高校, 跨語言的 RPC 以及永久儲存數據的序列化實現.

- Pig 
一種數據流語言和運行環境, 用以檢索非常大的數據集, 運行在 MapReduce 和 HDFS 的叢集上.

- Hive 
一個分布式, 按列存儲的數據倉庫. Hive 管理 HDFS 中存儲的數據, 並提供基於 SQL 的查詢語言 (運行時引擎翻譯成 MapReduce 作業) 用以查詢數據.

HBase 
一個分布式, 按列存儲的數據庫. HBase 使用 HDFS 作為底層存儲, 同時支持 MapReduce 的批量式計算和點查詢 (隨機讀取).

Mahout 
一個在 Hadoop 上運行的 Machine Learning 框架與函式庫.

- ZooKeeper 
一個

Hadoop 的技術核心包括 HDFS, MapReduce, HBase, 它們分別是 Google 核心技術 GFS, MapReduce 與 BigTable 的開源實現. 

Supplement: 
初探Hadoop開放原始碼平台環境

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!