Hadoop

转自:http://www.cc.ntu.edu.tw/chinese/epaper/0011/20091220_1106.htm


Hadoop計劃
Hadoop是Apache軟體基金會 (Apache Software Foundation) 底下的開放原始碼計劃 (Open source project),最初是做為Nutch這個開放原始碼的搜尋引擎的一部份。Hadoop是以java寫成,可以提供大量資料的分散式運算環境,而且Hadoop的架構是由Google發表的BigTable及Google File System等文章提出的概念實做而成,所以跟Google內部使用的雲端運算架構相似。目前Yahoo!及Cloudera等公司都有開發人員投入Hadoop的開發團隊,也有將近一百個公司或組織公開表示使用Hadoop做為雲端運算平台,Google及IBM也使用Hadoop平台為教育合作環境。
Hadoop中包括許多子計劃,其中Hadoop MapReduce如同Google MapReduce,提供分散式運算環境、Hadoop Distributed File System如同Google File System,提供大量儲存空間、HBase是一個類似 BigTable 的分散式資料庫 (見表一),還有其他部份可用來將這三個主要部份連結在一起,方便提供整合的雲端服務。

MapReduce
MapReduce是一個分散式程式框架,讓服務開發者可以很簡單的撰寫程式,利用大量的運算資源,加速處理龐大的資料量,一個MapReduce的運算工作可以分成兩個部份—Map和Reduce,大量的資料在運算開始的時候,會被系統轉換成一組組 (key, value) 的序對並自動切割成許多部份,分別傳給不同的Mapper來處理,Mapper處理完成後也要將運算結果整理成一組組 (key, value) 的序對,再傳給Reducer整合所有Mapper的結果,最後才能將整體的結果輸出 (見圖一)。


再更仔細地介紹流程中每一步的細節,一開始需要建立一個JobConf類別的物件,用來設定運算工作的內容,如 setMapperClass/setReducerClass設定 Mapper及Reducer 的類別,setInputFormat/setOutputFormat 設定輸出輸入資料的格式,  setOutputKeyClass / setOutputValueClass 設定輸出資料的類型,設定完成後,依設定內容提交運算工作。資料來源會依InputFormat的設定取得,並分割轉換為一組組的 (key, value) 序對,交由不同的Mapper同時進行運算,Mapper要將運算的結果輸出為一組組(key, value) 序對,也稱為中介資料 (intermediate),系統會將這些暫時的結果排序 (sort) 並暫存起來,等到所有Mapper的運算工作結束之後,依照不同的key值傳送給不同的Reducer彙整,所有同一key值的中介資料的value值,會放在一個容器 (container) 裡傳給同一個Reducer處理,所以在Reducer中可以利用values.next()依序取得不同value值,快速地完成結果整理,再依OutputFormat的設定輸出為檔案。
進行運算的Mapper和Reducer會由系統會自動指派不同的運算節點擔任,所以程式設計時完全不用做資料和運算的切割 (decomposition),運算資源會由JobTracker分配到各個運算節點上的TaskTracker,並指派不同的節點擔任Mapper和Reducer。

HDFS
Hadoop Distributed File System (HDFS) 將分散的儲存資源整合成一個具容錯能力、高效率且超大容量的儲存環境,在Hadoop系統中大量的資料和運算時產生的暫存檔案,都是存放在這個分散式的檔案系統上。
HDFS是master/slave架構,由兩種角色組成,Name node及data nodes,Name node負責檔案系統中各個檔案屬性權限等資訊 (metadata, namespace) 的管理及儲存;而data node通常由數以百計的節點擔任,一個資料檔會被切割成數個較小的區塊 (block) 儲存在不同的data node上,每一個區塊還會有數份副本 (replica) 存放在不同節點,這樣當其中一個節點損壞時,檔案系統中的資料還能保存無缺,因此name node還需要紀錄每一份檔案存放的位置,當有存取檔案的需求時,協調data node負責回應;而有節點損壞時,name node也會自動進行資料的搬遷和複製。
HDFS雖然沒有整合進Linux kernel,只能透過Hadoop的dfs shell進行檔案操作,或使用FUSE成為User space下的檔案系統,但Hadoop下的系統都與HDFS整合,做為資料儲存備份及分享的媒介。如前面提到的MapReduce在系統分配運算工作時,會將運算工作分配到存放有運算資料的節點上進行,減少大量資料透過網路傳輸的時間。

HBase
HBase是架構在HDFS上的分散式資料庫,與一般關聯式資料庫 (relational database) 不同。HBase使用列 (row) 和行 (column) 為索引存取資料值,因此查詢的時候比較像在使用map容器 (container);HBase的另一個特點是每一筆資料都有一個時間戳記 (timestamp),因此同一個欄位可依不同時間存在多筆資料。
一個HBase的資料表 (table) 是由許多row及數個column family組成,每個列都有一個row key做為索引;一個column family就是一個column label的集合 (set),裡面可有很多組label,這些label可以視需要隨時新增,而不用重新設定整個資料表 (見表二)。在存取資料表的時候,通常就使用 (‘row key’, ‘family:label’) 或 (‘row key’, ‘family:label’, ‘timestamp’) 的組合取出需要的欄位。


HBase為了方便分散資料和運算工作,又將整個資料表分為許多region,一個region是由一到數個列所組成的,可以分別存放在不同HBase主機上,這些存放region的主機就是region server,另外還有master server用來紀錄每一個region對應的region server;master server也會自動將不能提供服務的region server上的region重新分配到其他的region server上。
HBase也可供MapReduce的程式當作資料來源或儲存媒介,在HBase 0.20版之後提供了TableMapper及TableReducer的類別讓程式中的Mapper及Reducer類別繼承,可以把MapReuce中的 (key, value) 更方便地從HBase中取出和存入。

Web Interface
MapReduce的JobTracker、HDFS、及HBase都有各自的web監控介面,可以及時觀察目前每個運算工作的運作情況、檔案系統的容量、及資料表和region的使用情況, 讓系統管理者輕鬆地監控大量資源 (見圖二、圖三、圖四)。



 



 

結論
Hadoop是目前最常見且實際運用在大規模商業環境上的雲端運算平台之一,強大而完整的基礎架構可以減少大量的雲端架構開發的時間,大量部署時也相當迅速,不但有許多重量級的雲端運算服務提供者正在使用及投入開發,也與Google的雲端環境相似,使Hadoop成為教育訓練、學術研究及雲端服務開發的最佳平台。
雖然有Hadoop這麼便利的雲端運算環境,又有成功的雲端服務可以參考,然而在組織內部導入雲端運算的架構及文化時,仍需做好充分的規劃及時程表,不然將會影響原有服務的穩定及品質,不但不能享受雲端運算帶來的便利,反而徒然增加管理及營運成本,使雲端運算淪為失敗的行銷名詞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值