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