您好,登錄后才能下訂單哦!
怎么讀懂Apache Kylin,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
隨著移動互聯網、物聯網等技術的發展,近些年人類所積累的數據正在呈爆炸式的增長,大數據時代已經來臨。但是海量數據的收集只是大數據技術的第一步,如何讓數據產生價值才是大數據領域的終極目標。Hadoop的出現解決了數據存儲問題,但如何對海量數據進行OLAP查詢,卻一直令人十分頭疼。
企業中的查詢大致可分為即席查詢和定制查詢兩種。之前出現的很多OLAP引擎,包括Hive、Presto、SparkSQL等,雖然在很大程度上降低了數據分析的難度,但它們都只適用于即席查詢的場景。它們的優點是查詢靈活,但是隨著數據量和計算復雜度的增長,響應時間不能得到保證。而定制查詢多數情況下是對用戶的操作做出實時反應,Hive等查詢引擎動輒數分鐘甚至數十分鐘的響應時間顯然是不能滿足需求的。在很長一段時間里,企業只能對數據倉庫中的數據進行提前計算,再將算好后的結果存儲在MySQL等關系型數據庫中,再提供給用戶進行查詢。但是當業務復雜度和數據量逐漸升高后,使用這套方案的開發成本和維護成本都顯著上升。因此,如何對已經固化下來的查詢進行亞秒級返回一直是企業應用中的一個痛點。
在這種情況下,Apache Kylin應運而生。不同于“大規模并行處理”(Massive Parallel Processing,MPP)架構的Hive、Presto等,Apache Kylin采用“預計算”的模式,用戶只需要提前定義好查詢維度,Kylin將幫助我們進行計算,并將結果存儲到HBase中,為海量數據的查詢和分析提供亞秒級返回,是一種典型的“空間換時間”的解決方案。Apache Kylin的出現不僅很好地解決了海量數據快速查詢的問題,也避免了手動開發和維護提前計算程序帶來的一系列麻煩。
Apache Kylin最初由eBay公司開發,并貢獻給Apache基金會,但是目前Apache Kylin的核心開發團隊已經自立門戶,創建了Kyligence公司。值得一提的是,Apache Kylin是第一個由中國人主導的Apache頂級項目(2017年4月19日,華為的 CarbonData成為Apache頂級項目,因此Apache Kylin不再是唯一由國人貢獻的Apache頂級項目)。由于互聯網技術和開源思想進入我國的時間較晚,開源軟件的世界一直是由西方國家主導,在數據領域也不例外。從Hadoop到Spark,再到最近大熱的機器學習平臺TenserFlow等,均是如此。但近些年來,我們很欣喜地看到以Apache Kylin為首的各種以國人主導的開源項目不斷地涌現出來,這些技術不斷縮小著我國與西方開源技術強國之間的差距,提升我國技術人員在國際開源社區的影響力。
在了解Apache Kylin的使用以前,我們有必要先來了解一下在Apache Kylin中會出現的核心概念。
Data Warehouse,簡稱DW,中文名數據倉庫,是商業智能(BI)中的核心部分。主要是將不同數據源的數據整合到一起,通過多維分析等方式為企業提供決策支持和報表生成。那么它與我們熟悉的傳統關系型數據庫有什么不同呢?
簡而言之,用途不同。數據庫面向事務,而數據倉庫面向分析。數據庫一般存儲在線的業務數據,需要對上層業務的改變做出實時反應,涉及到增刪查改等操作,所以需要遵循三大范式,需要ACID。而數據倉庫中存儲的則主要是歷史數據,主要目的是為企業決策提供支持,所以可能存在大量數據冗余,但利于多個維度查詢,為決策者提供更多觀察視角。
在傳統BI領域中,數據倉庫的數據同樣存儲在Oracle、MySQL等數據庫中,而在大數據領域中最常用的數據倉庫就是Apache Hive,Hive也是Apache Kylin默認的數據源。
OLAP(Online Analytical Process),聯機分析處理,以多維度的方式分析數據,一般帶有主觀的查詢需求,多應用在數據倉庫。與之對應的是OLTP(Online Transaction Process),聯機事務處理,側重于數據庫的增刪查改等常用業務操作。了解了上面數據庫與數據倉庫的區別后,OLAP與OLTP的區別就不難理解了。
維度和度量是數據分析領域中兩個常用的概念。
簡單地說,維度就是觀察數據的角度。比如傳感器的采集數據,可以從時間的維度來觀察:
時間維度
也可以進一步細化,從時間和設備兩個角度觀察:
時間和設備維度
維度一般是離散的值,比如時間維度上的每一個獨立的日期,或者設備維度上的每一個獨立的設備。因此統計時可以把維度相同的記錄聚合在一起,然后應用聚合函數做累加、均值、最大值、最小值等聚合計算。
度量就是被聚合的統計值,也就是聚合運算的結果,它一般是連續的值,如以上兩個圖中的溫度值,或是其他測量點,比如濕度等等。通過對度量的比較和分析,我們就可以對數據做出評估,比如這個月設備運行是否穩定,某個設備的平均溫度是否明顯高于其他同類設備等等。
了解了維度和度量之后,我們可以將數據模型上的所有字段進行分類:它們要么是維度,要么是度量。根據定義好的維度和度量,我們就可以構建Cube了。
對于一個給定的數據模型,我們可以對其上的所有維度進行組合。對于N個維度來說,組合所有可能性共有2的N次方種。對于每一種維度的組合,將度量做聚合計算,然后將運算的結果保存為一個物化視圖,稱為Cuboid。所有維度組合的Cuboid作為一個整體,被稱為Cube。
舉個例子。假設有一個電商的銷售數據集,其中維度包括時間(Time)、商品(Item)、地點(Location)和供應商(Supplier),度量為銷售額(GMV)。那么所有維度的組合就有2的4次方,即16種,比如一維度(1D)的組合有[Time]、[Item]、[Location]、[Supplier]4種;二維度(2D)的組合有[Time Item]、[Time Location]、[Time Supplier]、[Item Location]、[Item Supplier]、[Location Supplier]6種;三維度(3D)的組合也有4種;最后零維度(0D)和四維度(4D)的組合各有1種,總共16種。
計算Cubiod,即按維度來聚合銷售額。如果用SQL語句來表達計算Cuboid [Time, Location],那么SQL語句如下:
select Time, Location, Sum(GMV) as GMV from Sales group by Time, Location
將計算的結果保存為物化視圖,所有Cuboid物化視圖的總稱就是Cube。
事實表(Fact Table)是指存儲有事實記錄的表,如系統日志、銷售記錄、傳感器數值等;事實表的記錄是動態增長的,所以它的體積通常遠大于維度表。
維度表(Dimension Table)或維表,也成為查找表(Lookup Table),是與事實表相對應的一種表;它保存了維度的屬性值,可以跟事實表做關聯;相當于將事實表上經常重復的屬性抽取、規范出來用一張表進行管理。常見的維度表有:日期表(存儲與日期對應的周、月、季度等屬性)、地區表(包含國家、省/州、城市等屬性)等。維度表的變化通常不會太大。使用維度表有許多好處:
縮小了事實表的大小。
便于維度的管理和維護,增加、刪除和修改維度的屬性,不必對事實表的大量記錄進行改動。
維度表可以為多個事實表重用。
星形模型(Star Schema)是數據挖掘中常用的幾種多維數據模型之一。它的特點是只有一張事實表,以及零到多個維度表,事實表與維度表通過主外鍵相關聯,維度表之間沒有關聯,就像許多小星星圍繞在一顆恒星周圍,所以名為星形模型。
另一種常用的模型是雪花模型(SnowFlake Schema),就是將星形模型中的某些維表抽取成更細粒度的維表,然后讓維表之間也進行關聯,這種形狀酷似雪花的的模型稱為雪花模型。
還有一種更為復雜的模型,具有多個事實表,維表可以在不同事實表之間公用,這種模型被稱為星座模型。
不過,Kylin目前只支持星形模型。
Apache Kylin系統主要可以分為在線查詢和離線構建兩部分,具體架構圖如下:
Kylin架構圖,圖片來源于官網首頁
首先來看離線構建部分。從圖中可以看出,左側為數據源,目前Kylin默認的數據源是Apache Hive,保存著待分析的用戶數據。根據元數據的定義,構建引擎從數據源抽取數據,并構建Cube。數據以關系表的形式輸入,并且必須符合星形模型。構建技術主要為MapReduce(Spark目前在beta版本)。構建后的Cube保存在右側存儲引擎中,目前Kylin默認的存儲為Apache HBase。
完成離線構建后,用戶可以從上方的查詢系統發送SQL進行查詢分析。Kylin提供了RESTful API、JDBC/ODBC接口供用戶調用。無論從哪個接口進入,SQL最終都會來到REST服務層,再轉交給查詢引擎進行處理。查詢引擎解析SQL,生成基于關系表的邏輯執行計劃,然后將其轉譯為基于Cube的物理執行計劃,最后查詢預計算生成的Cube并產生結果。整個過程不會訪問原始數據源。如果用戶提交的查詢語句未在Kylin中預先定義,Kylin會返回一個錯誤。
值得一提的是,Kylin對數據源、執行引擎和Cube存儲三個核心模塊提取出了抽象層,這意味著這三個模塊可以被任意地擴展和替換。比如可以使用Spark替代MapReduce作為Cube的構建引擎,使用Cassandra替代HBase作為Cube計算后數據的存儲等。良好的擴展性使得Kylin可以在這個技術發展日新月異的時代方便地使用更先進的技術替代現有技術,做到與時俱進,也使用戶可以針對自己的業務特點對Kylin進行深度定制。
Apache Kylin的這種架構使得它擁有許多非常棒的特性:
SQL接口:
Kylin主要的對外接口就是以SQL的形式提供的。SQL簡單易用的特性極大地降低了Kylin的學習成本,不論是數據分析師還是Web開發程序員都能從中收益。
支持海量數據集
不論是Hive、SparkSQL,還是Impala、Presto,都改變不了這樣一個事實:查詢時間隨著數據量的增長而線性增長。而Apache Kylin使用預計算技術打破了這一點。Kylin在數據集規模上的局限性主要取決于維度的個數和基數,而不是數據集的大小,所以Kylin能更好地支持海量數據集的查詢。
亞秒級響應
同樣受益于預計算技術,Kylin的查詢速度非常快,因為復雜的連接、聚合等操作都在Cube的構建過程中已經完成了。
水平擴展
Apache Kylin同樣可以使用集群部署方式進行水平擴展。但部署多個節點只能提高Kylin處理查詢的能力,而不能提升它的預計算能力。
可視化集成
Apache Kylin提供了ODBC/JDBC接口和RESTful API,可以很方便地與Tableau等數據可視化工具集成。數據團隊也可以在開放的API上進行二次開發。
關于Apache Kylin的安裝,官網上有詳細的教程:
Apache Kylin安裝:http://kylin.apache.org/docs20/install/index.html
集群部署:http://kylin.apache.org/docs20/install/kylin_cluster.html
在此就不再贅述了。但有兩處問題官網不曾提及:
Apache Kylin依賴于Hadoop,但使用Standalone模式部署Hadoop可能會造成構建Cube出現問題,推薦大家使用虛擬機集群搭建Hadoop和Kylin。
Hadoop除了需要開啟HDFS和YARN,還需要開啟jobhistoryserver,啟動命令為:sbin/mr-jobhistory-daemon.sh start historyserver
部署成功后,可以使用Kylin官方自帶的quick start(http://kylin.apache.org/docs20/tutorial/kylin_sample.html)教程來驗證一下Kylin是否安裝正確。
接下來我們來談談Cube構建。Apache Kylin的Cube構建分為三種,分別為全量構建、增量構建、流式構建。最簡單的是全量構建,就是每次構建都對Hive表進行全表構建。但是全量構建在實際環境中并不常用,因為大多數業務場景下,事實數據都在不斷地增長中,所以最常使用的構建方式其實是增量構建。
增量構建可以使Cube每次只構建Hive表中新增部分的數據,而不是全部數據,因此大大降低了構建的成本。為了實現增量構建,Apache Kylin將Cube分為多個Segment,每個Segment用起始時間和結束時間來標識。關于Cube的構建,可以參考官網文檔:
Kylin Cube Creation:http://kylin.apache.org/docs20/tutorial/create_cube.html
Kylin Cube Build and Job Monitoring:http://kylin.apache.org/docs20/tutorial/cube_build_job.html
官網的教程中圖文并茂地講述了Cube的構建方法和過程。此處需要注意的是使用Web UI構建Cube的過程中增量構建與全量構建的不同之處:
創建Model時在第五步(Settings)需要指定 Partition Date Column,用日期字段來對Cube進行分割。
創建Cube時在第四步(Refresh Setting)需要指定 Partition Start Date,即Cube默認的第一個Segment的起始時間。
增量構建的方式解決了業務數據動態增長的問題。但卻仍然不能滿足分鐘級的近實時返回結果的需求,因為增量構建與全量構建一樣,使用Hive作為數據源,而Hive中的數據一般是經過ETL定時導入的(比如每天一次)。數據的時效性對于數據價值的重要性不言而喻,為了滿足實時數據更新這一普遍需求,Apache Kylin給出了流式構建方案。
不同于前兩種使用Hive做為數據源的構建方式,流式構建使用Kafka做為數據源,構建引擎定時從Kafka中拉取數據進行構建,這一設計與Spark-Streaming的微批次(Micro-Batch)思想非常像。官網上同樣給出了如何使用流式構建的文檔:Build Cube with Streaming Data,需要注意的一點是,Apache Kylin現在的流式構建方式是v1.6后才存在的,之前的版本可能會出現構建方式不同或不存在流式構建方式等情況。
Apache Kylin除了可以在Web UI界面進行構建和查詢,還為Cube的構建提供了RESTful API,為數據的查詢提供了RESTful API和JDBC/ODBC接口,用戶可以根據自身情況選擇合適的構建和查詢方式。另外,Kylin還支持使用第三方數據分析工具來對Kylin中計算好的數據進行分析,如Apache Zeppelin、Tableau等。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。