大數據基礎---Kylin是什么?


一.Kylin是什么?

Apache Kylin是一個開源的、分布式的分析型數據倉庫,提供Hadoop/Spark 上的SQL查詢接口及多維度分析(OLAP)能力以支持超大規模的數據,最初由eBay開發並貢獻至開源社區。它能在亞秒內查詢巨大的表。

Apache Kylin™ 令使用者僅需三步,即可實現超大數據集上的亞秒級查詢。

1.定義一個星形或雪花形數據模型

2.在定義的表上創建cube

3.使用標准的SQL通過ODBC,JDBC和Restful API即可在亞秒內查詢到結果。

二.解決問題

任何技術的出現都不是偶然,往往都是應需求而生,Kylin也不例外。Kylin直接面對的問題,是針對大數據不同維度頻繁查詢問題,比如拉鈎網,我們切換一個城市,它就要把當前城市的所有崗位顯示出來,利用普通的Hive根本沒法做到實時響應,所以就發明了Kylin。Kylin不僅僅提高了查詢性能,而且大大降低了對硬件的要求。

三.OLTP與OLAP

數據處理可以大致分為兩類:聯機事務處理OLTP,聯機分析處理OLAP。

3.1 OLTP

OLTP(On-Line Transaction Processing):聯機事務處理,OLTP 是傳統的關系型數據庫的主要應用, 主要是基本的、日常的事務處理,例如銀行交易。主要用於業務類系統,主要供基層人員使用,進行一線業務操作。OLTP 表示事務性非常高的系統,一般都是高可用的在線系統,以小的事務以及小的查詢為主,評估其系統的時候,一般看其每秒執行的 Transaction 以及 Execute SQL的數量。在這樣的系統中,單個數據庫每秒處理的 Transaction 往往超過幾百個,或者是幾千個,Select 語句的執行量每秒幾千甚至幾萬個。典型的 OLTP 系統有電子商務系統、銀行、證券等,如美國 eBay 的業務數據庫,就是很典型的 OLTP 數據庫。

3.2 OLAP

OLAP(On-Line Analytical Processing):聯機分析處理,OLAP 是數據倉庫系統的主要應用,支持復雜的分析操作,側重決策支持,並且提供直觀易懂的查詢結果。OLAP 數據分析的目標是探索並挖掘數據價值,作為企業高層進行決策的參考。OLAP 分析處理是一種共享多維信息的快速分析技術;OLAP 利用多維數據庫技術使用戶從不同角度觀察數據;OLAP 用於支持復雜的分析操作,側重於對管理人員的決策支持,可以滿足分析人員快速、靈活地進行大數據量的復雜查詢的要求,並且以一種直觀、易懂的形式呈現查詢結果,輔助決策。

3.2.1 OLAP基本概念:

變量:度量的具體的值。比如身高,體重的值。

維度:不同的角度,比如身高,收入,家庭成員。

事實:組合維度求得的值,也就是 維度+變量組合。

3.2.2 OLAP基本操作:

鑽取(Drill-down ):在維的不同層次間的變化,從上層降到下一層,或者說是將匯總數據拆分到更細節的數據,比如通過對第二季度的總銷售數據進行鑽取來查看第二季度 4、5、6 每個月的消費數據。
上卷(Roll-up ):鑽取的逆操作,即從細粒度數據向高層的聚合,如將江蘇省、上海市和浙江省的銷售數據進行匯總來查看江浙滬地區的銷售數據。
切片(Slice ):選擇維中特定的值進行分析,比如只選擇電子產品的銷售數據,或者第二季度的數據。
切塊(Dice ):選擇維中特定區間的數據或者某批特定值進行分析,比如選擇第一季度到第二季度的銷售數據,或者是電子產品和日用品的銷售數據。
旋轉(Pivot ):即維的位置的互換,就像是二維表的行列轉換,如圖中通過旋轉實現產品維和地域維的互換。

3.2.3 OLTP和OLAP的關系

OLTP主要是企業給用戶用的產品,OLAP是分析用戶的行為,幫助企業決策,調整方向。

四.Kylin實現原理

kylin 的核心思想是預計算,kylin 對多維分析可能用到的度量進行預計算,將高維復雜的聚合計算,多表連接等操作轉換成預計算結果,將計算好的結果保存成 Cube,存儲於 Hbase 中,供查詢時直接訪問。預計算過程需要很長時間,但是一旦結果計算出來,再次查詢只是獲取結果集合的過程,不需要額外再次浪費集群資源進行長時間查詢,這種以空間換取時間的處理數據模式決定了 Kylin 擁有很好的快速查詢、高並發能力。

Kylin 是一個 MOLAP(多維聯機數據分析)系統,最常用的是將 Hive 中的數據進行預計算,利用 Hadoop 的 Mapreduce 或者 Spark 分布式計算框架來實現。Kylin 獲取的數據表是星型數據結構的,目前建模時,只支持一張事實表,多張維度表,假設業務需求比較復雜,可以考慮在 Hive 中進行預處理生成一張寬表來處理。
對於 Hive 中的維度表和事實表,根據我們指定的維度列來構建 cube,cube 是所有維度的組合,任一維度的組合稱為 cuboid,即:cube 中包含所有的 cubeid。理論上來說,一個 N 維的 cube,會有 2 的 N 次方種維度組合(cuboid)。舉例:假設一個 cube 包含 time、country、city、location 四個維度,那么就有 16 中 cuboid 組合。通過計算框架的計算將 OLAP 分析的 cube 數據存儲在 Hbase 中,方便后期實現多維數據集的交互式快速查詢。

上圖中是 Kylin 整體架構原理圖,其中:
REST Server:提供 Restful 接口,可以通過此接口來創建、構建、刷新、合並Cube 等相關操作。同時也可以通過 Restful 接口實現 SQL 查詢。
Query Engine:目前 Kylin 使用開源的 Calcite 框架來實現 SQL 解析,用戶發出SQL 查詢之后,可以通過 Query Engine 來將 SQL Query 語句轉換成 SQL 語法樹,也就是邏輯計划。

Routing:負責將解析 SQL 生成的執行計划轉換成 cube 緩存的查詢,cube 是通過預計算緩存在 Hbase 中,這部分查詢時可以在秒級甚至是毫秒級完成,除此之外,還有一些操作需要使用原始數據(存儲在 HDFS 上)通過 Hive 查詢,這部分查詢的延遲比較高。
Metadata:Kylin 中有大量的元數據信息,包括 cube 的定義、星型模型的定義、job 和執行 job 的輸出信息、模型的維度信息等等。Kylin 的元數據存儲在 Hbase 中,存儲的格式是 Json 字符串。
Cube Build Engine:立方體構建模塊是所有模塊的基礎,主要負責 Kylin 預計算中創建 cube,創建的過程是首先通過 Hive 讀取原始數據,然后通過 MR 或者 Spark 計算生成 Htable,最后將數據加載到 Hbase 表中。

系列傳送門


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM