22 一套數(shù)據(jù)唬格,多種引擎續(xù)---兩種數(shù)據(jù)格式(Parquet/ORCfile)淺析

//
一套數(shù)據(jù),多種引擎(impala/Hive/kylin) - 大數(shù)據(jù)和云計(jì)算技術(shù) (歡迎關(guān)注同名微信公眾號(hào)) - ITeye技術(shù)網(wǎng)站
http://jiezhu2007.iteye.com/blog/2153589

//
一套數(shù)據(jù),多種引擎續(xù)---兩種數(shù)據(jù)格式(Parquet/ORCfile)淺析 - 大數(shù)據(jù)和云計(jì)算技術(shù) (歡迎關(guān)注同名微信公眾號(hào)) - ITeye技術(shù)網(wǎng)站
http://jiezhu2007.iteye.com/blog/2156560

最近主要在研究大數(shù)典型應(yīng)用adhoc query,要實(shí)現(xiàn)秒級(jí)的adhoc query稀拐,通常有3種思路:
1、用搜索技術(shù)丹弱,將查詢(xún)都建立索引德撬,然后用搜索技術(shù)來(lái)實(shí)現(xiàn)。這種技術(shù)目前主要限制是索引建立和存儲(chǔ)成本高躲胳,索引建立不及時(shí)蜓洪,例如支付寶的higo。
2泛鸟、實(shí)時(shí)計(jì)算蝠咆,對(duì)不能指定維度的查詢(xún),理論上認(rèn)為是實(shí)時(shí)計(jì)算北滥,每個(gè)列上建立函數(shù)索引,這種典型的代表是mesa闸翅。關(guān)于mesa再芋,前面我有篇簡(jiǎn)單的介紹性文章《mesa介紹:google 近實(shí)時(shí)數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)》,深入的大家可以看一看google的論文坚冀。淘寶的garuda公開(kāi)的材料來(lái)看济赎,主要也是實(shí)時(shí)計(jì)算的思路,但是目前garuda公開(kāi)的資料不多,不知道目前這個(gè)系統(tǒng)到什么階段了司训。
3构捡、最后一種思路是利用MPP架構(gòu),通過(guò)并行掃描的技術(shù)來(lái)實(shí)現(xiàn)adhoc query壳猜。前面寫(xiě)了兩篇分析文章《實(shí)時(shí)分析系統(tǒng)(HIVE/HBASE/IMPALA)淺析》和《 MPP DB 是 大數(shù)據(jù)實(shí)時(shí)分析系統(tǒng) 未來(lái)的選擇嗎勾徽?》。這兩篇文章最新偶能發(fā)現(xiàn)被公司內(nèi)部拿去作為參考统扳,說(shuō)明研究這塊問(wèn)題的人還不少喘帚,能拿我的文章去參考,應(yīng)該還是比較認(rèn)可我的思路的吧咒钟。O(∩_∩)O~
以上是業(yè)界目前我所知道的3種典型的思路吹由,朋友們要是有新的思路歡迎多交流。
關(guān)于第3種思路朱嘴,目前業(yè)界有很多引擎倾鲫,各有優(yōu)缺點(diǎn),最近我萌發(fā)了另外一種考慮《一套數(shù)據(jù)萍嬉,多種引擎(impala/Hive/kylin)》乌昔。前面說(shuō)了這么久,關(guān)鍵還是要回到今天要討論的正題上來(lái)帚湘,怎么做到一套數(shù)據(jù)玫荣?

數(shù)據(jù)分 metadata和 raw data。Impala一開(kāi)始的思路就是用來(lái)改進(jìn)hive的不足大诸,所以和Hive天然共元數(shù)據(jù)捅厂,這里就不討論元數(shù)據(jù)了。我們今天來(lái)簡(jiǎn)單對(duì)比分析一下業(yè)界典型的兩種數(shù)據(jù)存儲(chǔ)格式Parquet和ORCfile资柔,分別是impala和Hive推薦使用的數(shù)據(jù)格式焙贷。

一、首先來(lái)看下ORCfile贿堰。
Orcfile(Optimized Row Columnar)是hive 0.11版里引入的新的存儲(chǔ)格式辙芍,是對(duì)之前的RCFile存儲(chǔ)格式的優(yōu)化,是HortonWorks開(kāi)源的羹与」使瑁看下orcfile的存儲(chǔ)格式:



可以看到每個(gè)Orc文件由1個(gè)或多個(gè)stripe組成,每個(gè)stripe250MB大小纵搁,這個(gè)Stripe實(shí)際相當(dāng)于之前的rcfile里的RowGroup概念吃衅,不過(guò)大小由4MB->250MB,這樣應(yīng)該能提升順序讀的吞吐率腾誉。每個(gè)Stripe里有三部分組成徘层,分別是Index Data,Row Data,Stripe Footer:
每個(gè)Stripe都包含index data峻呕、row data以及stripe footer,Stripe footer包含流位置的目錄趣效,Row data在表掃描的時(shí)候會(huì)用到瘦癌。
Index data包含每列的最大和最小值以及每列所在的行。行索引里面提供了偏移量跷敬,它可以跳到正確的壓縮塊位置讯私。
通過(guò)行索引,可以在stripe中快速讀取的過(guò)程中可以跳過(guò)很多行干花,盡管這個(gè)stripe的大小很大妄帘。在默認(rèn)情況下,最大可以跳過(guò)10000行池凄。
因?yàn)榭梢酝ㄟ^(guò)過(guò)濾預(yù)測(cè)跳過(guò)很多行抡驼,因而可以在表的 secondary keys 進(jìn)行排序,從而可以大幅減少執(zhí)行時(shí)間肿仑。比如你的表的主分區(qū)是交易日期致盟,那么你可以對(duì)次分區(qū)(state、zip code以及l(fā)ast name)進(jìn)行排序尤慰。
每個(gè)文件有一個(gè)File Footer馏锡,這里面存的是每個(gè)Stripe的行數(shù),每個(gè)Column的數(shù)據(jù)類(lèi)型信息等伟端;每個(gè)文件的尾部是一個(gè)PostScript杯道,這里面記錄了整個(gè)文件的壓縮類(lèi)型以及FileFooter的長(zhǎng)度信息等。在讀取文件時(shí)责蝠,會(huì)seek到文件尾部讀PostScript党巾,從里面解析到File Footer長(zhǎng)度,再讀FileFooter霜医,從里面解析到各個(gè)Stripe信息齿拂,再讀各個(gè)Stripe,即從后往前讀肴敛。
ORCFILE主要特點(diǎn):
混合存儲(chǔ)結(jié)構(gòu)署海,先按行存儲(chǔ),一組行數(shù)據(jù)叫stripes医男,stripes內(nèi)部按列式存儲(chǔ)砸狞。
支持各種復(fù)雜的數(shù)據(jù)類(lèi)型,比如: datetime, decimal, 以及一些復(fù)雜類(lèi)型(struct, list, map, and union)镀梭;
在文件中存儲(chǔ)了一些輕量級(jí)的索引數(shù)據(jù)趾代;
基于數(shù)據(jù)類(lèi)型的塊模式壓縮:
a、integer類(lèi)型的列用行程長(zhǎng)度編碼(run-length encoding)
b丰辣、String類(lèi)型的列用字典編碼(dictionary encoding)撒强;

二、再來(lái)看看Parquet
我們的開(kāi)源項(xiàng)目 Parquet 是 Hadoop 上的一種支持列式存儲(chǔ)文件格式笙什,起初只是 Twitter 和 Coudera 在合作開(kāi)發(fā)飘哨,發(fā)展到現(xiàn)在已經(jīng)有包括 Criteo公司 在內(nèi)的許多其他貢獻(xiàn)者了. Parquet 用 Dremel 的論文中描述的方式,把嵌套結(jié)構(gòu)存儲(chǔ)成扁平格式琐凭。
盡管 Parquet 是一個(gè)面向列的文件格式芽隆,不要期望每列一個(gè)數(shù)據(jù)文件。Parquet 在同一個(gè)數(shù)據(jù)文件中保存一行中的所有數(shù)據(jù)统屈,以確保在同一個(gè)節(jié)點(diǎn)上處理時(shí)一行的所有列都可用胚吁。Parquet 所做的是設(shè)置 HDFS 塊大小和最大數(shù)據(jù)文件大小為 1GB,以確保 I/O 和網(wǎng)絡(luò)傳輸請(qǐng)求適用于大批量數(shù)據(jù)(What Parquet does is to set an HDFS block size and a maximum data file size of 1GB, to ensure that I/O and network transfer requests apply to large batches of data)愁憔。
在成G的空間內(nèi)腕扶,一組行的數(shù)據(jù)會(huì)重新排列,以便第一行所有的值被重組為一個(gè)連續(xù)的塊吨掌,然后是第二行的所有值半抱,依此類(lèi)推。
為了在列式存儲(chǔ)中可以表達(dá)嵌套結(jié)構(gòu)膜宋,用叫做 definition level和repetition level兩個(gè)值描述窿侈。分別表達(dá)某個(gè)值在整個(gè)嵌套格式中,最深嵌套層數(shù)秋茫,以及在同一個(gè)嵌套層級(jí)中第幾個(gè)值史简。
Parquet 使用一些自動(dòng)壓縮技術(shù),例如行程編碼(run-length encoding,RLE) 和字典編碼(dictionary encoding)肛著,基于實(shí)際數(shù)據(jù)值的分析圆兵。一當(dāng)數(shù)據(jù)值被編碼成緊湊的格式,使用壓縮算法策泣,編碼的數(shù)據(jù)可能會(huì)被進(jìn)一步壓縮衙傀。Impala 創(chuàng)建的 Parquet 數(shù)據(jù)文件可以使用 Snappy, GZip, 或不進(jìn)行壓縮;Parquet 規(guī)格還支持 LZO 壓縮萨咕,但是目前 Impala 不支持 LZO 壓縮的 Parquet 文件统抬。
除了應(yīng)用到整個(gè)數(shù)據(jù)文件的 Snappy 或 GZip 壓縮之外,RLE 和字段編碼是 Impala 自動(dòng)應(yīng)用到 Parquet 數(shù)據(jù)值群體的壓縮技術(shù)危队。

綜合來(lái)看聪建,ORCfiel和parquet本質(zhì)上都是列上存儲(chǔ),大同小異茫陆。parquet主要特點(diǎn)是支持嵌套格式金麸,ORCfile主要特點(diǎn)是strips中有輕量級(jí)的index data。所以這兩種數(shù)據(jù)存儲(chǔ)格式完全是可以相互借鑒融合的簿盅。

列示存儲(chǔ)不是hadoop首創(chuàng)挥下,是從傳統(tǒng)數(shù)據(jù)庫(kù)中發(fā)展而來(lái)揍魂。最后來(lái)看看wiki中介紹的列示存儲(chǔ)的歷史:
Column stores or transposed files have been implemented from the early days of DBMS development. TAXIR was the first application of a column-oriented database storage system with focus on information-retrieval in biology[11] in 1969. Statistics Canada implemented the RAPID system[12] in 1976 and used it for processing and retrieval of the Canadian Census of Population and Housing as well as several other statistical applications. RAPID was shared with other statistical organizations throughout the world and used widely in the 1980s. It continued to be used by Statistics Canada until the 1990s.
KDB was the first commercially available column-oriented database developed in 1993 followed in 1995 by Sybase IQ. However, that has changed rapidly since about 2004 with many open source and commercial implementations. MonetDB was released under an open-source license on September 30, 2004,[13] followed closely by the now defunct C-Store.[14] Vertica was eventually developed out of C-Store, while the MonetDB-related X100 project evolved into VectorWise.[15][16]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市棚瘟,隨后出現(xiàn)的幾起案子现斋,更是在濱河造成了極大的恐慌,老刑警劉巖偎蘸,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庄蹋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡迷雪,警方通過(guò)查閱死者的電腦和手機(jī)限书,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)章咧,“玉大人倦西,你說(shuō)我怎么就攤上這事』塾剩” “怎么了调限?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)误澳。 經(jīng)常有香客問(wèn)我耻矮,道長(zhǎng),這世上最難降的妖魔是什么忆谓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任裆装,我火速辦了婚禮,結(jié)果婚禮上倡缠,老公的妹妹穿的比我還像新娘哨免。我一直安慰自己,他們只是感情好昙沦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布琢唾。 她就那樣靜靜地躺著,像睡著了一般盾饮。 火紅的嫁衣襯著肌膚如雪采桃。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天丘损,我揣著相機(jī)與錄音普办,去河邊找鬼。 笑死徘钥,一個(gè)胖子當(dāng)著我的面吹牛衔蹲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呈础,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼舆驶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼橱健!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起贞远,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤畴博,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蓝仲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡官疲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年袱结,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片途凫。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垢夹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出维费,到底是詐尸還是另有隱情果元,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布犀盟,位于F島的核電站而晒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏阅畴。R本人自食惡果不足惜倡怎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贱枣。 院中可真熱鬧监署,春花似錦、人聲如沸纽哥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)春塌。三九已至晓避,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摔笤,已是汗流浹背够滑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吕世,地道東北人彰触。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像命辖,于是被迫代替她去往敵國(guó)和親况毅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子分蓖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容