HDFS集群是主從架構(gòu),它由一臺Namenode節(jié)點(Master)和多臺Datanode節(jié)點(Slaver)構(gòu)成。Namenode節(jié)點和Datanode節(jié)點都是標(biāo)準(zhǔn)的x86。Datanode節(jié)點采用DAS存儲的方式,即x86內(nèi)置多塊大容量硬盤,Datanode節(jié)點可以多達(dá)上千臺。
HDFS通常用于存儲大文件,在HDFS中每個文件都被切割為固定大小的數(shù)據(jù)塊,然后被分散存放于多臺Datanode的硬盤上。并且每個數(shù)據(jù)塊都會有副本存放于遠(yuǎn)端機架的Datanode上,副本數(shù)一般設(shè)置為三個。Namenode節(jié)點不存放實際的文件,而只存放整個文件系統(tǒng)的目錄樹等元數(shù)據(jù)。當(dāng)客戶端需要訪問存儲于HDFS的某個文件時,首先需要訪問Namenode節(jié)點,以取得文件存放的位置信息(哪幾臺Datanode,以及在 Datanode硬盤上的具體地址),然后根據(jù)這些目的地址對各Datanode上存放的數(shù)據(jù)并行地進(jìn)行訪問。
HDFS的這種分布式存儲架構(gòu),主要有幾個好處:1、當(dāng)存儲空間不夠時,只要簡單增加Datanode節(jié)點,而系統(tǒng)自動會把數(shù)據(jù)塊分配到新Datanode節(jié)點上,而無需人工干預(yù)。從而使得Hadoop集群存儲的擴展性非常好。2、當(dāng)客戶訪問某一文件時,由于該文件存放于多臺設(shè)備上,因此是由多臺Datanode并行處理的,這樣大大增加了整個系統(tǒng)的吞吐量。3、HDFS的數(shù)據(jù)都有多個副本,HDFS 系統(tǒng)在后臺自動檢測數(shù)據(jù)的一致性,并能在發(fā)生錯誤時,自動恢復(fù)數(shù)據(jù),因此系統(tǒng)有很好的可用性。4、由于Hadoop中硬盤是順序讀寫的,因此讀寫硬盤的性能很好。
但是需要注意的是:Namenode節(jié)點為了加快對客戶端的響應(yīng)速度,是把文件目錄樹等元數(shù)據(jù)緩存于主內(nèi)存中的,因此整個文件系統(tǒng)的容量受限于Namenode節(jié)點的內(nèi)存大小,所以說理論上Hadoop集群的擴展性也并非無限的,但相對于傳統(tǒng)存儲系統(tǒng),Hadoop的容量已經(jīng)很大了,據(jù)說目前Facebook已經(jīng)有容量超過100PB的HDFS集群。
Hadoop Map/Reduce是一個使用簡易的軟件框架,基于它寫出來的應(yīng)用程序能夠運行在由上千個商用機器組成的大型集群上,并以一種可靠容錯的方式并行處理上T級別的數(shù)據(jù)集。
一個Map/Reduce 作業(yè)(job) 通常會把輸入的數(shù)據(jù)集切分為若干獨立的數(shù)據(jù)塊,由 map任務(wù)(task)以完全并行的方式處理它們??蚣軙ap的輸出先進(jìn)行排序, 然后把結(jié)果輸入給reduce任務(wù)。通常作業(yè)的輸入和輸出都會被存儲在文件系統(tǒng)中。 整個框架負(fù)責(zé)任務(wù)的調(diào)度和監(jiān)控,以及重新執(zhí)行已經(jīng)失敗的任務(wù)。
通常,Map/Reduce框架和分布式文件系統(tǒng)是運行在一組相同的節(jié)點上的,也就是說,計算節(jié)點和存儲節(jié)點通常在一起。這種配置允許框架在那些已經(jīng)存好數(shù)據(jù)的節(jié)點上高效地調(diào)度任務(wù),這可以使整個集群的網(wǎng)絡(luò)帶寬被非常高效地利用。
Map/Reduce框架由一個單獨的master JobTracker 和每個集群節(jié)點一個slave TaskTracker共同組成。master負(fù)責(zé)調(diào)度構(gòu)成一個作業(yè)的所有任務(wù),這些任務(wù)分布在不同的slave上,master監(jiān)控它們的執(zhí)行,重新執(zhí)行已經(jīng)失敗的任務(wù)。而slave僅負(fù)責(zé)執(zhí)行由master指派的任務(wù)。
這張是Hadoop的MapReduce任務(wù)調(diào)度圖:
這張是MapReduce的工作機制圖
MapReduce簡單的理解,就是Master節(jié)點(Jobtracker)把客戶端提交的任務(wù),分割成很多個小任務(wù),然后交給各Datanode節(jié)點(TaskTracker)并行執(zhí)行Map,Reduce計算,最終提交給客戶一個完整的結(jié)果。
我認(rèn)為MapReduce有幾個非常重要的的特點:1多節(jié)點并行計算,2大量需要計算的數(shù)據(jù)在本地,只有計算產(chǎn)生的中間結(jié)果或結(jié)果才在網(wǎng)絡(luò)里傳輸,大大減少了網(wǎng)絡(luò)流量。
最后再簡單介紹下Hadoop HBase和Hive。
HBase是構(gòu)架于HDFS之上的面向列的實時分布式數(shù)據(jù)庫(非關(guān)系型),HBase 的設(shè)計目的之一是支持高并發(fā)用戶數(shù)的高速讀寫訪問。這是通過兩方面來實現(xiàn)的。首先數(shù)據(jù)行被水平切分并分布到多臺服務(wù)器上,在大量用戶訪問時,訪問請求也被分散到了不同的服務(wù)器上,雖然每個服務(wù)器的服務(wù)能力有限,但是數(shù)千臺服務(wù)器匯總后可以提供極高性能的訪問能力。其次,HBase 設(shè)計了高效的緩存機制,有效提高了訪問的命中率,提高了訪問性能。
Hive 是一種建立在Hadoop 之上的數(shù)據(jù)倉庫架構(gòu)。它提供了:
• 一套方便的實施數(shù)據(jù)抽取(ETL)的工具。
• 一種讓用戶對數(shù)據(jù)描述其結(jié)構(gòu)的機制。
• 支持用戶對存儲在Hadoop 中的海量數(shù)據(jù)進(jìn)行查詢和分析的能力。
Hive 的基本特點是它采用HDFS 進(jìn)行數(shù)據(jù)存儲并利用MapReduce 框架進(jìn)行數(shù)據(jù)操作。所以從本質(zhì)上來說,Hive 就是個編譯器,它把用戶的操作(查詢或者ETL)變換成MapReduce任務(wù),利用MapReduce 框架執(zhí)行這些任務(wù)以對HDFS 上的海量數(shù)據(jù)進(jìn)行處理。
Hive 定義了一種簡單的類SQL 查詢語言HiveQL,讓熟悉SQL 的用戶可以非常容易的進(jìn)行查詢。與此同時,HiveQL 也允許熟悉MapReduce 框架的程序員在查詢中插入自定義的mapper和reducer 腳本以擴展Hive 內(nèi)嵌的功能,完成更復(fù)雜的分析。
二、Oracle Exadata架構(gòu)
介紹完Hadoop 后,我們再來看一下Oracle Exadata的架構(gòu):
如圖中所示,Oracle Exadata是由計算節(jié)點和存儲節(jié)點構(gòu)成,圖上層為計算節(jié)點,下層為存儲節(jié)點,計算節(jié)點和存儲節(jié)點均為X86服務(wù)器,存儲節(jié)點是X86服務(wù)器直聯(lián)存儲(DAS)的設(shè)計,計算節(jié)點可以作Oracle RAC(HA,負(fù)載均衡,并行計算),計算節(jié)點間互聯(lián)以及計算節(jié)點和存儲節(jié)點間的互聯(lián)都是采用Infiniband(高帶寬,低延遲),而不是傳統(tǒng)的以太網(wǎng)。整個系統(tǒng)中網(wǎng)絡(luò)部分都有冗余,設(shè)計為無單點故障。
計算節(jié)點本身不存放數(shù)據(jù),它通過ASM模塊訪問存放于存儲節(jié)點的數(shù)據(jù),Oracle 的ASM是Oracle公司自己的自動存儲管理軟件,特別需要注意的是:ASM是Oracle Exadata架構(gòu)非常核心的部分,本文主要討論的就是Exadata中的ASM以及Smart Scan(Offloading)技術(shù),其它如Smart flashcache,Storageindex,HCC等特性,本文不作討論。
由于Oracle的文檔中對于Exadata中ASM技術(shù)細(xì)節(jié)的描述不多,因此本文中有些觀點是我本人的猜測,如有謬誤,敬請諒解。
以下有關(guān)ASM的資料很多來自于《Oracle+Database+11g+RAC手冊(第2版)》一書
ASM與Oracle 數(shù)據(jù)庫緊密集成在一起,并對其進(jìn)行優(yōu)化。它是通過3 個關(guān)鍵組件實現(xiàn)的:ASM 實例、ASM 動態(tài)卷管理器(ADVM)和ASM 集群文件系統(tǒng)(ACFS)。ASM 動態(tài)卷管理器為ASM 集群文件系統(tǒng)提供了卷管理器功能。
ASM可以擁有63 個磁盤組,其中放置10 000 個ASM 磁盤,每個ASM 磁盤可以存儲高達(dá)2TB數(shù)據(jù)。一個磁盤組可處理100 萬個ASM 文件。在Oracle Database 11g 中,一個數(shù)據(jù)文件所支持的最大文件大小為128TB,而ASM 在采用外部冗余時支持高達(dá)140PB 數(shù)據(jù)??梢夾SM所能管理的存儲空間也在100PB的量級。
以下是Oracle在使用ASM前后的架構(gòu)對比:
Exadata使用ASM管理所有智能存儲節(jié)點上的硬盤,它首先把所有存儲節(jié)點的磁盤放到一個資源池里,并形成ACFS集群文件系統(tǒng),然后應(yīng)用 Stripe And Mirror Everything技術(shù)把需要存儲的所有數(shù)據(jù)文件分割成固定大小的塊,均勻的分布到各存儲節(jié)點的硬盤上,并可以對數(shù)據(jù)塊設(shè)定副本的數(shù)量,常規(guī)是雙重副本,高級是3重副本。副本通常也會被放置于其他存儲節(jié)點的硬盤上。因此當(dāng)計算節(jié)點需要訪問某個數(shù)據(jù)文件時,也是需要到多個存儲節(jié)點上并行讀取。從這點上看起來,ASM在文件分割和副本方面的策略是否與HDFS的思路很象?不同的是Oracle ASM一般設(shè)數(shù)據(jù)塊大小為128K或1M,而HDFS一般設(shè)為64M。
在Exadata存儲容量不夠時,也可以在線添加存儲節(jié)點,ASM在存儲配置和再配置期間,不需要任何停機時間,也就是說,在改變存儲配置時不需要使數(shù)據(jù)庫脫機。在磁盤組中添加或刪除磁盤之后,ASM 會自動在磁盤組的所有磁盤之間均勻地再分布文件數(shù)據(jù)。這個操作稱為“磁盤再均衡”,它對數(shù)據(jù)庫是透明的。但Oracle Exadata對存儲節(jié)點的添加是有要求的,它每次擴容最少需要擴1/4機架,也就是4個存儲節(jié)點。目前Exadata最大容量只支持最大8個機架,但我相信是由于交換機硬件架構(gòu)的限制,而不是ASM本身的限制。
討論到現(xiàn)在再回頭看看,Hadoop Hbase是構(gòu)架于HDFS上的Nosql數(shù)據(jù)庫,Exadata則是構(gòu)建于ASM上的oracle數(shù)據(jù)庫,此外Exadata使用的ASM和HDFS是有很多相似的地方。前面我總結(jié)的HDFS的4個主要特點中,可擴展性,多磁盤并發(fā)工作,高可用這三個特性,在Exadata中都有類似的實現(xiàn)方式。
由于ASM的資料較少,我不是很清楚Exadata中ASM的元數(shù)據(jù)的管理方式,因為從Exadata的架構(gòu)上看,沒有類似于HDFS的 Namenode的角色,因此ACFS肯定不是采用集中式元數(shù)據(jù)服務(wù)模型。我也曾請教過別人,有人說是采用類似GlusterFS的彈性Hash技術(shù),另外有人說是采用分布式元數(shù)據(jù)服務(wù)模型,但我從Oracle的文檔上看到,元數(shù)據(jù)是存放在每個智能存儲節(jié)點上的,因此我更傾向于后者。這個需要熟悉 Oracle的高手解惑!
最后再來看一下Exadata的另一個主要特性Smart Scan(Offloading)
下圖是Smart Scan(Offloading)的工作示意圖:
1、客戶端向數(shù)據(jù)庫計算節(jié)點發(fā)出了一個 SELECT 語句,帶有謂詞,要求過濾并僅返回所需行。
2、計算節(jié)點數(shù)據(jù)庫內(nèi)核確定存儲節(jié)點可用,并構(gòu)造一個代表發(fā)出的 SQL 命令的iDB 命令,并將其發(fā)送到各存儲節(jié)點。
3、存儲節(jié)點的 CELLSRV 組件掃描數(shù)據(jù)塊以識別哪些行和列滿足發(fā)出的SQL。
4、存儲節(jié)點只將滿足謂詞的行和請求的列返回給計算節(jié)點。
5、計算節(jié)點數(shù)據(jù)庫內(nèi)核整合各個 Exadata 單元的結(jié)果集。
6、最后,將查找到的行返回給客戶端。
簡單的說,Exadata的Smart Scan工作模式就是:當(dāng)計算節(jié)點接到客戶端任務(wù)時,它就把任務(wù)下發(fā)給各個存儲節(jié)點,各存儲節(jié)點計算完后再把結(jié)果返還給計算節(jié)點,最后由計算節(jié)點整合成完整結(jié)果集,再返回給客戶。
思考一下Exadata的這個特性是否和MapReduce中的Jobtracker,Tasktracker的工作模式很象?都是Master接到客戶端任務(wù)后,把任務(wù)分解成多個小任務(wù),然后由多臺Slave并行計算,最終把匯總結(jié)果返還給客戶端。由此是否可以說Exadata的Smart Scan(Offloading)技術(shù)也符合前文總結(jié)的MapReduce的兩個重要特性:1、多節(jié)點并行計算,2、大量需要計算的數(shù)據(jù)在本地,只有計算產(chǎn)生的中間結(jié)果或結(jié)果才在網(wǎng)絡(luò)里傳輸,大大減少了網(wǎng)絡(luò)流量。
前文介紹過,HBase和Hive都是通過很多節(jié)點并行作MapReduce計算,來提高整體系統(tǒng)的吞吐量從而海量數(shù)據(jù)的查詢和分析能力,其實 Exadata也采用類似的架構(gòu),區(qū)別就是存儲節(jié)點上不是跑MapReduce,而是跑SQL而已。但不可否認(rèn)的是Hadoop支持成千上萬個節(jié)點的集群,而目前Exadata只支持8個機柜,因此從擴展性方面,還是無法和Hadoop集群比。
綜上所述,其實Exadata借鑒了分布式計算的很多優(yōu)點,它把RDBMS構(gòu)建于分布式集群存儲之上,從而使得RDBMS具備了更好的擴展性,此外它還吸取了眾多類似于Flash,Infiniband,列式數(shù)據(jù)庫等新技術(shù)的特點,并將這些技術(shù)完美的融合在一起。不可否認(rèn),Oracle的Exadata是關(guān)系型數(shù)據(jù)庫領(lǐng)域里偉大的革新性產(chǎn)品。
關(guān)于Oracle 數(shù)據(jù)庫,Exadata,RAC,ASM,ACFS等技術(shù),有非常多的內(nèi)容,而我也是在開始學(xué)習(xí)的過程中,本文只是我在學(xué)習(xí)過程中的一些總結(jié)和感想,我覺得計算機技術(shù)中很多都是相通的,當(dāng)一個領(lǐng)域里有好的技術(shù)發(fā)布之后,其他領(lǐng)域的技術(shù)人員會迅速學(xué)習(xí)并借鑒這些技術(shù),從而推動自己領(lǐng)域的技術(shù)發(fā)展,這也是信息技術(shù)在這些年里飛速發(fā)展的原因!