Hadoop - Kylin On OLAP

1.概述

  Apache Kylin是一個開源的分佈式分析引擎,提供SQL接口而且用於OLAP業務於Hadoop的大數據集上,該項目由eBay貢獻於Apache。node

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有其本身的生態圈,以下圖所示:apache

  從上圖中,咱們能夠看到,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/KYLINoop

  預覽截圖以下所示:

  另外,咱們能夠經過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.結束語

  這篇博客就和你們分享到這裏,若是你們在研究學習的過程中有什麼問題,能夠加羣進行討論或發送郵件給我,我會盡我所能爲您解答,與君共勉!

相關文章
相關標籤/搜索