云計(jì)算的大趨勢(shì)已毋庸置疑,而正當(dāng)它逐漸被企業(yè)認(rèn)識(shí)甚至開始部署時(shí),業(yè)界領(lǐng)袖們又將目光瞄向了下一個(gè)目標(biāo)——大數(shù)據(jù)。
不同的數(shù)據(jù)廣泛存在于企業(yè)的IT系統(tǒng)中,是企業(yè)發(fā)展的核心,一切的IT系統(tǒng)發(fā)展都有賴于數(shù)據(jù)。隨著IT行業(yè)的發(fā)展以及企業(yè)對(duì)數(shù)據(jù)管理要求不斷的進(jìn)步,數(shù)據(jù)管理的“智能”趨勢(shì)已經(jīng)銳不可當(dāng),智能的數(shù)據(jù)管理正在成為所有企業(yè)所追求的共同發(fā)展目標(biāo)。
隨著人們還在追尋云計(jì)算的定義時(shí),大量的數(shù)據(jù)因有云計(jì)算的存在,數(shù)據(jù)從以往分布式存在轉(zhuǎn)變成現(xiàn)在的集中式存在;從以往結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)變成非結(jié)構(gòu)化數(shù)據(jù),像文件、照片、視頻、電子郵件或社交網(wǎng)絡(luò)通訊。這種改變可以從大型存儲(chǔ)系統(tǒng)的需求增加看出,企業(yè)信息化與IT系統(tǒng)的核心發(fā)生實(shí)質(zhì)的轉(zhuǎn)變:計(jì)算能力不再是評(píng)價(jià)的主要標(biāo)準(zhǔn),對(duì)信息與數(shù)據(jù)的掌控是CIO最迫切的要求。
據(jù)Gartner的報(bào)告顯示,2010年全球基于控制器的外置(ECB)磁盤存儲(chǔ)收入比2008年的高位水平超出了14億美元。2010年ECB存儲(chǔ)收入超過194億美元,比2009年的165億美元高出了18.1%1。而同樣基于Gartner的數(shù)據(jù),2010年第四季度全球服務(wù)器市場(chǎng)出貨量增長(zhǎng)6.5%,營(yíng)收增長(zhǎng)16.4%2。自2010年開始,企業(yè)在服務(wù)器上的投資年均增幅已經(jīng)開始逐漸小于在外部磁盤存儲(chǔ)上的投資(主要是數(shù)據(jù)中心的網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)),存儲(chǔ)開始超越服務(wù)器成為IT投資主要增長(zhǎng)點(diǎn)。
正因如此,有效的數(shù)據(jù)分析以及管理將會(huì)是云計(jì)算未來成功的一個(gè)關(guān)鍵因素。亞馬遜剛剛公報(bào)正準(zhǔn)備在數(shù)據(jù)分析項(xiàng)目ParAccel進(jìn)行一次大手筆的投資,ParAccel是一間專門處理數(shù)據(jù)分析的公司,他們以數(shù)據(jù)列為關(guān)注對(duì)象進(jìn)行大規(guī)模數(shù)據(jù)分析工作,而不是像傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)那樣以行為數(shù)據(jù)單位。單從這一點(diǎn)上看,這一理念與惠普、EMC 和 IBM 的 Vertica,Greenplum和Netezza在處理大規(guī)模數(shù)據(jù)時(shí)的思路很是相像。
在軟件產(chǎn)業(yè)方面,不同的開發(fā)環(huán)境也應(yīng)運(yùn)而生,如Google App. Engine提供了接口和免費(fèi)的運(yùn)算及儲(chǔ)存資源,讓提供者開發(fā)各種web 服務(wù)。Google也開發(fā)了許多云計(jì)算的技術(shù)與架構(gòu),如MapReduce以分散或運(yùn)算提供整合的運(yùn)算資源以及減少運(yùn)算時(shí)間、Google File System 將大量而分散的儲(chǔ)存空間整合為一個(gè)可靠的儲(chǔ)存媒介、BigTable提供高效率的分布式數(shù)據(jù)庫(kù)。這些技術(shù)及架構(gòu)都有一個(gè)特點(diǎn),就是讓服務(wù)開發(fā)人員不用考慮在這些分布式系統(tǒng)上數(shù)據(jù)要怎么放置、運(yùn)算要怎么切割,只需要專注在服務(wù)的開發(fā)就可以了,而數(shù)據(jù)與運(yùn)算的切割及分散就交給云計(jì)算的架構(gòu)來處理,可說是大大增加了開發(fā)服務(wù)的速度。
Hadoop計(jì)劃
Hadoop是Apache軟件基金會(huì) (Apache Software Foundation) 底下的開放原始碼計(jì)劃 (Open source project),最初是做為Nutch這個(gè)開放原始碼的搜索引擎的一部份。Hadoop是以Java寫成,可以提供大量資料的分布式計(jì)算環(huán)境,而且Hadoop的架構(gòu)是由Google發(fā)表的BigTable及Google File System等文章提出的概念實(shí)做而成,所以跟Google內(nèi)部使用的云計(jì)算架構(gòu)相似。目前Yahoo!及Cloudera等公司都有開發(fā)人員投入Hadoop的開發(fā)團(tuán)隊(duì),也有將近一百個(gè)公司或組織公開表示使用Hadoop做為云計(jì)算平臺(tái),Google及IBM也使用Hadoop平臺(tái)為教育合作環(huán)境。
Hadoop中包括許多子計(jì)劃,其中HadoopMapReduce如同Google MapReduce,提供分布式計(jì)算環(huán)境、Hadoop Distributed File System如同Google File System,提供大量?jī)?chǔ)存空間、HBase是一個(gè)類似BigTable的分布式數(shù)據(jù)庫(kù),還有其他部份可用來將這三個(gè)主要部份連結(jié)在一起,方便提供整合的云端服務(wù)。
MapReduce
MapReduce是Google提出的一個(gè)分布式程序框架,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。讓服務(wù)開發(fā)者可以很簡(jiǎn)單的撰寫程序,利用大量的運(yùn)算資源,加速處理龐大的數(shù)據(jù)量,一個(gè)MapReduce的運(yùn)算工作可以分成兩個(gè)部份—Map(映像)和Reduce(化簡(jiǎn)),大量的數(shù)據(jù)在運(yùn)算開始的時(shí)候,會(huì)被系統(tǒng)轉(zhuǎn)換成一組組 (key, value) 的序?qū)Σ⒆詣?dòng)切割成許多部份,分別傳給不同的Mapper來處理,Mapper處理完成后也要將運(yùn)算結(jié)果整理成一組組 (key, value) 的序?qū)?,再傳給Reducer整合所有Mapper的結(jié)果,最后才能將整體的結(jié)果輸出。
再更仔細(xì)地介紹流程中每一步的細(xì)節(jié),一開始需要建立一個(gè)JobConf類別的對(duì)象,用來設(shè)定運(yùn)算工作的內(nèi)容,如setMapperClass/setReducerClass設(shè)定 Mapper及Reducer 的類別,setInputFormat/setOutputFormat設(shè)定輸出輸入數(shù)據(jù)的格式, setOutputKeyClass / setOutputValueClass設(shè)定輸出數(shù)據(jù)的類型,設(shè)定完成后,依設(shè)定內(nèi)容提交運(yùn)算工作。數(shù)據(jù)源會(huì)依InputFormat的設(shè)定取得,并分割轉(zhuǎn)換為一組組的 (key, value) 序?qū)?,交由不同的Mapper同時(shí)進(jìn)行運(yùn)算,Mapper要將運(yùn)算的結(jié)果輸出為一組組(key, value) 序?qū)?,也稱為中介數(shù)據(jù) (intermediate),系統(tǒng)會(huì)將這些暫時(shí)的結(jié)果排序 (sort) 并暫存起來,等到所有Mapper的運(yùn)算工作結(jié)束之后,依照不同的key值傳送給不同的Reducer匯整,所有同一key值的中介數(shù)據(jù)的value值,會(huì)放在一個(gè)容器 (container) 里傳給同一個(gè)Reducer處理,所以在Reducer中可以利用values.next()依序取得不同value值,快速地完成結(jié)果整理,再依OutputFormat的設(shè)定輸出為檔案。
進(jìn)行運(yùn)算的Mapper和Reducer會(huì)由系統(tǒng)會(huì)自動(dòng)指派不同的運(yùn)算節(jié)點(diǎn)擔(dān)任,所以程序設(shè)計(jì)時(shí)完全不用做數(shù)據(jù)和運(yùn)算的切割 (decomposition),運(yùn)算資源會(huì)由JobTracker分配到各個(gè)運(yùn)算節(jié)點(diǎn)上的TaskTracker,并指派不同的節(jié)點(diǎn)擔(dān)任Mapper和Reducer。
HDFS
Hadoop Distributed File System (HDFS) 將分散的儲(chǔ)存資源整合成一個(gè)具容錯(cuò)能力、高效率且超大容量的儲(chǔ)存環(huán)境,在Hadoop系統(tǒng)中大量的數(shù)據(jù)和運(yùn)算時(shí)產(chǎn)生的臨時(shí)文件,都是存放在這個(gè)分布式的文件系統(tǒng)上。
HDFS是master/slave架構(gòu),由兩種角色組成,Name node及data nodes,Name node負(fù)責(zé)文件系統(tǒng)中各個(gè)文件屬性權(quán)限等信息 (metadata, namespace) 的管理及儲(chǔ)存;而data node通常由數(shù)以百計(jì)的節(jié)點(diǎn)擔(dān)任,一個(gè)資料文件會(huì)被切割成數(shù)個(gè)較小的區(qū)塊 (block) 儲(chǔ)存在不同的data node上,每一個(gè)區(qū)塊還會(huì)有數(shù)份副本 (replica) 存放在不同節(jié)點(diǎn),這樣當(dāng)其中一個(gè)節(jié)點(diǎn)損壞時(shí),文件系統(tǒng)中的數(shù)據(jù)還能保存無(wú)缺,因此name node還需要紀(jì)錄每一份檔案存放的位置,當(dāng)有存取檔案的需求時(shí),協(xié)調(diào)data node負(fù)責(zé)響應(yīng);而有節(jié)點(diǎn)損壞時(shí),name node也會(huì)自動(dòng)進(jìn)行數(shù)據(jù)的搬遷和復(fù)制。
HDFS雖然沒有整合進(jìn)Linux kernel,只能透過Hadoop的dfs shell進(jìn)行檔案操作,或使用FUSE成為User space下的文件系統(tǒng),但Hadoop下的系統(tǒng)都與HDFS整合,做為數(shù)據(jù)儲(chǔ)存?zhèn)浞菁胺窒淼拿浇椤H缜懊嫣岬降腗apReduce在系統(tǒng)分配運(yùn)算工作時(shí),會(huì)將運(yùn)算工作分配到存放有運(yùn)算數(shù)據(jù)的節(jié)點(diǎn)上進(jìn)行,減少大量數(shù)據(jù)透過網(wǎng)絡(luò)傳輸?shù)臅r(shí)間。
HBase
HBase是架構(gòu)在HDFS上的分布式數(shù)據(jù)庫(kù),與一般關(guān)系數(shù)據(jù)庫(kù) (relational database) 不同。HBase使用列 (row) 和行 (column) 為索引存取數(shù)據(jù)值,因此查詢的時(shí)候比較像在使用map容器 (container);HBase的另一個(gè)特點(diǎn)是每一筆數(shù)據(jù)都有一個(gè)時(shí)間戳 (timestamp),因此同一個(gè)字段可依不同時(shí)間存在多筆數(shù)據(jù)。
一個(gè)HBase的數(shù)據(jù)表 (table) 是由許多row及數(shù)個(gè)column family組成,每個(gè)列都有一個(gè)row key做為索引;一個(gè)column family就是一個(gè)column label的集合 (set),里面可有很多組label,這些label可以視需要隨時(shí)新增,而不用重新設(shè)定整個(gè)數(shù)據(jù)表。在存取數(shù)據(jù)表的時(shí)候,通常就使用 (“row key”, “family:label”) 或 (“row key”, “family:label”, “timestamp”) 的組合取出需要的字段。
HBase為了方便分散數(shù)據(jù)和運(yùn)算工作,又將整個(gè)數(shù)據(jù)表分為許多區(qū)(Region),一個(gè)區(qū)是由一到數(shù)個(gè)列所組成的,可以分別存放在不同HBase主機(jī)上,這些存放region的主機(jī)就是region server,另外還有master server用來紀(jì)錄每一個(gè)區(qū)對(duì)應(yīng)的region server;master server也會(huì)自動(dòng)將不能提供服務(wù)的region server上的區(qū)重新分配到其他的region server上。
HBase也可供MapReduce的程序當(dāng)作數(shù)據(jù)源或儲(chǔ)存媒介,在HBase 0.20版之后提供了TableMapper及TableReducer的類別讓程序中的Mapper及Reducer類別繼承,可以把MapReuce中的 (key, value) 更方便地從HBase中取出和存入。
進(jìn)入大數(shù)據(jù)時(shí)代
大數(shù)據(jù)(Big Data)與云計(jì)算的勢(shì)頭已經(jīng)難以抵擋,大數(shù)據(jù)問題的出現(xiàn),主要是我們現(xiàn)在所面臨一個(gè)新的資料量級(jí)的來臨,企業(yè)數(shù)據(jù)從TB到PB,個(gè)人數(shù)據(jù)從GB到TB、從600MB的RMVB到了現(xiàn)在30GB的藍(lán)光1080P視頻。據(jù)分析現(xiàn)在我們處理的數(shù)據(jù),是1996年的180倍。這些都是我們對(duì)大數(shù)據(jù)處理分析的需求,如果說云計(jì)算將是我們IT的新方向,然而大數(shù)據(jù)必定是我們IT的新挑戰(zhàn)。
【原創(chuàng)內(nèi)容,版權(quán)歸中云網(wǎng)所有,如需轉(zhuǎn)載,請(qǐng)注明文章出處“中云網(wǎng)”及網(wǎng)址鏈接?!?/em>