本書由Apache Kylin核心開發(fā)團隊編寫,近兩年Apache Kylin隨著社區(qū)持續(xù)貢獻的熱度和在不同領域業(yè)務場景的深入實踐應用,新的功能和特性不斷涌現(xiàn),這樣就迫切需要更新內(nèi)容來滿足廣大Apache Kylin 的使用者和關注人群的需要。本書從Apache Kylin的架構和設計,各個模塊的使用,與第三方的整合,二次開發(fā)以及開源實踐等各個方面進行講解,為各位讀者呈現(xiàn)*核心的設計理念和哲學、算法和技術等。
“麒麟出沒,必有祥瑞!
—中國古諺語
“與Apache Kylin團隊一起合作使Kylin孵化成為頂級項目對我而言非常激動人心,Kylin在技術方面當然是振奮人心的,但同樣令人興奮的是Kylin 代表了亞洲國家,特別是中國,在開源社區(qū)中越來越高的參與度!
—Ted Dunning Apache 孵化項目副總裁,MapR 首席應用架構師
今天,隨著移動互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、AI等各種技術的快速興起,數(shù)據(jù)成了所有這些技術背后最重要,也是最有價值的“資產(chǎn)”。如何從數(shù)據(jù)中獲得有價值的信息呢?這個問題驅(qū)動了相關技術的發(fā)展,從最初的基于文件的檢索、分析程序,到數(shù)據(jù)倉庫理念的誕生,再到基于數(shù)據(jù)庫的商業(yè)智能分析。而現(xiàn)在,我們關注的問題已經(jīng)變成如何從海量的超大規(guī)模數(shù)據(jù)中快速獲取有價值的信息。在新的時代,面對新的挑戰(zhàn),新的技術必然會應運而生。
在數(shù)據(jù)分析領域,大部分的技術都誕生在國外,特別是美國,從最初的數(shù)據(jù)庫,到Hadoop為首的大數(shù)據(jù)技術,再到今天各種深度學習、AI等。但我國卻又擁有世界上獨一無二的“大”數(shù)據(jù)—最多的人口、最多的移動設備、最活躍的應用市場、最復雜的網(wǎng)絡環(huán)境……面對這些挑戰(zhàn),我們需要有自己的核心技術,特別是在基礎領域的突破和研發(fā)。今天,以Apache Kylin為首的各種來自中國的先進技術不斷涌現(xiàn),甚至在很多方面都大大超越了來自國外的其他技術,彰顯了中國的技術實力。
自Hadoop選取大象圖標伊始,上百個項目,以動物居之者為多。而其中唯有Apache Kylin(麒麟)來自中國,在眾多項目中分外突出。在全球最大的開源基金會—Apache 軟件基金會(Apache Software Foundation,ASF)的160多個頂級項目中,Apache Kylin是唯一一個來自中國的Apache頂級開源項目,與Apache Hadoop、Apache Spark、Apache Kafka、Apache Tomcat、Apache Struts、Apache Maven等頂級項目一起以“The Apache Way”構建開源大數(shù)據(jù)領域的國際社區(qū),發(fā)展新技術并拓展生態(tài)系統(tǒng)。
大數(shù)據(jù)與傳統(tǒng)技術的最大區(qū)別就在于數(shù)據(jù)的體量給查詢帶來的巨大挑戰(zhàn)。從最早使用大數(shù)據(jù)技術來做批量處理,到現(xiàn)在越來越多的人要求大數(shù)據(jù)平臺也能夠如傳統(tǒng)數(shù)據(jù)倉庫技術一樣支持交互式分析,隨著數(shù)據(jù)量的不斷膨脹、數(shù)據(jù)平民化的不斷推進,低延遲、高并發(fā)地在Hadoop之上提供標準SQL查詢能力成為必須攻破的技術難題。而Apache Kylin的誕生正是基于這個背景,并成功地完成了很多人認為不可能實現(xiàn)的突破。Apache Kylin最初誕生于eBay中國研發(fā)中心,該中心坐落于上海浦東新區(qū)。2013年9月底該研發(fā)中心開始進行POC測試并組建團隊,經(jīng)過一年的艱苦開發(fā)和測試,Apache Kylin于2014年9月30日正式上線,并在第二天,2014年10月1日,正式開源。
在這個過程中,面對使用何種技術、如何設計架構、如何突破那些看似無法完成的挑戰(zhàn)等一系列技術難關,整個開發(fā)團隊和用戶一起經(jīng)歷了一個艱難的過程。今天呈現(xiàn)的Apache Kylin已經(jīng)經(jīng)歷了上千億甚至上萬億規(guī)模數(shù)據(jù)量的分析請求及上百家公司在實際生產(chǎn)環(huán)境中的檢驗,成為各個公司大數(shù)據(jù)分析平臺不可替代的重要組成部分。本書將從Apache Kylin的架構和設計、各個模塊的使用、與第三方的整合、二次開發(fā)以及開源實踐等多個方面進行講解,為讀者呈現(xiàn)Apache Kylin最核心的設計理念和哲學、算法和技術等。
Apache Kylin社區(qū)的發(fā)展來之不易,自2014年10月開源至今已經(jīng)有近五年的時間,從最初的幾個研發(fā)人員發(fā)展到今天幾十個貢獻者、國內(nèi)外上百家公司正式使用、連續(xù)兩年獲得InfoWorld Bossie Awards最佳開源大數(shù)據(jù)工具獎。來自Apache Kylin核心團隊、貢獻者、用戶、導師、基金會等的幫助和無私奉獻鑄就了今天Apache Kylin活躍的社區(qū),也使得此項技術得以在越來越多的場景下發(fā)揮作用,F(xiàn)在,由Apache Kylin核心團隊撰寫的本書即將出版,相信能更好地將相關的理論、設計、技術、架構等展現(xiàn)給各位朋友,希望能夠讓更多的朋友更加充分地理解Kylin的優(yōu)勢和適用的場景,更多地挖掘出Kylin的潛力。同時希望本書能夠鼓勵并吸引更多的人參與到Kylin項目和開源項目中,能夠影響更多的人貢獻更多的項目和技術到開源世界中。
此次《Apache Kylin 權威指南》的再版工作,得到了Kyligence研發(fā)團隊的大力支持,他們紛紛自愿參與,本書大部分內(nèi)容的寫作是利用節(jié)假日和休息時間完成的,每位參與者都將自己在工作中獲得的最佳實踐經(jīng)驗總結到了這本書中,他們分別是:史少鋒、陳志雄、馮禮、翟娜、湯雪、趙勇杰、周浥塵、龍超、宗正、孫宇婕、周丁倩、李森輝等。在此對他們表示誠摯的感謝!
韓卿
Apache Kylin聯(lián)合創(chuàng)建者及項目委員會主席
2019年5月
推薦序
前 言
第1章 Apache Kylin概述1
1.1 背景和歷史1
1.2 Apache Kylin的使命3
1.2.1 為什么要使用Apache Kylin3
1.2.2 Apache Kylin怎樣解決關鍵問題4
1.3 Apache Kylin的工作原理5
1.3.1 維度和度量簡介5
1.3.2 Cube和Cuboid6
1.3.3 工作原理7
1.4 Apache Kylin的技術架構7
1.5 Apache Kylin的主要特點9
1.5.1 標準SQL接口9
1.5.2 支持超大數(shù)據(jù)集10
1.5.3 亞秒級響應10
1.5.4 可伸縮性和高吞吐率10
1.5.5 BI及可視化工具集成11
1.6 與其他開源產(chǎn)品的比較11
1.7 小結13
第2章 快速入門 14
2.1 核心概念 14
2.1.1 數(shù)據(jù)倉庫、OLAP與BI14
2.1.2 維度建模15
2.1.3 事實表和維度表16
2.1.4 維度和度量16
2.1.5 Cube、Cuboid和Cube Segment16
2.2 在Hive中準備數(shù)據(jù) 17
2.2.1 多維數(shù)據(jù)模型17
2.2.2 維度表的設計 17
2.2.3 Hive表分區(qū) 18
2.2.4 了解維度的基數(shù) 18
2.2.5 樣例數(shù)據(jù)18
2.3 安裝和啟動Apache Kylin19
2.3.1 環(huán)境準備19
2.3.2 必要組件19
2.3.3 啟動Apache Kylin19
2.4 設計Cube 19
2.4.1 導入Hive表定義19
2.4.2 創(chuàng)建數(shù)據(jù)模型21
2.4.3 創(chuàng)建Cube23
2.5 構建Cube 32
2.5.1 全量構建和增量構建34
2.5.2 歷史數(shù)據(jù)刷新35
2.5.3 合并36
2.6 查詢Cube 38
2.6.1 Apache Kylin查詢介紹38
2.6.2 查詢下壓40
2.7 SQL參考 41
2.8 小結41
第3章 Cube優(yōu)化42
3.1 Cuboid剪枝優(yōu)化42
3.1.1 維度的組合42
3.1.2 檢查Cuboid數(shù)量43
3.1.3 檢查Cube大小45
3.1.4 空間與時間的平衡46
3.2 剪枝優(yōu)化工具47
3.2.1 使用衍生維度47
3.2.2 聚合組49
3.2.3 必需維度51
3.2.4 層級維度51
3.2.5 聯(lián)合維度52
3.3 并發(fā)粒度優(yōu)化54
3.4 Rowkey優(yōu)化55
3.4.1 調(diào)整Rowkey順序55
3.4.2 選擇合適的維度編碼56
3.4.3 按維度分片57
3.5 Top_N度量優(yōu)化58
3.6 Cube Planner優(yōu)化61
3.7 其他優(yōu)化62
3.7.1 降低度量精度62
3.7.2 及時清理無用Segment63
3.8 小結63
第4章 增量構建64
4.1 為什么要增量構建64
4.2 設計增量Cube66
4.2.1 設計增量Cube的條件66
4.2.2 增量Cube的創(chuàng)建67
4.3 觸發(fā)增量構建69
4.3.1 Web GUI觸發(fā)69
4.3.2 構建相關的REST API70
4.4 管理Cube碎片76
4.4.1 合并Segment76
4.4.2 自動合并77
4.4.3 保留Segment79
4.4.4 數(shù)據(jù)持續(xù)更新79
4.5 小結80
第5章 查詢和可視化81
5.1 Web GUI81
5.1.1 查詢81
5.1.2 顯示結果82
5.2 REST API84
5.2.1 查詢認證85
5.2.2 查詢請求參數(shù)85
5.2.3 查詢返回結果86
5.3 ODBC87
5.4 JDBC90
5.4.1 獲得驅(qū)動包90
5.4.2 認證90
5.4.3 URL格式90
5.4.4 獲取元數(shù)據(jù)信息91
5.5 Tableau集成91
5.5.1 連接Kylin數(shù)據(jù)源92
5.5.2 設計數(shù)據(jù)模型93
5.5.3 “Live”連接93
5.5.4 自定義SQL94
5.5.5 可視化展現(xiàn)94
5.5.6 發(fā)布到Tableau Server95
5.6 Zeppelin集成95
5.6.1 Zeppelin架構簡介95
5.6.2 KylinInterpreter的工作原理96
5.6.3 如何使用Zeppelin訪問Kylin96
5.7 Superset 集成98
5.7.1 下載Kylinpy98
5.7.2 安裝Superset99
5.7.3 在Superset中添加Kylin Database100
5.7.4 在Superset中添加Kylin Table100
5.7.5 在Superset中創(chuàng)建圖表103
5.7.6 在Superset中通過SQL Lab探索Kylin105
5.8 QlikView 集成106
5.8.1 連接Kylin數(shù)據(jù)源106
5.8.2 “Direct Query”連接107
5.8.3 創(chuàng)建可視化109
5.8.4 發(fā)布到QlikView Server110
5.9 Qlik Sense集成110
5.9.1 連接Kylin數(shù)據(jù)源110
5.9.2 “Direct Query”連接112
5.9.3 創(chuàng)建可視化114
5.9.4 發(fā)布到Qlik Sense Hub115
5.9.5 在Qlik Sense Hub中連接Kylin數(shù)據(jù)源117
5.10 Redash集成118
5.10.1 連接Kylin數(shù)據(jù)源118
5.10.2 新建查詢119
5.10.3 新建儀表盤121
5.11 MicroStrategy 集成122
5.11.1 創(chuàng)建數(shù)據(jù)庫實例123
5.11.2 導入邏輯表124
5.11.3 創(chuàng)建屬性、事實和度量124
5.11.4 創(chuàng)建報告124
5.11.5 MicroStrategy連接Kylin最佳實踐126
5.12 小結127
第6章 Cube Planner及儀表盤128
6.1 Cube Planner128
6.1.1 為什么要引入Cube Planner128
6.1.2 Cube Planner 算法介紹129
6.1.3 使用Cube Planner131
6.2 System Cube134
6.2.1 開啟System Cube134
6.2.2 構建和更新System Cube135
6.3 儀表盤135
6.4 小結137
第7章 流式構建138
7.1 為什么要進行流式構建139
7.2 準備流式數(shù)據(jù)139
7.2.1 數(shù)據(jù)格式139
7.2.2 消息隊列140
7.2.3 創(chuàng)建Schema141
7.3 設計流式Cube144
7.3.1 創(chuàng)建Model144
7.3.2 創(chuàng)建Cube145
7.4 流式構建原理147
7.5 觸發(fā)流式構建150
7.5.1 單次觸發(fā)構建151
7.5.2 自動化多次觸發(fā)152
7.5.3 初始化構建起點152
7.5.4 其他操作153
7.5.5 出錯處理153
7.6 小結154
第8章 使用Spark155
8.1 為什么要引入Apache Spark155
8.2 Spark構建原理156
8.3 使用Spark構建Cube158
8.3.1 配置Spark引擎1