1.概述
Apache Kylin是一個開源的分布式分析引擎,提供SQL接口并且用于OLAP業務于Hadoop的大資料集上,該項目由eBay貢獻于Apache。
2.What is Kylin
在使用一種模型,我們得知道她是幹什麼的,那麼首先來看看Kylin的特性,其内容如下所示:
- 可擴充超快的OLAP引擎:Kylin是為減少在Hadoop上百億級别資料查詢延遲而設計的。
- Hadoop ANSI SQL接口:Kylin為Hadoop提供标準的SQL,其支援大部分查詢功能。
- 出色的互動式查詢能力:通過Kylin,使用者可以于Hadoop資料進行亞秒級互動,在同樣的資料集上提供比Hive更好的性能。
- 多元度Cube:使用者能夠在Kylin裡為百億以上的資料集定義資料模型并建構Cube。
- 和BI工具無縫整合:Kylin提供與BI工具,如商業化的Tableau。另外,根據官方提供的資訊也在後續逐漸提供對其他工具的支援。
- 其他特性:
- 對Job的管理和監控
- 壓縮和編碼的支援
- 增量更新Cube
- 利用HBase Coprocessor去查詢
- 基于HyperLogLog的Distinct Count近似算法
- 友好的Web界面用于管理、監控和使用Cube
- 項目及Cube級别的通路控制安全
- 支援LDAP
3.ECOSYSTEM
Kylin有其自己的生态圈,如下圖所示:
從上圖中,我們可以看到,Kylin的核心包含:Kylin OLAP引擎基礎架構,Metadata引擎,查詢引擎,Job引擎以及存儲引擎等等,同時還包括REST伺服器以響應用戶端請求。另外,還擴充支援額外功能和特性的插件,同時整合與排程系統、ETL、監控等生命周期管理系統。在Kylin核心之上擴充的第三方使用者界面,ODBC和JDBC驅動用以支援不同的工具和産品,如:Tableau。
4.Architecture
Kylin的架構概述圖如下所示:
圖中的執行流程很清楚,用戶端(REST API或JDBC/ODBC)發送SQL請求,将其交給Kylin的執行引擎去處理,Kylin去拉去對應的資料來做處理,并傳回處理結果,這裡Kylin需要依賴HBase。複雜的事情,Kylin的引擎都給我們處理了,我們隻需要負責去編寫我們的業務SQL。
5.How TO Works
在Kylin中,我們可以處理三維的業務查詢,如下圖所示:
在明白了業務處理方向,其生态群和架構。我們要如何去內建該系統到Hadoop叢集?關于Kylin的內建過程是比較友善的,Kylin需要Hadoop、Hive、HBase、JDK,另外,對版本也是有要求的。本版要求如下:
- Hadoop:2.4 - 2.7
- Hive:0.13 - 0.14
- HBase:0.98(這裡若是選擇Kylin-1.2,需要用到HBase-1.1+以上)
- JDK1.7+
另外,安裝Kylin步驟也是比較簡單的,步驟如下所示:
- 下載下傳最新的安裝包,位址如下:[Kylin.tar.gz]
- 設定KYLIN_HOME環境變量
- 確定使用者有權限去通路Hadoop、Hive和HBase,如果不确定的話,我們可以在安裝包的bin目錄下運作check-env.sh腳本,如果我們有問題的話,她會列印詳細的資訊。
- 最後,我們可以通過kylin.sh start去啟動Kylin,或者使用kylin.sh stop去停止Kylin
在Kylin啟動之後,我們可以通過輸入http://node_hostname:7070/kylin去通路Kylin,登入預設使用者名和密碼為:ADMIN/KYLIN
預覽截圖如下所示:
另外,我們可以通過JDBC去操作,代碼片段如下所示:
Driver driver = (Driver) Class.forName("org.apache.kylin.jdbc.Driver").newInstance();
Properties info = new Properties();
info.put("user", "ADMIN");
info.put("password", "KYLIN");
Connection conn = driver.connect("jdbc:kylin://dn1:7070/kylin_project_name", info);
Statement state = conn.createStatement();
ResultSet resultSet = state.executeQuery("select * from test_table");
while (resultSet.next()) {
assertEquals("foo", resultSet.getString(1));
assertEquals("bar", resultSet.getString(2));
assertEquals("tool", resultSet.getString(3));
}
6.總結
在使用Kylin時,我們有必要去首先熟悉其架構,這能讓我們更加熟悉其應用場景和業務場景。在內建和使用的過程當中會遇到一些問題,我們可以分析其異常日志,然後利用搜尋引擎得到解決。關于Kylin的詳細使用,大家可以參考官方撰寫的文檔。
7.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行讨論或發送郵件給我,我會盡我所能為您解答,與君共勉!