1.ORCFileFacebook在 2011年的 ICDE 會議之上發(fā)布了RCFile。之后RCFile在Hive之中作為很好的列存儲模型被廣泛使用,雖然RCFile能夠很好的提升Hive的工作性能,但是在Facebook論文之中也提出了一些RCFile值得改進的地方。所以在2013年,HortonWorks就在RCFile的基礎(chǔ)之上開發(fā)出了ORCFile,并且ORCFlie很順利地在2015年成為Apache的頂級項目。接下來我們來看一看ORCFile相對于原本的RCFile解決了什么樣的問題:
存儲結(jié)構(gòu)首先,我們先來看看ORCFile的存儲結(jié)構(gòu)。如下圖所示,ORCFile完全拋棄了原有RCFile之中所謂Row Group的概念。引入了三個新的組件,我們分別來看看對應(yīng)組件的內(nèi)容:
則定義的類型是如同下圖的嵌套模式:
上述就是ORCFile核心的存儲結(jié)構(gòu)了。對比原先的RCFile,ORCFile沒有標(biāo)新立異的之處,只是補足了數(shù)據(jù)壓縮與數(shù)據(jù)處理的短板。 2.ParquetGoogle同樣在 2010年發(fā)布了最新交互處理的數(shù)據(jù)系統(tǒng)Dremel,并且在Dremel之上構(gòu)建了一個與Protocol Buffer兼容的數(shù)據(jù)模型。基本上Google推出啥,開源圈一定會照貓畫虎的弄一個出來。于是同樣在2013年,Cloudera與Twitter針對Dremel的數(shù)據(jù)模型為模板,推出了Parquet,Parquet同樣在2015年順利“畢業(yè)”,成為Apache的頂級項目。 其實Parquet與ORCFile像是孿生兄弟,許多設(shè)計的思路與細節(jié)是相同的,都是列存儲,數(shù)據(jù)壓縮那一套。所以這里筆者不展開來講Parquet的技術(shù)細節(jié)了,而是結(jié)合Google的論文,來看一看Parquet與ORCFile最大的區(qū)別:數(shù)據(jù)模型。 數(shù)據(jù)模型為了兼容Protocol Buffer的嵌套結(jié)構(gòu),Google的工程師設(shè)計了很精巧的模型來將Protocol Buffer的結(jié)構(gòu)落地到實際的存儲結(jié)構(gòu)之中。坦白說,這或許是Google內(nèi)部為了兼容Protocol Buffer而實現(xiàn)的一個很trade off的設(shè)計,所以看起來有點奇怪: 如上圖所示,通過Protocol Buffer定義了一個組合類型Document,其中required字段是必須填寫的,optional字段是可以省略的,而repeated字段是可以重復(fù)的字段。其中I1與I2為示例數(shù)據(jù)。如何將上述的數(shù)據(jù)模型轉(zhuǎn)換為列存呢?我們接著往下看: 3.ORCfile與Parquet的比較目前兩者都作為Apache的頂級項目來進行維護,但是無論是設(shè)計的思路還是合理性都是ORCFile更為優(yōu)秀。簡單來說,對于OLAP的應(yīng)用,本身就是需要通過ETL的流程進行數(shù)據(jù)的格式復(fù)寫,對于Protocol Buffer的兼容的必要性這塊,筆者是存疑的。 但是或許是因為背后所主導(dǎo)的力量不同,畢竟是出身名門,在各個存儲系統(tǒng)的支持上,和實際的運用之中,Parquet還是占了很大的優(yōu)勢。縱觀It產(chǎn)業(yè)的歷史發(fā)展,從來都不是因為技術(shù)優(yōu)勢而能夠贏得賽跑的。從ORCFile與Parquet目前在開源上的不同境遇來看,也符合兩家公司的在資本市場上的表現(xiàn)吧。 但是無論商業(yè)競逐上的勝利與失敗,能夠開源好的技術(shù)來便利開發(fā)者與使用者,應(yīng)該都是一件功德無量的事情。 |
|