




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
ApacheKylin權(quán)威指南ApacheKylin權(quán)威指南(完整版)目錄\h第1章paceli概述\h1.1背景和歷史\h1.2paceli的使命\h1.2.1為什么要使用pacelin\h1.2.2paceli怎樣解決關(guān)鍵問題\h1.3paceli的工作原理\h1.3.1維度和度量簡介\h1.3.2be和boid\h1.3.3工作原理\h1.4paceli的技術(shù)架構(gòu)\h1.5paceli的主要特點\h1.5.1標(biāo)準(zhǔn)接口\h1.5.2支持超大數(shù)據(jù)集\h1.5.3亞秒級響應(yīng)\h1.5.4可伸縮性和高吞吐率\h1.5.5及可視化工具集成\h1.6與其他開源產(chǎn)品比較\h1.7小結(jié)\h第2章快速入門\h2.1核心概念\h2.1.1數(shù)據(jù)倉庫與I\h2.1.2維度和度量\h2.1.3事實表和維度表\h2.1.4beboid和beeet\h2.2在ive中準(zhǔn)備數(shù)據(jù)\h2.2.1星形模型\h2.2.2維度表的設(shè)計\h2.2.3ive表分區(qū)\h2.2.4了解維度的基數(shù)\h2.2.5apleaa\h2.3設(shè)計be\h2.3.1導(dǎo)入ive表定義\h2.3.2創(chuàng)建數(shù)據(jù)模型\h2.3.3創(chuàng)建be\h2.4構(gòu)建be\h2.4.1全量構(gòu)建和增量構(gòu)建\h2.4.2歷史數(shù)據(jù)刷新\h2.4.3合并\h2.5查詢be\h2.6參考\h2.7小結(jié)\h第3章增量構(gòu)建\h3.1為什么要增量構(gòu)建\h3.2設(shè)計增量be\h3.2.1設(shè)計增量be的前提\h3.2.2增量be的創(chuàng)建\h3.3觸發(fā)增量構(gòu)建\h3.3.1eb觸發(fā)\h3.3.2構(gòu)建相關(guān)的esI\h3.4管理be碎片\h3.4.1合并eet\h3.4.2自動合并\h3.4.3保留eet\h3.4.4數(shù)據(jù)持續(xù)更新\h3.5小結(jié)\h第4章流式構(gòu)建\h4.1為什么要流式構(gòu)建\h4.2準(zhǔn)備流式數(shù)據(jù)\h4.2.1數(shù)據(jù)格式\h4.2.2消息隊列\(zhòng)h4.2.3創(chuàng)建cea\h4.3設(shè)計流式be\h4.3.1創(chuàng)建odel\h4.3.2創(chuàng)建be\h4.4流式構(gòu)建原理\h4.5觸發(fā)流式構(gòu)建\h4.5.1單次觸發(fā)\h4.5.2自動化多次觸發(fā)\h4.5.3出錯處理\h4.6小結(jié)\h第5章查詢和可視化\h5.1ebI\h5.1.1查詢\h5.1.2顯示結(jié)果\h5.2esI\h5.2.1查詢認證\h5.2.2查詢請求參數(shù)\h5.2.3查詢返回結(jié)果\h5.3C\h5.4JC\h5.4.1獲得驅(qū)動包\h5.4.2認證\h5.4.3格式\h5.4.4獲取元數(shù)據(jù)信息\h5.5通過ablea訪問lin\h5.5.1連接li數(shù)據(jù)源\h5.5.2設(shè)計數(shù)據(jù)模型\h5.5.3通過ive方式連接\h5.5.4自定義L\h5.5.5可視化\h5.5.6發(fā)布到ableaerver\h5.6eppeli集成\h5.6.1eppeli架構(gòu)簡介\h5.6.2lierpreer的工作原理\h5.6.3如何使用eppeli訪問lin\h5.7小結(jié)\h第6章be優(yōu)化\h6.1boid剪枝優(yōu)化\h6.1.1維度的詛咒\h6.1.2檢查boid數(shù)量\h6.1.3檢查be大小\h6.1.4空間與時間的平衡\h6.2剪枝優(yōu)化的工具\h6.2.1使用衍生維度\h6.2.2使用聚合組\h6.3并發(fā)粒度優(yōu)化\h6.4owes優(yōu)化\h6.4.1編碼\h6.4.2按維度分片\h6.4.3調(diào)整owes順序\h6.5其他優(yōu)化\h6.5.1降低度量精度\h6.5.2及時清理無用的eet\h6.6小結(jié)\h第7章應(yīng)用案例分析\h7.1基本多維分析\h7.1.1數(shù)據(jù)集\h7.1.2數(shù)據(jù)導(dǎo)入\h7.1.3創(chuàng)建數(shù)據(jù)模型\h7.1.4創(chuàng)建be\h7.1.5構(gòu)建be\h7.1.6查詢\h7.2流式分析\h7.2.1aa數(shù)據(jù)源\h7.2.2創(chuàng)建數(shù)據(jù)表\h7.2.3創(chuàng)建數(shù)據(jù)模型\h7.2.4創(chuàng)建be\h7.2.5構(gòu)建be\h7.2.6查詢\h7.3小結(jié)\h第8章擴展pacelin\h8.1可擴展式架構(gòu)\h8.1.1工作原理\h8.1.2三大主要接口\h8.2計算引擎擴展\h8.2.1ieFacory\h8.2.2acbiie2\h8.2.3acbiJobilder2\h8.2.4pt\h8.2.5p2\h8.3數(shù)據(jù)源擴展\h8.4存儲擴展\h8.5聚合類型擴展\h8.5.1聚合的J定義\h8.5.2聚合類型工廠\h8.5.3聚合類型的實現(xiàn)\h8.6維度編碼擴展\h8.6.1維度編碼的J定義\h8.6.2維度編碼工廠\h8.6.3維度編碼的實現(xiàn)\h8.7小結(jié)\h第9章paceli的企業(yè)級功能\h9.1身份驗證\h9.1.1自定義驗證\h9.1.2驗證\h9.1.3單點登錄\h9.2授權(quán)\h9.3小結(jié)\h第10章運維管理\h10.1安裝和配置\h10.1.1必備條件\h10.1.2快速啟動pacelin\h10.1.3配置pacelin\h10.1.4企業(yè)部署\h10.2監(jiān)控和診斷\h10.2.1日志\h10.2.2任務(wù)報警\h10.2.3診斷工具\h10.3日常維護\h10.3.1基本運維\h10.3.2元數(shù)據(jù)備份\h10.3.3元數(shù)據(jù)恢復(fù)\h10.3.4系統(tǒng)升級\h10.3.5垃圾清理\h10.4常見問題和修復(fù)\h10.5獲得社區(qū)幫助\h10.5.1郵件列表\h10.5.2JA\h10.6小結(jié)\h第1章參與開源\h1.1paceli的開源歷程\h1.2為什么參與開源\h1.3pace開源社區(qū)簡介\h1.3.1簡介\h1.3.2組織構(gòu)成與運作模式\h1.3.3項目角色\h1.3.4孵化項目及頂級項目\h1.4如何貢獻到開源社區(qū)\h1.4.1什么是貢獻\h1.4.2如何貢獻\h1.5禮儀與文化\h1.6如何參與pacelin\h1.7小結(jié)\h第12章paceli的未來\h12.1大規(guī)模流式構(gòu)建\h12.2擁抱par技術(shù)棧\h12.3更快的存儲和查詢\h12.4前端展現(xiàn)及與工具的整合\h12.5高級函數(shù)\h12.6展望第1章phelin概述paceli是adoop大數(shù)據(jù)平臺上的一個開源引擎它采用多維立方體預(yù)計算技術(shù)可以將大數(shù)據(jù)的查詢速度提升到亞秒級別。相對于之前的分鐘乃至小時級別的查詢速度亞秒級別速度是百倍到千倍的提升該引擎為超大規(guī)模數(shù)據(jù)集上的交互式大數(shù)據(jù)分析打開了大門。paceli也是中國人主導(dǎo)的唯一的pace頂級開源項目在開源社區(qū)有世界級的影響力。本章將對paceli的歷史和背景做一個完整的介紹并從技術(shù)的角度對li做一個概覽性的介紹。本書內(nèi)容以pacelinv1.5為基礎(chǔ)。1.1背景和歷史今天大數(shù)據(jù)領(lǐng)域的發(fā)展如火如荼各種新技術(shù)層出不窮整個生態(tài)欣欣向榮作為大數(shù)據(jù)領(lǐng)域最重要的技術(shù)——paceadoop從誕生至今已有10周年它最初只是致力于簡單的分布式存儲然后在其之上實現(xiàn)大規(guī)模并行計算到如今它已在實時分析多維分析交互式分析機器學(xué)習(xí)甚至人工智能等方面都有著長足的發(fā)展。2013年年初ea內(nèi)部使用的傳統(tǒng)數(shù)據(jù)倉庫及商業(yè)智能平臺應(yīng)用碰到了瓶頸即傳統(tǒng)的架構(gòu)只支持垂直擴展通過在一臺機器上增加和內(nèi)存等資源來提升數(shù)據(jù)處理能力相對于數(shù)據(jù)指數(shù)級的增長單機擴展很快就達到了極限另一方面adoop大數(shù)據(jù)平臺雖然能存儲和批量處理大規(guī)模數(shù)據(jù)但與平臺的連接技術(shù)依然不成熟無法提供高效的交互式查詢于是尋找更好的方案便成為了當(dāng)務(wù)之急正好在2013年年中的時候ea公司啟動了一個大數(shù)據(jù)項目其中的一塊內(nèi)容就是Ionadoop的預(yù)研當(dāng)時ea中國卓越中心組建了一支很小的團隊他們在分析和測試了多種開源和商業(yè)解決方案之后發(fā)現(xiàn)沒有一種方案能夠完全滿足當(dāng)時的需求即在超大規(guī)模數(shù)據(jù)集上提供秒級的查詢性能并能基于adoop與平臺無縫整合等在研究了多種可能性之后最終eay的paceli核心團隊決定自己實現(xiàn)一套Ponadoop的解決方案,以彌補業(yè)界的這個空白與此同時ea公司也非常鼓勵開源各個項目,回饋社區(qū)ea的paceli核心團隊在向負責(zé)整個技術(shù)平臺的高級副總裁做匯報的時候得到的一個反饋就是“要從第一天就做好開源的準(zhǔn)備”。圖1-1orowors在wier上對paceli的評論經(jīng)過一年多的研發(fā)在2014年的9月底li平臺在ea內(nèi)部正式上線它一上線便吸引了多個種子客戶li在adoop上提供了標(biāo)準(zhǔn)的、友好的接口外加查詢速度非常迅速原本要用幾分鐘的查詢現(xiàn)在幾秒鐘就能返回結(jié)果分析的工作效率得到了幾百倍的提升因此lin獲得了公司內(nèi)部客戶合作伙伴及管理層的高度評價2014年10月1日,項目負責(zé)人韓卿將li的源代碼提交到ib.co并正式開源當(dāng)天就獲得了業(yè)界專家的關(guān)注和認可如圖1-1所示的是orowors的在wier上對此給出的評價。很快adoop社區(qū)的許多朋友都鼓勵ea的packli核心團隊將該項目貢獻到pace軟件基金會()讓它能夠與其他大數(shù)據(jù)項目一起獲得更好的發(fā)展在經(jīng)過一個月的緊張籌備和撰寫了無數(shù)個版本的項目建議書之后li項目于2014年1月正式加入pace孵化器項目并有多位資深的社區(qū)活躍成員作我們的導(dǎo)師。在項目組再次付出無數(shù)努力之后2015年的1月pace軟件基金會宣布paceli正式成為頂級項目這是第一個也是唯一一個完全由我國團隊貢獻到全球最大的開源軟件基金會的頂級項目項目負責(zé)人韓卿成為paceli的項目管理委員會()主席也是pace軟件基金會160多個頂級項目中的唯一一個中國人pacel創(chuàng)造了歷史正如li的導(dǎo)師——pace孵化器副總裁edi在官方新聞稿中的評價:“…paceli代表了亞洲國家特別是中國在開源社區(qū)中越來越高的參與度…”。2016年3月由paceli核心開發(fā)者組建的創(chuàng)業(yè)公司liece正式成立就如每一個成功的開源項目背后都有一家創(chuàng)業(yè)公司一樣(adoop領(lǐng)域有l(wèi)oderaorowors等;Spar領(lǐng)域有aabrics;aa領(lǐng)域有o?le)li也可以通過liece的進一步投入保持高速研發(fā)并且li的社區(qū)和生態(tài)圈也會得到不斷的發(fā)展和壯大可以預(yù)見這個開源項目將會越來越好。在業(yè)界最負盛名的技術(shù)類獨立評選中oorld的ossieward每年都會獨立挑選和評論相關(guān)的技術(shù)應(yīng)用和產(chǎn)品等2015年9月paceli獲得了2015年度的“最佳開源大數(shù)據(jù)工具獎”2016年9月paceli再次蟬聯(lián)此國際大獎與ooleesorFlow齊名這是業(yè)界對paceli的充分認可和褒獎。1.2phelin的使命li的使命是超高速的大數(shù)據(jù)(liealicalProcessi),也就是要讓大數(shù)據(jù)分析像使用數(shù)據(jù)庫一樣簡單迅速用戶的查詢請求可以在秒內(nèi)返回交互式數(shù)據(jù)分析將以前所未有的速度釋放大數(shù)據(jù)里潛藏的知識和信息讓我們在面對未來的挑戰(zhàn)時占得先機。1.2.1為什么要使用phelin自從10年前adoop誕生以來大數(shù)據(jù)的存儲和批處理問題均得到了妥善解決而如何高速地分析數(shù)據(jù)也就成為了下一個挑戰(zhàn)于是各式各樣的“SLonadoop”技術(shù)應(yīng)運而生其中以ive為代表palareso、Poeirillpar等緊隨其后它們的主要技術(shù)是“大規(guī)模并行處理”(assivearallelProcessi)和“列式存儲”(olarorae)。大規(guī)模并行處理可以調(diào)動多臺機器一起進行并行計算用線性增加的資源來換取計算時間的線性下降列式存儲則將記錄按列存放這樣做不僅可以在訪問時只讀取需要的列還可以利用存儲設(shè)備擅長連續(xù)讀取的特點大大提高讀取的速率這兩項關(guān)鍵技術(shù)使得adoop上的查詢速度從小時提高到了分鐘。然而分鐘級別的查詢響應(yīng)仍然離交互式分析的現(xiàn)實需求還很遠分析師敲入查詢指令按下回車還需要去倒杯咖啡靜靜地等待查詢結(jié)果得到結(jié)果之后才能根據(jù)情況調(diào)整查詢再做下一輪分析如此反復(fù),一個具體的場景分析常常需要幾小時甚至幾天才能完成效率低下。這是因為大規(guī)模并行處理和列式存儲雖然提高了計算和存儲的速度但并沒有改變查詢問題本身的時間復(fù)雜度也沒有改變查詢時間與數(shù)據(jù)量成線性增長的關(guān)系這一事實假設(shè)查詢1億條記錄耗時1分鐘那么查詢10億條記錄就需10分鐘100億條記錄就至少需要1小時40分鐘。當(dāng)然可以用很多的優(yōu)化技術(shù)縮短查詢的時間比如更快的存儲更高效的壓縮算法等等但總體來說查詢性能與數(shù)據(jù)量呈線性相關(guān)這一點是無法改變的雖然大規(guī)模并行處理允許十倍或百倍地擴張計算集群以期望保持分鐘級別的查詢速度但購買和部署十倍或百倍的計算集群又怎能輕易做到更何況還有高昂的硬件運維成本。另外對于分析師來說完備的經(jīng)過驗證的數(shù)據(jù)模型比分析性能更加重要直接訪問紛繁復(fù)雜的原始數(shù)據(jù)并進行相關(guān)分析其實并不是很友好的體驗特別是在超大規(guī)模的數(shù)據(jù)集上分析師將更多的精力花在了等待查詢結(jié)果上而不是在更加重要的建立領(lǐng)域模型上。1.2.2phelin怎樣解決關(guān)鍵問題paceli的初衷就是要解決千億條萬億條記錄的秒級查詢問題其中的關(guān)鍵就是要打破查詢時間隨著數(shù)據(jù)量成線性增長的這個規(guī)律仔細思考大數(shù)據(jù)可以注意到兩個事實。·大數(shù)據(jù)查詢要的一般是統(tǒng)計結(jié)果是多條記錄經(jīng)過聚合函數(shù)計算后的統(tǒng)計值原始的記錄則不是必需的或者訪問頻率和概率都極低。·聚合是按維度進行的由于業(yè)務(wù)范圍和分析需求是有限的有意義的維度聚合組合也是相對有限的一般不會隨著數(shù)據(jù)的膨脹而增長。基于以上兩點我們可以得到一個新的思路——“預(yù)計算”應(yīng)盡量多地預(yù)先計算聚合結(jié)果在查詢時刻應(yīng)盡量使用預(yù)算的結(jié)果得出查詢結(jié)果從而避免直接掃描可能無限增長的原始記錄。舉例來說使用如下的來查詢10月1日那天銷量最高的商品:用傳統(tǒng)的方法時需要掃描所有的記錄再找到10月1日的銷售記錄,然后按商品聚合銷售額最后排序返回假如10月1日有1億條交易那么查詢必須讀取并累計至少1億條記錄且這個查詢速度會隨將來銷量的增加而逐步下降如果日交易量提高一倍到2億那么查詢執(zhí)行的時間可能也會增加一倍。而使用預(yù)計算的方法則會事先按維度[sell_daeie]計算s(sell_ao)并存儲下來在查詢時找到10月1日的銷售商品就可以直接排序返回了讀取的記錄數(shù)最大不會超過維度[sell_daeie]的組合數(shù)顯然這個數(shù)字將遠遠小于實際的銷售記錄比如10月1日的1億條交易包含了100萬條商品那么預(yù)計算后就只有100萬條記錄了是原來的百分之一并且這些記錄已經(jīng)是按商品聚合的結(jié)果因此又省去了運行時的聚合運算從未來的發(fā)展來看查詢速度只會隨日期和商品數(shù)目的增長而變化與銷售記錄的總數(shù)不再有直接聯(lián)系假如日交易量提高一倍到2億但只要商品的總數(shù)不變那么預(yù)計算的結(jié)果記錄總數(shù)就不會變查詢的速度也不會變。“預(yù)計算”就是li在“大規(guī)模并行處理”和“列式存儲”之外提供給大數(shù)據(jù)分析的第三個關(guān)鍵技術(shù)。1.3phelin的工作原理paceli的工作原理本質(zhì)上是(lidiesioalliealicalrocessi)be也就是多維立方體分析這是數(shù)據(jù)分析中相當(dāng)經(jīng)典的理論在關(guān)系數(shù)據(jù)庫年代就已經(jīng)有了廣泛的應(yīng)用下面將對其做簡要介紹。1.3.1維度和度量簡介在說明Pbe之前需要先介紹一下維度(iesio)和度量(easre)這兩個概念。簡單來講維度就是觀察數(shù)據(jù)的角度比如電商的銷售數(shù)據(jù)可以從時間的維度來觀察(如圖1-2的左側(cè)所示)也可以進一步細化從時間和地區(qū)的維度來觀察(如圖1-2的右側(cè)所示)維度一般是一組離散的值比如時間維度上的每一個獨立的日期或者商品維度上的每一件獨立的商品因此統(tǒng)計時可以把維度值相同的記錄聚合在一起然后應(yīng)用聚合函數(shù)做累加平均去重復(fù)計數(shù)等聚合計算。圖1-2維度和度量的例子度量就是被聚合的統(tǒng)計值也是聚合運算的結(jié)果它一般是連續(xù)的值如圖1-2中的銷售額抑或是銷售商品的總件數(shù)通過比較和測算度量分析師可以對數(shù)據(jù)進行評估比如今年的銷售額相比去年有多大的增長增長的速度是否達到預(yù)期不同商品類別的增長比例是否合理等。1.3.2Cub和Cuboid有了維度和度量一個數(shù)據(jù)表或數(shù)據(jù)模型上的所有字段就可以分類了它們要么是維度要么是度量(可以被聚合)于是就有了根據(jù)維度和度量做預(yù)計算的be理論。給定一個數(shù)據(jù)模型我們可以對其上的所有維度進行組合對于個維度來說組合的所有可能性共有2N種對于每一種維度的組合將度量做聚合運算然后將運算的結(jié)果保存為一個物化視圖稱為boid所有維度組合的boid作為一個整體被稱為be所以簡單來說一個be就是許多按維度聚合的物化視圖的集合。下面來列舉一個具體的例子假定有一個電商的銷售數(shù)據(jù)集其中維度包括時間(ie)商品(e)地點(ocaio)和供應(yīng)商(pplier),度量為銷售額()那么所有維度的組合就有2416種(如圖1-3所示)比如一維度(1)的組合有[ie][e][ocaio][Spplier]4種;二維度(2)的組合有[iee][ieocaio][iepplier]、[eocaio][epplier][ocaiopplier]6種;三維度(3)的組合也有4種;最后零維度(0)和四維度(4)的組合各有1種總共就有16種組合。圖1-3一個四維be的例子計算boid即按維度來聚合銷售額如果用語句來表達計算boid[ieoca-io]那么語句如下:將計算的結(jié)果保存為物化視圖所有boid物化視圖的總稱就是be。1.3.3工作原理paceli的工作原理就是對數(shù)據(jù)模型做be預(yù)計算并利用計算的結(jié)果加速查詢具體工作過程如下。1)指定數(shù)據(jù)模型定義維度和度量。2)預(yù)計算be計算所有boid并保存為物化視圖。3)執(zhí)行查詢時讀取boid運算產(chǎn)生查詢結(jié)果。由于li的查詢過程不會掃描原始記錄而是通過預(yù)計算預(yù)先完成表的關(guān)聯(lián)聚合等復(fù)雜運算并利用預(yù)計算的結(jié)果來執(zhí)行查詢因此相比非預(yù)計算的查詢技術(shù)其速度一般要快一到兩個數(shù)量級并且這點在超大的數(shù)據(jù)集上優(yōu)勢更明顯當(dāng)數(shù)據(jù)集達到千億乃至萬億級別時li的速度甚至可以超越其他非預(yù)計算技術(shù)1000倍以上。1.4phelin的技術(shù)架構(gòu)paceli系統(tǒng)可以分為在線查詢和離線構(gòu)建兩部分技術(shù)架構(gòu)如圖1-4所示在線查詢的模塊主要處于上半?yún)^(qū)而離線構(gòu)建則處于下半?yún)^(qū)。圖1-4li的技術(shù)架構(gòu)我們首先來看看離線構(gòu)建的部分從圖1-4可以看出數(shù)據(jù)源在左側(cè)目前主要是adoopive保存著待分析的用戶數(shù)據(jù)根據(jù)元數(shù)據(jù)的定義下方構(gòu)建引擎從數(shù)據(jù)源抽取數(shù)據(jù)并構(gòu)建be數(shù)據(jù)以關(guān)系表的形式輸入且必須符合星形模型(arcea)(更復(fù)雜的雪花模型在成文時還不被支持可以用視圖將雪花模型轉(zhuǎn)化為星形模型再使用li)。apedce是當(dāng)前主要的構(gòu)建技術(shù)構(gòu)建后的be保存在右側(cè)的存儲引擎中一般選用ase作為存儲。完成了離線構(gòu)建之后用戶可以從上方查詢系統(tǒng)發(fā)送進行查詢分析li提供了各種estJ/接口無論從哪個接口進入最終都會來到es服務(wù)層再轉(zhuǎn)交給查詢引擎進行處理這里需要注意的是語句是基于數(shù)據(jù)源的關(guān)系模型書寫的而不是be。li在設(shè)計時刻意對查詢用戶屏蔽了be的概念分析師只需要理解簡單的關(guān)系模型就可以使用li沒有額外的學(xué)習(xí)門檻傳統(tǒng)的應(yīng)用也很容易遷移查詢引擎解析生成基于關(guān)系表的邏輯執(zhí)行計劃然后將其轉(zhuǎn)譯為基于be的物理執(zhí)行計劃最后查詢預(yù)計算生成的be并產(chǎn)生結(jié)果整個過程不會訪問原始數(shù)據(jù)源。·注意對于查詢引擎下方的路由選擇在最初設(shè)計時曾考慮過將li不能執(zhí)行的查詢引導(dǎo)去ive中繼續(xù)執(zhí)行但在實踐后發(fā)現(xiàn)ive與li的速度差異過大導(dǎo)致用戶無法對查詢的速度有一致的期望很可能大多數(shù)查詢幾秒內(nèi)就返回結(jié)果了而有些查詢則要等幾分鐘到幾十分鐘因此體驗非常糟糕最后這個路由功能在發(fā)行版中默認關(guān)閉因此在圖1-4中是用虛線表示的。paceli1.5版本引入了“可擴展架構(gòu)”的概念在圖1-4中顯示為三個粗虛線框表示的抽象層可擴展指li可以對其主要依賴的三個模塊做任意的擴展和替換li的三大依賴模塊分別是數(shù)據(jù)源構(gòu)建引擎和存儲引擎在設(shè)計之初作為adoop家族的一員這三者分別是ive、apedce和ase但隨著推廣和使用的深入漸漸有用戶發(fā)現(xiàn)它們均存在不足之處比如實時分析可能會希望從aa導(dǎo)入數(shù)據(jù)而不是從ive;而Spar的迅速崛起又使我們不得不考慮將apedce替換為Spar以期大幅提高be的構(gòu)建速度;至于ase它的讀性能可能還不如assadra或d等可見是否可以將一種技術(shù)替換為另一種技術(shù)已成為一個常見的問題于是我們對li1.5版本的系統(tǒng)架構(gòu)進行了重構(gòu),將數(shù)據(jù)源構(gòu)建引擎存儲引擎三大依賴抽象為接口而ive、apedcease只是默認實現(xiàn)深度用戶可以根據(jù)自己的需要做二次開發(fā)將其中的一個或多個替換為更適合的技術(shù)。這也為li技術(shù)的與時俱進埋下了伏筆如果有一天更先進的分布式計算技術(shù)取代了apedce或者更高效的存儲系統(tǒng)全面超越了aseli可以用較小的代價將一個子系統(tǒng)替換掉從而保證li能夠緊跟技術(shù)發(fā)展的最新潮流從而保持最高的技術(shù)水平。可擴展架構(gòu)也帶來了額外的靈活性比如它可以允許多個引擎同時并存例如li可以同時對接iveaa和其他第三方數(shù)據(jù)源;抑或用戶可以為不同的be指定不同的構(gòu)建引擎或存儲引擎以期達到最極致的性能和功能定制。1.5phelin的主要特點paceli的主要特點包括支持接口支持超大數(shù)據(jù)集秒級響應(yīng)可伸縮性高吞吐率工具集成等。1.5.1標(biāo)準(zhǔn)S接口paceli以標(biāo)準(zhǔn)作為對外服務(wù)的主要接口因為是絕大多數(shù)分析人員最熟悉的工具同時也是大多數(shù)應(yīng)用程序使用的編程接口盡管li內(nèi)部以be技術(shù)為核心對外卻沒有選用(liiesioalepressios)作為接口雖然作為查詢語言從學(xué)術(shù)上來說它是更加適合li的選擇然而踐表明簡單易用代表了絕大多數(shù)用戶的第一需求這也是li能夠快速推廣的一個關(guān)鍵。需要以關(guān)系模型作為支撐li使用的查詢模型是數(shù)據(jù)源中的關(guān)系模型表一般而言也就是指ive表終端用戶只需要像原來查詢ive表一樣編寫S就可以無縫地切換到li幾乎不需要額外的學(xué)習(xí)甚至原本的ive查詢也因為與S同源大多都無須修改就能直接在li上運行。paceli在將來也可能會推出接口事實上已經(jīng)有方法可以通過轉(zhuǎn)的工具讓li也能支持。1.5.2支持超大數(shù)據(jù)集paceli對大數(shù)據(jù)的支撐能力可能是目前所有技術(shù)中最為領(lǐng)先的早在2015年ea的生產(chǎn)環(huán)境中l(wèi)i就能支持百億記錄的秒級查詢,之后在移動的應(yīng)用場景下又有了千億記錄秒級查詢的案例這些都是實際場景的應(yīng)用而非實驗室中的理論數(shù)據(jù)。因為使用了be預(yù)計算技術(shù)在理論上li可以支撐的數(shù)據(jù)集大小沒有上限僅受限于存儲系統(tǒng)和分布式計算系統(tǒng)的承載能力并且查詢速度不會隨數(shù)據(jù)集的增大而減慢li在數(shù)據(jù)集規(guī)模上的局限性主要在于維度的個數(shù)和基數(shù)它們一般由數(shù)據(jù)模型來決定不會隨著數(shù)據(jù)規(guī)模的增長而線性增長這也意味著li對未來數(shù)據(jù)的增長有著更強的適應(yīng)能力。如今(截至2016年5月)對于paceli除了ea將其作為孵化公司有廣泛應(yīng)用之外國內(nèi)外一線的互聯(lián)網(wǎng)公司對此幾乎都有大規(guī)模的使用包括百度網(wǎng)易京東美團唯品會pedia等此外其在傳統(tǒng)行業(yè)中也有非常多的實際應(yīng)用包括中國移動銀聯(lián)國美等據(jù)不完全統(tǒng)計真實上線的paceli用戶已經(jīng)超過了一百多家在開源后一年多一點的時間內(nèi)能有如此大的全球用戶基礎(chǔ)足見li在處理超大規(guī)模數(shù)據(jù)集上的能力和優(yōu)勢。1.5.3亞秒級響應(yīng)paceli擁有優(yōu)異的查詢響應(yīng)速度這點得益于預(yù)計算很多復(fù)雜的計算比如連接聚合在離線的預(yù)計算過程中就已經(jīng)完成這大大降低了查詢時刻所需要的計算量提高了響應(yīng)速度。根據(jù)可查詢到的公開資料可以得知paceli在某生產(chǎn)環(huán)境中90%的查詢可以在3s內(nèi)返回結(jié)果這并不是說一小部分相當(dāng)快而是在數(shù)萬種不同的真實生產(chǎn)系統(tǒng)中絕大部分的查詢都非常迅速;在另外一個真實的案例中對1000多億條數(shù)據(jù)構(gòu)建了立方體90%的查詢性能都在1.18s以內(nèi)可見li在超大規(guī)模數(shù)據(jù)集上表現(xiàn)優(yōu)異這與一些只在實驗室中只在特定查詢情況下采集的性能數(shù)據(jù)不可同日而語當(dāng)然并不是使用li就一定能獲得最好的性能針對特定的數(shù)據(jù)及查詢模式,往往需要做進一步的性能調(diào)優(yōu)配置優(yōu)化等性能調(diào)優(yōu)對于充分利用好paceli至關(guān)重要。1.5.4可伸縮性和高吞吐率在保持高速響應(yīng)的同時li有著良好的可伸縮性和很高的吞吐率圖1-5是來自網(wǎng)易的性能分享圖1-5中左側(cè)是li查詢速度與odria/racle的對比可以看到在3個測試查詢中l(wèi)i分別比odria/racle快147倍314倍和59倍。同時圖1-5中右側(cè)展現(xiàn)了li的吞吐率及其可伸縮性在只有1個li實例的情況下li每秒可以處理近70個查詢已經(jīng)遠遠高于每秒20個查詢的一般水平更為理想的是隨著服務(wù)器的增加吞吐率也呈線性增加存在4個實例時可達到每秒230個查詢左右而這4個實例僅部署在一臺機器上理論上添加更多的應(yīng)用服務(wù)器后可以支持更大的并發(fā)率。圖1-5li的可伸縮性和吞吐率這主要還是歸功于預(yù)計算降低了查詢時所需的計算總量令li可以在相同的硬件配置下承載更多的并發(fā)查詢。1.5.5B及可視化工具集成paceli提供了豐富的以與現(xiàn)有的工具集成具體包括如下內(nèi)容。·接口與ableacelower等工具集成。·J接口與ai等Java工具集成。·est與Javacripeb網(wǎng)頁集成。分析師可以沿用他們最熟悉的工具與li一同工作或者在開放的上做二次開發(fā)和深度定制。另外li核心開發(fā)團隊也貢獻了paceeppeli的插件現(xiàn)在已經(jīng)可以用eppeli來訪問li服務(wù)。1.6與其他開源產(chǎn)品比較與paceli一樣致力于解決大數(shù)據(jù)查詢問題的其他開源產(chǎn)品也有不少比如pacerillpacepalaridive、Preso(aceboo)Spar等本節(jié)試圖將li與它們做一個簡單的比較。從底層技術(shù)的角度來看這些開源產(chǎn)品有很大的共性一些底層技術(shù)幾乎被所有的產(chǎn)品一致采用li也不例外。·大規(guī)模并行處理:可以通過增加機器的方式來擴容處理速度在相同的時間里處理更多的數(shù)據(jù)。·列式存儲:通過按列存儲提高單位時間里數(shù)據(jù)的/吞吐率還能跳過不需要訪問的列。·索引:利用索引配合查詢條件可以迅速跳過不符合條件的數(shù)據(jù)塊,僅掃描需要掃描的數(shù)據(jù)內(nèi)容。·壓縮:壓縮數(shù)據(jù)然后存儲使得存儲的密度更高在有限的/速率下在單位時間里讀取更多的記錄。綜上所述我們可以注意到所有這些方法都只是提高了單位時間內(nèi)處理數(shù)據(jù)的能力當(dāng)大家都一致采用這些技術(shù)時它們之間的區(qū)別將只停留在實現(xiàn)層面的代碼細節(jié)上最重要的是這些技術(shù)都不會改變一個事實那就是處理時間與數(shù)據(jù)量之間的正比例關(guān)系當(dāng)數(shù)據(jù)量翻倍時,(在不擴容的前提下)需要翻倍的時間來完成計算;列式存儲需要翻倍的存儲空間;索引下符合條件的記錄數(shù)也會翻倍;壓縮后的數(shù)據(jù)大小也還是之前的兩倍因此查詢速度也會隨之變成之前的兩倍當(dāng)數(shù)據(jù)量成十倍百倍地增長時這些技術(shù)的查詢速度就會成十倍百倍地下降最終變得不能接受。paceli的特色在于在上述的底層技術(shù)之外另辟蹊徑地使用了獨特的be預(yù)計算技術(shù)預(yù)計算事先將數(shù)據(jù)按維度組合進行了聚合,將結(jié)果保存為物化視圖經(jīng)過聚合物化視圖的規(guī)模就只由維度的基數(shù)來決定而不再隨著數(shù)據(jù)量的增長呈線性增長以電商為例如果業(yè)務(wù)擴張交易量增長了10倍只要交易數(shù)據(jù)的維度不變(供應(yīng)商/商品數(shù)量不變)聚合后的物化視圖將依舊是原先的大小查詢的速度也將保持不變。與那些類似產(chǎn)品相比這一底層技術(shù)的區(qū)別使得li從外在功能上呈現(xiàn)出了不同的特性具體如下。·S接口:除了rid以外所有的產(chǎn)品都支持或類接口巧合的是rid也是除了li以外查詢性能相對更好的一個這點除了rid有自己的存儲引擎之外可能還得益于其較為受限的查詢能力。·大數(shù)據(jù)支持:大多數(shù)產(chǎn)品的能力在億級到十億級數(shù)據(jù)量之間再大的數(shù)據(jù)量將顯著降低查詢的性能而li因為采用預(yù)計算技術(shù)因此查詢速度不受數(shù)據(jù)量限制有實際案例證明數(shù)據(jù)量在千億級別時li系統(tǒng)仍然能夠保有秒級別的查詢性能。·查詢速度:如前文所述一般產(chǎn)品的查詢速度都會不可避免地隨著數(shù)據(jù)量的增長而下降而li則能夠在數(shù)據(jù)量成倍增長的同時查詢速度保持不變而且這個差距也將隨著數(shù)據(jù)量的成倍增長而變得愈加明顯。·吞吐率:根據(jù)之前的實驗數(shù)據(jù)li的單例吞吐量一般在每秒70個查詢左右并且可以線性擴展而普通的產(chǎn)品因為所有計算都在查詢時完成所以需要調(diào)動集群的更多資源才能完成查詢通常極限在每秒20個查詢左右而且擴容成本較高需要擴展整個集群相對的li系統(tǒng)因為瓶頸不在整個集群而在于li服務(wù)器因此只需要增加li服務(wù)器就能成倍地提高吞吐率擴容成本低廉。1.7小結(jié)本章介紹了paceli的歷史背景和技術(shù)特點尤其是它基于預(yù)計算的大數(shù)據(jù)查詢原理理論上可以在任意大的數(shù)據(jù)規(guī)模上達到(1)常數(shù)級別的查詢速度這一點也是paceli與傳統(tǒng)查詢技術(shù)的關(guān)鍵區(qū)別,如圖1-6所示傳統(tǒng)技術(shù)如大規(guī)模并行計算和列式存儲的查詢速度都在()級別與數(shù)據(jù)規(guī)模增線性關(guān)系如果數(shù)據(jù)規(guī)模增長10倍那么()的查詢速度就會下降到十分之一無法滿足日益增長的數(shù)據(jù)需求依靠paceli我們不用再擔(dān)心查詢速度會隨著數(shù)據(jù)量的增長而減慢面對未來的數(shù)據(jù)挑戰(zhàn)時也能更有信心。圖1-6查詢時間復(fù)雜度(1)比()第2章快速入門第1章介紹了li的概況以及與其他Lonadoop技術(shù)的比較,相信讀者對li已經(jīng)有了一個整體的認識本章將詳細介紹li的一些核心概念然后帶領(lǐng)讀者逐步定義數(shù)據(jù)模型創(chuàng)建be并通過來查詢be以幫助讀者對li有更為直觀的了解。2.1核心概念在開始使用li之前我們有必要先了解一下li里的各種概念和術(shù)語為后續(xù)章節(jié)的學(xué)習(xí)奠定基礎(chǔ)。2.1.1數(shù)據(jù)倉庫、P與BI數(shù)據(jù)倉庫(aaareose)是一種信息系統(tǒng)的資料儲存理論此理論強調(diào)的是利用某些特殊的資料儲存方式讓所包含的資料特別有利于分析和處理從而產(chǎn)生有價值的資訊并可依此做出決策。利用數(shù)據(jù)倉庫的方式存放的資料具有一旦存入便不會隨時間發(fā)生變動的特性此外存入的資料必定包含時間屬性通常一個數(shù)據(jù)倉庫中會含有大量的歷史性資料并且它可利用特定的分析方式從其中發(fā)掘出特定的資訊。(liealicalProcess)聯(lián)機分析處理以多維度的方式分析數(shù)據(jù)而且能夠彈性地提供上卷(oll-p)下鉆(rill-dow)和透視分析(Pivo)等操作它是呈現(xiàn)集成性決策信息的方法多用于決策支持系統(tǒng)商務(wù)智能或數(shù)據(jù)倉庫其主要的功能在于方便大規(guī)模數(shù)據(jù)分析及統(tǒng)計計算可對決策提供參考和支持與之相區(qū)別的是聯(lián)機交易處理()聯(lián)機交易處理更側(cè)重于基本的日常的事務(wù)處理包括數(shù)據(jù)的增刪改查。·需要以大量歷史數(shù)據(jù)為基礎(chǔ)再配合上時間點的差異對多維度及匯整型的信息進行復(fù)雜的分析。·需要用戶有主觀的信息需求定義因此系統(tǒng)效率較佳。的概念在實際應(yīng)用中存在廣義和狹義兩種不同的理解方式。廣義上的理解與字面上的意思相同泛指一切不會對數(shù)據(jù)進行更新的分析處理但更多的情況下被理解為其狹義上的含義即與多維分析相關(guān)基于立方體(be)計算而進行的分析。(siesselliece)即商務(wù)智能指用現(xiàn)代數(shù)據(jù)倉庫技術(shù)在線分析技術(shù)數(shù)據(jù)挖掘和數(shù)據(jù)展現(xiàn)技術(shù)進行數(shù)據(jù)分析以實現(xiàn)商業(yè)價值。今天許多企業(yè)已經(jīng)建立了自己的數(shù)據(jù)倉庫用于存放和管理不斷增長的數(shù)據(jù);這些數(shù)據(jù)中蘊含著豐富的價值但只有通過使用一系列的分析工具進行大量的篩選計算和展示數(shù)據(jù)中蘊含的規(guī)律和潛在的信息才能被人們所發(fā)現(xiàn);分析人員可結(jié)合這些信息展開商業(yè)決策和市場活動,從而為用戶提供更好的服務(wù)或為企業(yè)產(chǎn)生更大的價值。2.1.2維度和度量維度和度量是數(shù)據(jù)分析中的兩個基本概念。維度是指審視數(shù)據(jù)的角度它通常是數(shù)據(jù)記錄的一個屬性例如時間地點等度量是基于數(shù)據(jù)所計算出來的考量值;它通常是一個數(shù)值,如總銷售額不同的用戶數(shù)等分析人員往往要結(jié)合若干個維度來審查度量值以便在其中找到變化規(guī)律在一個查詢中rop的屬性通常就是維度而所計算的值則是度量如下面的示例:在上面的這個查詢中par_d和ls_sie_id是維度s(price)和co(disictseller_id)是度量。2.1.3事實表和維度表事實表(Factable)是指存儲有事實記錄的表如系統(tǒng)日志銷售記錄等;事實表的記錄在不斷地動態(tài)增長所以它的體積通常遠大于其他表。維度表(iesionable)或維表有時也稱查找表(oopable),是與事實表相對應(yīng)的一種表;它保存了維度的屬性值可以跟事實表做關(guān)聯(lián);相當(dāng)于將事實表上經(jīng)常重復(fù)出現(xiàn)的屬性抽取規(guī)范出來用一張表進行管理常見的維度表有:日期表(存儲與日期對應(yīng)的周月季度等的屬性)地點表(包含國家省/州城市等屬性)等使用維度表有諸多好處具體如下。·縮小了事實表的大小。·便于維度的管理和維護增加刪除和修改維度的屬性不必對事實表的大量記錄進行改動。·維度表可以為多個事實表重用以減少重復(fù)工作。2.1.4Cub、Cuboid和CubeSntbe(或aabe)即數(shù)據(jù)立方體是一種常用于數(shù)據(jù)分析與索引的技術(shù);它可以對原始數(shù)據(jù)建立多維度索引通過be對數(shù)據(jù)進行分析,可以大大加快數(shù)據(jù)的查詢效率。boid在li中特指在某一種維度組合下所計算的數(shù)據(jù)。beee是指針對源數(shù)據(jù)中的某一個片段計算出來的be數(shù)據(jù)通常數(shù)據(jù)倉庫中的數(shù)據(jù)數(shù)量會隨著時間的增長而增長而beSee也是按時間順序來構(gòu)建的。2.2在i中準(zhǔn)備數(shù)據(jù)2.1節(jié)介紹了li中的常見概念本節(jié)將介紹準(zhǔn)備ive數(shù)據(jù)的一些注意事項需要被分析的數(shù)據(jù)必須先保存為ive表的形式然后li才能從ive中導(dǎo)入數(shù)據(jù)創(chuàng)建be。paceive是一個基于adoop的數(shù)據(jù)倉庫工具最初由aceboo開發(fā)并貢獻到pace軟件基金會ive可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為數(shù)據(jù)庫表并可以將語句轉(zhuǎn)換為apedce或e任務(wù)進行運行從而讓用戶以類(ive也稱)的方式管理和查詢adoop上的海量數(shù)據(jù)。此外ive還提供了多種方式(如命令行和eb服務(wù)等)可供第三方方便地獲取和使用元數(shù)據(jù)并進行查詢今天ive已經(jīng)成為adoop數(shù)據(jù)倉庫的首選是adoop上不可或缺的一個重要組件很多項目都已兼容或集成了ive基于此情況li選擇ive作為原始數(shù)據(jù)的主要來源。在ive中準(zhǔn)備待分析的數(shù)據(jù)是使用li的前提;將數(shù)據(jù)導(dǎo)入到ive表中的方法有很多用戶管理數(shù)據(jù)的技術(shù)和工具也各式各樣因此具體步驟不在本書的討論范圍之內(nèi)如有需要可以參考ive的使用文檔這里將著重闡述需要注意的幾個事項。2.2.1星形模型數(shù)據(jù)挖掘有幾種常見的多維數(shù)據(jù)模型如星形模型(arcea)雪花模型(ow?laeScea)事實星座模型(actosellaio)等。星形模型中有一張事實表以及零個或多個維度表;事實表與維度表通過主鍵外鍵相關(guān)聯(lián)維度表之間沒有關(guān)聯(lián)就像很多星星圍繞在一個恒星周圍故取名為星形模型。如果將星形模型中某些維度的表再做規(guī)范抽取成更細的維度表,然后讓維度表之間也進行關(guān)聯(lián)那么這種模型稱為雪花模型。星座模型是更復(fù)雜的模型其中包含了多個事實表而維度表是公用的可以共享。不過li只支持星形模型的數(shù)據(jù)集這是基于以下考慮。·星形模型是最簡單也是最常用的模型。·由于星形模型只有一張大表因此它相比于其他模型更適合于大數(shù)據(jù)處理。·其他模型可以通過一定的轉(zhuǎn)換變?yōu)樾切文P汀?.2.2維度表的設(shè)計除了數(shù)據(jù)模型以外li還對維度表有一定的要求具體要求如下。1)要具有數(shù)據(jù)一致性主鍵值必須是唯一的;li會進行檢查如果有兩行的主鍵值相同則會報錯。2)維度表越小越好因為li會將維度表加載到內(nèi)存中供查詢;過大的表不適合作為維度表默認的閾值是300。3)改變頻率低li會在每次構(gòu)建中試圖重用維度表的快照如果維度表經(jīng)常改變的話重用就會失效這就會導(dǎo)致要經(jīng)常對維度表創(chuàng)建快照。4)維度表最好不要是ive視圖(iew)雖然在li1.5.3中加入了對維度表是視圖這種情況的支持但每次都需要將視圖進行物化從而導(dǎo)致額外的時間開銷。2.2.3i表分區(qū)ive表支持多分區(qū)(Pariio)簡單地說一個分區(qū)就是一個文件目錄存儲了特定的數(shù)據(jù)文件當(dāng)有新的數(shù)據(jù)生成的時候可以將數(shù)據(jù)加載到指定的分區(qū)讀取數(shù)據(jù)的時候也可以指定分區(qū)對于查詢?nèi)绻樵冎兄付朔謪^(qū)列的屬性條件則ive會智能地選擇特定分區(qū)(也就是目錄)從而避免全量數(shù)據(jù)的掃描減少讀寫操作對集群的壓力。下面列舉的一組演示了如何使用分區(qū):li支持增量的be構(gòu)建通常是按時間屬性來增量地從ive表中抽取數(shù)據(jù)如果ive表正好是按此時間屬性做分區(qū)的話那么就可以利用到ive分區(qū)的好處每次在ive構(gòu)建的時候都可以直接跳過不相干日期的數(shù)據(jù)節(jié)省be構(gòu)建的時間這樣的列在li里也稱為分割時間列(Pariionieol)通常它應(yīng)該也是ive表的分區(qū)列。2.2.4了解維度的基數(shù)維度的基數(shù)(ardiali)指的是該維度在數(shù)據(jù)集中出現(xiàn)的不同值的個數(shù);例如“國家”是一個維度如果有200個不同的值那么此維度的基數(shù)就是200通常一個維度的基數(shù)會從幾十到幾萬個不等個別維度如“用戶”的基數(shù)會超過百萬甚至千萬基數(shù)超過一百萬的維度通常被稱為超高基數(shù)維度(lraihardiali)需要引起設(shè)計者的注意。be中所有維度的基數(shù)都可以體現(xiàn)出be的復(fù)雜度如果一個be中有好幾個超高基數(shù)維度那么這個be膨脹的概率就會很高在創(chuàng)建be前需要對所有維度的基數(shù)做一個了解這樣就可以幫助設(shè)計合理的be計算基數(shù)有多種途徑最簡單的方法就是讓ive執(zhí)行一個cotdisic的查詢;li也提供了計算基數(shù)的方法在2.3.1節(jié)中會進行介紹。2.2.5Spleta如果需要一些簡單數(shù)據(jù)來快速體驗paceli也可以使用paceli自帶的apleaa運行“${_}/bi/saple.s”來導(dǎo)入Sapleaa然后就能按照下面的流程繼續(xù)創(chuàng)建模型和be。具體請執(zhí)行下面命令將apleaa導(dǎo)入ive數(shù)據(jù)庫。Sapleaa測試的樣例數(shù)據(jù)集總共僅1左右共計3張表其中事實表有10000條數(shù)據(jù)因為數(shù)據(jù)規(guī)模較小有利于在虛擬機中進行快速實踐和操作數(shù)據(jù)集是一個規(guī)范的星形模型結(jié)構(gòu)它總共包含了3個數(shù)據(jù)表:·_是事實表保存了售訂單的明細信息各列分別保存著賣家商品分類訂單金額商品數(shù)量等信息每一行對應(yīng)著一筆交易訂單。·__是維表保存了商品分類的詳細介紹例如商品分類名稱等。·__也是維表時間的擴展信息如單個日期所在的年始月始周始年份月份等。這3張表一起構(gòu)成了整個星形模型。2.3設(shè)計Cube如果數(shù)據(jù)已經(jīng)在ive中準(zhǔn)備好了并且已經(jīng)滿足了2.2節(jié)中介紹的條件那么就可以開始設(shè)計和創(chuàng)建be了本節(jié)將按通常的步驟介紹be是如何進行創(chuàng)建的。2.3.1導(dǎo)入i表定義登錄li的eb界面創(chuàng)建新的或選擇一個已有的項目之后需要做的就是將ive表的定義導(dǎo)入到li中。單擊eb界面的odel→aasorce下的“oadiveable”圖標(biāo)然后輸入表的名稱(可以一次導(dǎo)入多張表以逗號分隔表名如圖2-1所示)單擊按鈕“Sc”li就會使用ive的從ive中獲取表的屬性信息。導(dǎo)入成功后表的結(jié)構(gòu)信息會以樹狀的形式顯示在頁面的左側(cè)可以單擊展開或收縮如圖2-2所示。圖2-1輸入ive表名圖2-2完成導(dǎo)入的ive表同時li會在后臺觸發(fā)一個apedce任務(wù)計算此表每個列的基數(shù)通常稍過幾分鐘之后再刷新頁面就會看到顯示出來的基數(shù)信息,如圖2-3所示。圖2-3計算后各列的基數(shù)需要注意的是這里li對基數(shù)的計算方法采用的是peroog的近似算法與精確值略有誤差但作為參考值已經(jīng)足夠了。2.3.2創(chuàng)建數(shù)據(jù)模型有了表信息之后就可以開始創(chuàng)建數(shù)據(jù)模型(aaodel)了數(shù)據(jù)模型是be的基礎(chǔ)它主要用于描述一個星形模型有了數(shù)據(jù)模型以后定義be的時候就可以直接從此模型定義的表和列中進行選擇了省去重復(fù)指定連接(joi)條件的步驟基于一個數(shù)據(jù)模型還可以創(chuàng)建多個be,以方便減少用戶的重復(fù)性工作。在li界面的“odels”頁面中單擊“ew”→“ewodel”開始創(chuàng)建數(shù)據(jù)模型給模型輸入名稱之后選擇一個事實表(必需的)然后添加維度表(可選)如圖2-4所示。圖2-4選擇事實表添加維度表的時候需要選擇連接的類型:是er還是e然后選擇連接的主鍵和外鍵這里也支持多主鍵如圖2-5所示。圖2-5選擇維度表接下來選擇會用作維度和度量的列這里只是選擇一個范圍不代表這些列將來一定要用作be的維度或度量你可以把所有可能會用到的列都選進來后續(xù)創(chuàng)建be的時候?qū)⒅荒軓倪@些列中進行選擇。選擇維度列時維度可以來自事實表或維度表如圖2-6所示。選擇度量列時度量只能來自事實表如圖2-7所示。最后一步是為模型補充分割時間列信息和過濾條件如果此模型中的事實表記錄是按時間增長的那么可以指定一個日期/時間列作為模型的分割時間列從而可以讓be按此列做增量構(gòu)建關(guān)于增量構(gòu)建的具體內(nèi)容請參見第3章。圖2-6選擇維度列圖2-7選擇度量列過濾(Filer)條件是指如果想把一些記錄忽略掉那么這里可以設(shè)置一個過濾條件li在向ive請求源數(shù)據(jù)的時候會帶上此過濾條件。在圖2-8所示的示例中會直接排除掉金額小于等于0的記錄。圖2-8選擇分區(qū)列和設(shè)定過濾器最后單擊“Save”保存此數(shù)據(jù)模型隨后它將出現(xiàn)在“odels”的列表中。2.3.3創(chuàng)建Cube本節(jié)將快速介紹創(chuàng)建be時的各種配置選項但是由于篇幅的限制這里將不會對be的配置和be的優(yōu)化進行深入的展開介紹讀者可以在后續(xù)的章節(jié)(如第6章“be優(yōu)化”)中找到關(guān)于be的更詳細的介紹接下來開始be的創(chuàng)建;單擊“ew”選擇“ewbe”會開啟一個包含若干步驟的向?qū)А5谝豁撨x擇要使用的數(shù)據(jù)模型并為此be輸入一個唯一的名稱(必需的)和描述(可選的)(如圖2-9所示);這里還可以輸入一個郵件通知列表用于在構(gòu)建完成或出錯時收到通知如果不想接收處于某些狀態(tài)的通知那么可以從“oi?icaionves”中將其去掉。圖2-9be基本信息第二頁選擇be的維度可以通過以下兩個按鈕來添加維度。·“ddiesio”:逐個添加維度可以是普通維度也可以是衍生(erived)維度。·“oeeraor”:批量選擇并添加讓li自動完成其他信息。使用第一種方法的時候需要為每個維度起個名字然后選擇表和列(如圖2-10所示)。圖2-10添加普通維度如果是衍生維度的話則必須是來自于某個維度表一次可以選擇多個列(如圖2-1所示);由于這些列值都可以從該維度表的主鍵值中衍生出來所以實際上只有主鍵列會被be加入計算而在li的具體實現(xiàn)中往往采用事實表上的外鍵替代主鍵進行計算和存儲但是在邏輯上可以認為衍生列來自于維度表的主鍵。使用第二種方法的時候li會用一個樹狀結(jié)構(gòu)呈現(xiàn)出所有的列,用戶只需要勾選所需要的列即可li會自動補齊其他信息從而方便用戶的操作(如圖2-12所示)請注意在這里li會把維度表上的列都創(chuàng)建成衍生維度這也許不是最合適的在這種情況下請使用第一種方法。圖2-1添加衍生維度第三頁創(chuàng)建度量li默認會創(chuàng)建一個o(1)的度量可以單擊“easre”按鈕來添加新的度量li支持的度量有:、T_等請選擇需要的度量類型然后再選擇適當(dāng)?shù)膮?shù)(通常為列名)圖2-13是一個(price)的示例。圖2-12批量添加維度圖2-13添加度量重復(fù)上面的步驟創(chuàng)建所需要的度量li可以支持在一個be中添加多達上百個的度量;添加完所有度量之后單擊“e”如圖2-14所示。圖2-14度量列表第四頁是關(guān)于be數(shù)據(jù)刷新的設(shè)置在這里可以設(shè)置自動合并的閾值數(shù)據(jù)保留的最短時間以及第一個ee的起點時間(如果be有分割時間列的話)詳細內(nèi)容請參考第3章。第五頁高級設(shè)置在此頁面上可以設(shè)置聚合組和owe(如圖2-16所示)。圖2-15刷新設(shè)置li默認會把所有維度都放在同一個聚合組中;如果維度數(shù)較多(例如10)那么建議用戶根據(jù)查詢的習(xí)慣和模式單擊“ewreaionrop”將維度分為多個聚合組通過使用多個聚合組可以大大降低be中的boid數(shù)量下面來舉例說明如果一個be有()個維度,那么默認它會有2n個boid;如果把這些維度分為兩個不相交的聚合組那么boid的數(shù)量將被減少為2m2n。在單個聚合組中可以對維度設(shè)置高級屬性如adaor、ierarcJoi等這幾種屬性都是為優(yōu)化be的計算而設(shè)計的了解這些屬性的含義對日后更好地使用be至關(guān)重要。adaor維度指的是那些總是會出現(xiàn)在ere條件或rop語句里的維度;通過將某個維度指定為adaorli就可以不用預(yù)計算那些不包含此維度的boid從而減少計算量。ierarc是一組有層級關(guān)系的維度例如“國家”“省”“市”這里的“國家”是高級別的維度“省”“市”依次是低級別的維度用戶會按高級別維度進行查詢也會按低級別維度進行查詢但在查詢低級別維度時,往往都會帶上高級別維度的條件而不會孤立地審視低級別維度的數(shù)據(jù)例如用戶會單擊“國家”作為維度來查詢匯總數(shù)據(jù)也可能單擊“國家”+“省”或者“國家”+“省”+“市”來查詢但是不會跨越國家直接rop“省”或“市”通過指定ierarcli可以省略不滿足此模式的boid。Joi是將多個維度組合成一個維度其通常適用于如下兩種情形。·總是會在一起查詢的維度。·基數(shù)很低的維度。li以e-ale的方式將be存儲到ase中ase的e也就是owe是由各維度的值拼接而成的;為了更高效地存儲這些值,li會對它們進行編碼和壓縮;每個維度均可以選擇合適的編碼(codi)方式默認采用的是字典(icioar)編碼技術(shù);除了字典以外還有整數(shù)()和固定長度(iede)的編碼。字典編碼是將此維度下的所有值構(gòu)建成一個從sri到i的映射表;li會將字典序列化保存在be中存儲i值從而大大減小存儲的大小另外字典是保持順序的即如果字符串比字符串大的話那么A編碼后的i值也會比編碼后的值大;這樣可以使得在ase中進行比較查詢的時候依然使用編碼后的值而無需解碼。圖2-16高級設(shè)置字典非常適合于非固定長度的sri類型值的維度而且用戶無需指定編碼后的長度;但是由于使用字典需要維護一張映射表因此如果此維度的基數(shù)很高那么字典的大小就非常可觀從而不適合于加載到內(nèi)存中在這種情況下就要選擇其他的編碼方式了li中字典編碼允許的基數(shù)上限默認是500萬(由參數(shù)“l(fā)i.dicioar.a.cardiali”配置)。整數(shù)(i)編碼適合于對i或bii類型的值進行編碼它無需額外存儲同時還可以支持很大的基數(shù)用戶需要根據(jù)值域選擇編碼的長度例如有一個“手機號碼”的維度它是一個1位的數(shù)字們知道它大于21但是小于29-1那么使用i(5)即可滿足要求每個值占用5字節(jié)比按字符存儲(1字節(jié))要少占用一半以上的空間。當(dāng)上面幾種編碼方式都不適合的時候就需要使用固定長度的編碼了;此編碼方式其實只是將原始值截斷或補齊成相同長度的一組字節(jié)沒有額外的轉(zhuǎn)換所以空間效率較差通常只是作為一種權(quán)宜手段。各維度在owes中的順序?qū)τ诓樵兊男阅軙a(chǎn)生較明顯的影響。在這里用戶可以根據(jù)查詢的模式和習(xí)慣通過拖曳的方式調(diào)整各個維度在owes上的順序(如圖2-17所示)通常的原則是將過濾頻率較高的列放置在過濾頻率較低的列之前將基數(shù)高的列放置在基數(shù)低的列之前這樣做的好處是充分利用過濾條件來縮小在ase中掃描的范圍,從而提高查詢的效率。第五頁為be配置參數(shù)和其他adoop工具一樣li使用了很多配置參數(shù)以提高靈活性用戶可以根據(jù)具體的環(huán)境場景等配置不同的參數(shù)進行調(diào)優(yōu)li全局的參數(shù)值可在co/peries文件中進行配置;如果be需要覆蓋全局設(shè)置的話則需要在此頁面中指定單擊“roper”按鈕然后輸入?yún)?shù)名和參數(shù)值如圖2-18所示指定“l(fā)i.base.reio.c1”這樣此be在存儲的時候li將會為每個ableeio分配1來創(chuàng)建一個ableeio。圖2-17owe設(shè)置圖2-18覆蓋默認參數(shù)然后單擊e跳轉(zhuǎn)到最后一個確認頁面如有修改則單擊“rev”按鈕返回以修改最后再單擊“Save”按鈕進行保存一個be就創(chuàng)建完成了創(chuàng)建好的be會顯示在“bes”列表中如要對be的定義進行修改只需單擊“di”按鈕就可以進行修改也可以展開此be行以查看更多的信息如J格式的元數(shù)據(jù)訪問權(quán)限通知列表等。2.4構(gòu)建Cube·注意本節(jié)將快速介紹構(gòu)建be相關(guān)的操作說明和設(shè)置因受到篇幅的限制許多具體內(nèi)容無法深入展開讀者可以從后續(xù)的第3章和第4章中獲得更詳細的介紹。新創(chuàng)建的be只有定義而沒有計算的數(shù)據(jù)它的狀態(tài)是“”是不會被查詢引擎挑中的要想讓be有數(shù)據(jù)還需要對它進行構(gòu)建be的構(gòu)建方式通常有兩種:全量構(gòu)建和增量構(gòu)建;兩者的構(gòu)建步驟是完全一樣的區(qū)別只在于構(gòu)建時讀取的數(shù)據(jù)源是全集還是子集。be的構(gòu)建包含如下步驟由任務(wù)引擎來調(diào)度執(zhí)行。1)創(chuàng)建臨時的ive平表(從ive讀取數(shù)據(jù))。2)計算各維度的不同值并收集各boid的統(tǒng)計數(shù)據(jù)。3)創(chuàng)建并保存字典。4)保存boid統(tǒng)計信息。5)創(chuàng)建able。6)計算be(一輪或若干輪apedce)。7)將be的計算結(jié)果轉(zhuǎn)成ile。8)加載ile到ase。9)更新be元數(shù)據(jù)。10)垃圾回收。以上步驟中前5步是為計算be而做的準(zhǔn)備工作例如遍歷維度值來創(chuàng)建字典對數(shù)據(jù)做統(tǒng)計和估算以創(chuàng)建able等;第6)步是真正的be計算取決于所使用的be算法它可能是一輪apedce任務(wù)也可能是(在沒有優(yōu)化的情況下可以被視作是維度數(shù))輪迭代的apedce由于be運算的中間結(jié)果是以SeqeceFile的格式存儲在上的所以為了導(dǎo)入到ase中還需要第7)步將這些結(jié)果轉(zhuǎn)換成ile(ase文件存儲格式)第8)步通過使用aseload工具將ile導(dǎo)入進ase集群這一步完成之后able就可以查詢到數(shù)據(jù)了。第9)步更新be的數(shù)據(jù)將此次構(gòu)建的ee的狀態(tài)從“”更新為“”表示已經(jīng)可供查詢了最后一步清理構(gòu)建過程中生成的臨時文件等垃圾釋放集群資源。oior頁面會顯示當(dāng)前項目下近期的構(gòu)建任務(wù)圖2-19顯示了一個正在運行的be構(gòu)建的任務(wù)當(dāng)前進度為46%多。圖2-19任務(wù)列表單擊任務(wù)右邊的“”按鈕展開可以得到任務(wù)每一步的詳細信息如圖2-20所示。圖2-20任務(wù)步驟列表如果任務(wù)中的某一步是執(zhí)行adoop任務(wù)的話那么會顯示adoop任務(wù)的鏈接單擊即可跳轉(zhuǎn)到對應(yīng)的adoop任務(wù)監(jiān)測頁面如圖2-21所示。如果任務(wù)執(zhí)行中的某一步出現(xiàn)報錯那么任務(wù)引擎會將任務(wù)狀態(tài)置為“”并停止后續(xù)的執(zhí)行等待用戶排錯在錯誤排除之后用戶可以單擊“ese”從上次失敗的地方恢復(fù)執(zhí)行或者如果需要修改be或重新開始構(gòu)建那么用戶需要單擊“iscard”來丟棄此次構(gòu)建。接下來將介紹幾種不同的構(gòu)建方式。圖2-21apedce任務(wù)監(jiān)測頁面2.4.1全量構(gòu)建和增量構(gòu)建1.全量構(gòu)建對數(shù)據(jù)模型中沒有指定分割時間列信息的beli會采用全量構(gòu)建即每次從ive中讀取全部的數(shù)據(jù)來開始構(gòu)建通常它適用于以下兩種情形。·事實表的數(shù)據(jù)不是按時間增長的。·事實表的數(shù)據(jù)比較小或更新頻率很低全量構(gòu)建不會造成太大的開銷。2.增量構(gòu)建增量構(gòu)建的時候li每次都會從ive中讀取一個時間范圍內(nèi)的數(shù)據(jù)然后進行計算并以一個ee的形式進行保存下次再構(gòu)建的時候會自動以上次結(jié)束的時間為起點時間再選擇新的終止時間進行構(gòu)建經(jīng)過多次構(gòu)建be中將會有多個See依次按時間順序進行排列如e-1e-2…e-查詢的時候li會查詢一個或多個See然后再做聚合計算以便返回正確的結(jié)果給請求者。使用增量構(gòu)建的好處是每次只需要對新增數(shù)據(jù)進行計算從而避免了對歷史數(shù)據(jù)進行重復(fù)計算對于數(shù)據(jù)量很大的be使用增量構(gòu)建是非常有必要的。圖2-22是構(gòu)建一個ee的be時的輸入框需要用戶選擇時間范圍。圖2-22提交增量構(gòu)建在從ive讀取源數(shù)據(jù)的時候li會帶上此時間條件如圖2-23所示。圖2-23增量構(gòu)建的L·注意增量構(gòu)建抽取數(shù)據(jù)的范圍采用了前包后閉的原則即包含了開始時間但不包含結(jié)束時間從而保證上一個ee的結(jié)束時間與下一個See的起始時間相同但數(shù)據(jù)不會重復(fù)。下一次構(gòu)建的時候起始時間必須是上一次的結(jié)束時間如果使用li的eb觸發(fā)那么起始時間會被自動填寫用戶只需要選擇結(jié)束時間如果使用est觸發(fā)用戶則需要確保時間范圍不會與已有的See有重合。2.4.2歷史數(shù)據(jù)刷新be構(gòu)建完成以后如果某些歷史數(shù)據(jù)發(fā)生了改動那么需要針對相應(yīng)的See進行重新計算這種構(gòu)建稱為刷新刷新通常只針對增量構(gòu)建的be而言因為全量構(gòu)建的be只要重新全部構(gòu)建就可以得到更新;而增量更新的be因為有多個ee因此需要先選擇要刷新的See然后再進行刷新。圖2-24是提交刷新的請求頁面用戶需要在下拉列表中選擇一個時間區(qū)間。圖2-24刷新已有的eet提交以后生成的構(gòu)建任務(wù)與最初的構(gòu)建任務(wù)完全一樣。在刷新的同時be仍然可以被查詢只不過返回的是陳舊數(shù)據(jù)當(dāng)See刷新完畢時新的ee會立即生效查詢開始返回最新的數(shù)據(jù)老ee則成為垃圾等待回收。2.4.3合并隨著時間的遷移be中可能會存在較多數(shù)量的See使得查詢性能下降并且會給ase集群管理帶來壓力對此需要適時地將一些See進行合并將若干個小ee合并成較大的See。合并的好處具體如下。·合并相同的e從而減少be的存儲空間。·由于ee減少了因此可以減少查詢時的二次聚合提高了查詢性能。·able的數(shù)量得以減少更便于集群的管理。下面來看看合并的操作步驟圖2-25中的be有兩個ee。圖2-25beee列表現(xiàn)在觸發(fā)一個合并單擊cios→ere;選擇要合并的起始Seet和結(jié)束See生成一個合并的任務(wù)如圖2-26所示。圖2-26提交合并任務(wù)合并的時候li將直接以當(dāng)初各個ee構(gòu)建時生成的boid文件作為輸入內(nèi)容而不需要從ive加載原始數(shù)據(jù)后續(xù)的步驟跟構(gòu)建時基本一致直到新的able加載完成后li才會卸載舊的able從而確保在整個合并過程中be都是可以查詢的。合并完成之后此be的See減少為1個如圖2-27所示。圖2-27合并后的eet2.5查詢Cube·注意本節(jié)將簡要介紹如何查詢be更多內(nèi)容請參考后續(xù)的章節(jié)(如第5章)。be構(gòu)建好以后狀態(tài)變?yōu)椤啊本涂梢赃M行查詢了li的查詢語言是標(biāo)準(zhǔn)的語句這是為了獲得與大多數(shù)系統(tǒng)和工具無縫集成的可能性通常的一個查詢語句類似于如下的:需要了解的是只有當(dāng)查詢的模式跟be定義相匹配的時候lin才能夠使用be的數(shù)據(jù)來完成查詢rop的列和ere條件里的列,必須是在iesio中定義的列而中的度量應(yīng)該跟be中定義的度量相一致。在一個項目下如果有多個基于同一模型的be而且它們都滿足查詢對表維度和度量的要求;那么li會挑選一個“最優(yōu)的”be來進行查詢;這是一種基于成本(cos)的選擇be的成本計算中包括多方面的因素例如be的維度數(shù)度量數(shù)據(jù)模型的復(fù)雜度等查詢引擎將為每個be為完成此估算一個成本值然后選擇成本最小的be來完成此查詢。如果查詢是在li的eb上進行的那么查詢結(jié)果會以表的形式展現(xiàn)出來如圖2-28所示所執(zhí)行的be名稱也會一同顯示用戶可以單擊“isaliaio”按鈕生成簡單的可視化圖形或單擊“por”按鈕將結(jié)果集下載到本地。圖2-28查詢結(jié)果展示2.6S參考paceli支持標(biāo)準(zhǔn)作為查詢語言但是有很多變體,li支持的只是所有變體中的一個子集并不是支持所有現(xiàn)存的語句和語法用戶在使用li之前需要對li所支持的有一個了解以避免走彎路。首先li作為引擎只支持查詢而不支持其他操作如插入更新等即所有的都必須是語句否則li會報錯。第二查詢li中語句的表名列名度量連接關(guān)系時需要至少跟一個be的模型相匹配;在設(shè)計be的時候需要充分考慮查詢的需求避免遺漏表列等信息。第三li使用pacealcie做S語法分析pacealcie是一個開源的引擎它提供了標(biāo)準(zhǔn)解析多種查詢優(yōu)化和連接各種數(shù)據(jù)源的能力;alcie項目在adoop中越來越引人注意并且已被眾多項目集成為解析器。一條語句首先需要被alcie解析然后才可以被li執(zhí)行下面是alcie中的S語句的語法(引自ps://calcie.apace.or/docs/reerece.l):第四不是所有的alcie能夠解析的S語句都可以被li執(zhí)行;還有一些功能現(xiàn)階段li(截止v1.5.3)還不支持未來會考慮加以實現(xiàn)目前已知的有如下三項功能。·idow函數(shù):ps://isses.apace.or/jira/browse/-1732·io:ps://isses.apace.or/jira/browse/-1206·eween:ps://isses.apace.or/jira/browse/-1770上述三個功能已經(jīng)在paceli主分支上得以實現(xiàn)但目前(2016年8月)還未包含在最新的發(fā)行版中如無意外應(yīng)該會在下一個發(fā)行版中發(fā)布。2.7小結(jié)本章介紹了使用paceli必備的基本概念如星形數(shù)據(jù)模型事實表維表維度度量等并在這些基礎(chǔ)上快速創(chuàng)建了基于apleaa的模型構(gòu)建be最后執(zhí)行查詢帶領(lǐng)讀者體驗了paceli的主要使用過程后續(xù)的章節(jié)將繼續(xù)展開和探討這個過程中的一些關(guān)鍵技術(shù)比如增量構(gòu)建可視化和be優(yōu)化等。第3章增量構(gòu)建第2章介紹了如何構(gòu)建be并利用其完成在線多維分析的查詢每次be的構(gòu)建都會從ive中批量讀取數(shù)據(jù)而對于大多數(shù)業(yè)務(wù)場景來說,ive中的數(shù)據(jù)處于不斷增長的狀態(tài)為了支持be中的數(shù)據(jù)能夠不斷地得到更新且無需重復(fù)地為已經(jīng)處理過的歷史數(shù)據(jù)構(gòu)建be因此對于be引入了增量構(gòu)建的功能。我們將be劃分為多個ee每個ee用起始時間和結(jié)束時間來標(biāo)志ee代表一段時間內(nèi)源數(shù)據(jù)的預(yù)計算結(jié)果在大部分情況下(例外情況見第4章“流式構(gòu)建”)一個ee的起始時間等于它之前那個See的結(jié)束時間同理它的結(jié)束時間等于它后面那個ee的起始時間同一個be下不同的See除了背后的源數(shù)據(jù)不同之外其他如結(jié)構(gòu)定義構(gòu)建過程優(yōu)化方法存儲方式等都完全相同。本章將首先介紹如何設(shè)計并創(chuàng)建能夠增量構(gòu)建的be然后介紹實際測試或生產(chǎn)環(huán)境中觸發(fā)增量構(gòu)建的方法最后將會介紹如何處理由于增量構(gòu)建而導(dǎo)致的See碎片以保持li的查詢性能。3.1為什么要增量構(gòu)建全量構(gòu)建可以看作增量構(gòu)建的一種特例:在全量構(gòu)建中be中只存在唯一的一個See該See沒有分割時間的概念因此也就沒有起始時間和結(jié)束時間全量構(gòu)建和增量構(gòu)建各有其適用的場景用戶可以根據(jù)自己的業(yè)務(wù)場景靈活地進行切換全量構(gòu)建和增量構(gòu)建的詳細對比如表3-1所示。表3-1全量構(gòu)建和增量構(gòu)建的對比對于全量構(gòu)建來說每當(dāng)需要更新be數(shù)據(jù)的時候它不會區(qū)分歷史數(shù)據(jù)和新加入的數(shù)據(jù)也就是說在構(gòu)建的時候會導(dǎo)入并處理所有的原始數(shù)據(jù)而增量構(gòu)建只會導(dǎo)入新ee指定的時間區(qū)間內(nèi)的原始數(shù)據(jù)并只對這部分原始數(shù)據(jù)進行預(yù)計算為了驗證這個區(qū)別可以到lin的oior頁面觀察構(gòu)建的第二步——創(chuàng)建ive中間表(reaeerediaelativeable)單擊紙張形的按鈕即可觀察該步驟的參數(shù):該構(gòu)建任務(wù)對應(yīng)于名為es_li_cbe_wio_slr_le_joi_ep的be構(gòu)建其e-e所包含的時間段為從2012-06-01(包含)到2013-01-01(不包含)可以看到在導(dǎo)入數(shù)據(jù)的ive命令中帶入了包含這兩個日期的過濾條件以此保證后續(xù)構(gòu)建的輸入僅包含2012-06-01到2013-01-01這段時間內(nèi)的數(shù)據(jù)這樣的過濾能夠減少增量構(gòu)建在后續(xù)的預(yù)計算中所需要處理的數(shù)據(jù)規(guī)模有利于減少集群的計算量加速ee構(gòu)建的時間。其次增量構(gòu)建的be和全量構(gòu)建的be在查詢時也有不同對于增量構(gòu)建的be由于不同時間的數(shù)據(jù)分布在不同的ee之中因此為了獲得完整的數(shù)據(jù)查詢引擎需要向存儲引擎請求讀取各個ee的數(shù)據(jù)當(dāng)然查詢引擎會根據(jù)查詢中的條件自動跳過不感興趣的See對于全量構(gòu)建的be查詢引擎只需要向存儲引擎訪問單個See所對應(yīng)的數(shù)據(jù)從存儲層返回的數(shù)據(jù)無需進行ee之間的聚合但是這也并非意味著查詢?nèi)繕?gòu)建的be不需要查詢引擎做任何額外的聚合為了加強性能單個ee的數(shù)據(jù)也有可能被分片存儲到引擎的多個分區(qū)上(參考第6章)從而導(dǎo)致查詢引擎可能仍然需要對單個See不同分區(qū)的數(shù)據(jù)做進一步的聚合當(dāng)然整體來說增量構(gòu)建的be上的查詢會比全量構(gòu)建的做更多的運行時聚合而這些運行時聚合都發(fā)生在單點的查詢引擎之上因此通常來說增量構(gòu)建的be上的查詢會比全量構(gòu)建的be上的查詢要慢一些。可以看到日積月累增量構(gòu)建的be中的See越來越多根據(jù)上一段的分析可以猜測到該be的查詢性能也會越來越慢因為需要在單點的查詢引擎中完成越來越多的運行時聚合為了保持查詢性能,be的管理員需要定期地將某些ee合并在一起或者讓be根據(jù)See保留策略自動地淘汰那些不會再被查詢到的陳舊ee關(guān)于這部分的詳細內(nèi)容會在3.4.1節(jié)中展開詳細討論。最后我們可以得到這樣的結(jié)論:對于小數(shù)據(jù)量的be或者經(jīng)常需要全表更新的be使用全量構(gòu)建需要更少的運維精力以少量的重復(fù)計算降低生產(chǎn)環(huán)境中的維護復(fù)雜度而對于大數(shù)據(jù)量的be例如對于一個包含兩年歷史數(shù)據(jù)的be如果需要每天更新那么每天為了新數(shù)據(jù)而去重復(fù)計算過去兩年的數(shù)據(jù)就會變得非常浪費在這種情況下需要考慮使用增量構(gòu)建。3.2設(shè)計增量Cube3.2.1設(shè)計增量Cub的前提并非所有的be都適用于增量構(gòu)建be的定義必須包含一個時間維度用來分割不同的ee我們將這樣的維度稱為分割時間列(Pariionaeol)盡管由于歷史原因該命名中存在“dae”的字樣,但是分割時間列既可以是ive中的ae類型也可以是iesap類型或Sri類型無論是哪種類型li都要求用戶顯式地指定分割時間列的數(shù)據(jù)格式例如精確到年月日的ae類型(或者Sri類型)的數(shù)據(jù)格式可能是dd或--dd如果是精確到時分秒的iesap類型(或者Sri類型)那么數(shù)據(jù)格式可能是--D::。在一些場景中時間由長整數(shù)ixie來表示由于對該類型的支持存在爭議(詳情可參見ps://isses.apace.or/jira/browse/-1698)因此在目前的版本中并不支持使用長整數(shù)類型作為分割時間列。作為一種變通的方法可以在過程中克服這個問題具體來說就是在ive中為包含長整數(shù)時間列的表創(chuàng)建一個視圖將長整數(shù)時間列轉(zhuǎn)化為符合li規(guī)范的任意類型在后續(xù)的be設(shè)計中應(yīng)使用該視圖而不是原始的表。滿足了設(shè)計增量be的前提之后在進行增量構(gòu)建時將增量部分的起始時間和結(jié)束時間作為增量構(gòu)建請求的一部分提交給li的任務(wù)引擎任務(wù)引擎會根據(jù)起始時間和結(jié)束時間從ive中抽取相應(yīng)時間的數(shù)據(jù)并對這部分數(shù)據(jù)做預(yù)計算處理然后將預(yù)計算的結(jié)果封裝成為一個新的See并將相應(yīng)的信息保存到元數(shù)據(jù)和存儲引擎中一般來說,增量部分的起始時間等于be中最后一個ee的結(jié)束時間。3.2.2增量Cub的創(chuàng)建創(chuàng)建增量be的過程和創(chuàng)建普通be的過程基本類似只是增量be會有一些額外的配置要求。1.odel層面的設(shè)置每個be背后都關(guān)聯(lián)著一個odelbe之于odel就好像Java中的bjec之于lass如同3.2.1節(jié)中所描述的增量構(gòu)建的be需要指定分割時間列同一個odel下不同分割時間列的定義應(yīng)該是相同的因此我們將分割時間列的定義放到了odel之中odel的創(chuàng)建和修改在第2章中已經(jīng)介紹過這里將跳過重復(fù)的部分直接進入odelesier的最后一步Seis來添加分割時間列如圖3-1所示。圖3-1定義分割時間列目前分割時間列必須是事實表上的列且它的格式必須滿足3.2.1節(jié)中所描述的要求一般來說如果年月日已經(jīng)足夠幫助分割不同的See那么在大部分情況下日期列是分割時間列的首選當(dāng)用戶需要更細的分割粒度時例如用戶需要每6小時增量構(gòu)建一個新的ee那么對于這種情況則需要挑選包含年月日時分秒的列作為分割時間列。在一些用戶場景中年月日和時分秒并不體現(xiàn)在同一個列上例如在用戶的事實表上有兩個列分別是“日期”和“時間”分別保存記錄發(fā)生的日期(年月日)和時間(時分秒)對于這樣的場景允許用戶指定一個額外的分割時間列來指定除了年月日之外的時分秒信息為了區(qū)分我們將之前的分割時間列稱為常規(guī)分割時間列將這個額外的列稱為補充分割時間列在勾選了“asaseparae”ieofeda“col?”選項之后(如圖3-2所示)用戶可以選擇一個符合時分秒時間格式的列作為補充的分割時間列由于日期的信息已經(jīng)體現(xiàn)在了常規(guī)的分割時間列之上因此補充的分割時間列中不應(yīng)該再具有日期的信息反過來說如果這個列中既包含年月日信息又包含時分秒信息那么用戶應(yīng)該將它指定為格式是--D::的常規(guī)分割時間列而不需要勾選“asaseparae”ieofeda“col?”在大部分場景下用戶可以跳過補充分割時間列。圖3-2補充時間分割列2.be層面的設(shè)置be的創(chuàng)建和修改在第2章中已經(jīng)做過介紹這里將跳過重復(fù)的部分直接進入beesier的“eresheis”這里的設(shè)置目前包含“oereresolds”“eeionresold”和“Pariionartae”“ariionartae”是指be默認的第一個See的起始時間。同一個odel下不同的be可以指定不同的起始時間因此該設(shè)置項出現(xiàn)在beesier之中“oereresolds”用于指定See自動合并的閾值而“eeionresold”則用于指定將過期的See自動拋棄3.4節(jié)將詳細介紹這兩個功能。3.3觸發(fā)增量構(gòu)建3.3.1b觸發(fā)在eb上觸發(fā)be的增量構(gòu)建與觸發(fā)全量構(gòu)建的方式基本相同在eb的odel頁面中選中想要增量構(gòu)建的be單擊cio→ild如圖3-3所示。不同于全量構(gòu)建增量構(gòu)建的be會在此時彈出
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股東紀律協(xié)議書
- 聯(lián)勤機制協(xié)議書
- 豬欄租用協(xié)議書
- 租用混凝土資質(zhì)協(xié)議書
- 股份平分協(xié)議書
- 對塑膠過敏免責(zé)協(xié)議書
- 大學(xué)生入學(xué)就業(yè)協(xié)議書
- 房屋買租賃合同協(xié)議書
- 幼兒園煤氣供應(yīng)協(xié)議書
- 租裝載機協(xié)議書
- 夜場水煙合作協(xié)議書
- 河南省青桐鳴大聯(lián)考普通高中2024-2025學(xué)年高三考前適應(yīng)性考試地理試題及答案
- 管道勞務(wù)分包協(xié)議書
- 2025-2030中國鋰電子電池行業(yè)市場深度調(diào)研及前景趨勢與投資研究報告
- 江蘇省南京市建鄴區(qū)2023-2024學(xué)年八年級下學(xué)期期末考試物理試題【含答案解析】
- 公立醫(yī)院與民營醫(yī)院醫(yī)聯(lián)體合作協(xié)議書(2篇)
- 25《慢性子裁縫和急性子顧客》核心素養(yǎng)公開課一等獎創(chuàng)新教學(xué)設(shè)計
- 退出聯(lián)合診所協(xié)議書
- 物業(yè)管理服務(wù)交接方案
- 港股通知識測試題及答案
- 組織學(xué)與胚胎學(xué)知到課后答案智慧樹章節(jié)測試答案2025年春浙江中醫(yī)藥大學(xué)
評論
0/150
提交評論