如何用KAP在微軟Azure HDInsight上進行交互式分析?

作者:史少鋒(高級架構師, Kyligence Inc.)

編輯:Sammi

KAP簡介

Kyligence Analytics Platform (簡稱KAP) 是運行在Hadoop上的企業級分布式大數據引擎,由Apache Kylin項目核心成員傾力打造。Apache Kylin是一個開源的大數據分析引擎,在業界已有廣泛使用。KAP繼承了Kylin的所有優勢,并創造性地引入了更多特性和功能,主要亮點包括:

高性能高并發:支持從TB到PB級數據規模上的亞秒級查詢。

易于使用:提供友好操作界面,支持拖拽式建模,提供ODBC/JDBC/RESTful API與BI工具無縫集成。

經濟性:一次構建可使得查詢提速千百倍,查詢越多越經濟。

KAP從Apache Hive或Apache Kafka讀取原始數據,使用MapReduce或Spark框架對數據進行預計算,然后將預計算的結果,也就是Cube,存儲在HBase或KyStorage中(KyStorage是一種專門針對KAP優化的列式存儲引擎)。商務智能(BI)工具、儀表盤應用或自定義Web應用,可以通過ODBC/JDBC等方式將查詢SQL語句發送給KAP,KAP會自動將查詢轉化成對預聚合結果Cube的檢索,因此可以快速返回結果。

通過可擴展的預計算技術,KAP可以支持數據規模的線性擴展,并且依舊保持亞秒級的快速響應和穩定可預期的查詢延遲。下圖是數據規模的對比測試。圖1是Apache Kylin(KAP的核心)在星型模型測試集(Star Schema Benchmark,簡稱SSB)上的性能數據,三個顏色分別代表一千萬、兩千萬和四千萬數據量。從圖中我們看到,所有的查詢均在不到一秒內完成,且當數據量增加的時候,查詢延遲依然穩定在一秒以內,幾乎沒有變化。

圖1. SSB 查詢性能

在SSB這樣一個標準數據集上,通過預計算技術,Apache Kylin可以獲得比Apache Hive高出300多倍的性能提升。圖2展示了兩者之間的性能對比。更多信息,可以參考ssb-kylin項目: https://github.com/Kyligence/ssb-kylin .

圖 2. Kylin 與Hive查詢延遲對比

Azure HDInsight

微軟Azure云的HDInsight 服務,是完全托管的云上Hadoop服務,提供經過優化的開源的大數據分析集群,支持Spark、Hive、MapReduce、Storm、Kafka和R Server等主流技術,并具備99.9%的SLA保證。這些大數據技術以及ISV應用都可以快速便捷地部署在托管的集群上,同時支持企業級的安全及監控服務。

Azure云支持計算和存儲相分離架構,其中Azure Blob Storage和Azure Data Lake提供了高可用、高性能以及低成本的存儲服務,HDInsight提供了可擴展的計算服務,這些服務支持用戶方便地啟動集群,擴大或縮減集群規模,甚至停止集群,而無需擔心數據的丟失。

KAP on HDInsight

在Azure HDInsight中,用戶通過應用市場可以輕松地部署使用KAP。KAP被部署在HDInsight集群的邊緣節點(Edge Node)中,它通過標準API跟Hadoop集群服務如Hive、YARN、HBase等進行通信。通過讀取節點上的Hadoop配置,KAP自動地發現各個Hadoop服務,用戶無須在集群上進行額外的安裝和配置。KAP部署后,默認是自動啟動的,如果需要手工啟停,可以運行“kylin.sh start”啟動KAP,運行“kylin.sh stop”停止服務。

HDInsight的應用程序平臺提供了一種簡便的辦法,讓第三方應用提供商(ISV)能夠輕松地開發和分發基于Hadoop的應用程序。 第三方應用開發者只需要提供一個安裝應用的ARM(Azure Resource Manager)模版和shell腳本即可,其它事情都交給Azure處理。這個一個非常友好的功能,使得在HDInsight 上自動安裝KAP變得簡單。圖3是KAP on HDInsight的架構圖。

圖3. KAP + Azure HDInsight

通過參考Azure的 Iaas-Applications 項目的示例,我們開發了為KAP定制的ARM模版,并成功在HDInsight上部署啟動了KAP。如今,KAP及內置的敏捷BI工具KyAnalyzer都做為HDInsight的應用程序一起安裝,用戶可以在很短的時間內獲得一個云上的大數據分析平臺和BI工具。

在平臺管理方面,高級用戶可能期望對Hadoop和KAP進行深入調優以獲得更好的性能。HDInsight 內置Apache Ambari做為配置管理以及監控工具,用戶可以通過Ambari的web界面或API對Hadoop各項服務的參數進行配置優化。對于KAP的相關配置,可以通過SSH的方式登錄到節點上進行配置。

安裝KAP

如今KAP已經在微軟Azure云(包括Azure海外以及由世紀互聯運營的Azure中國)全面上線。一些客戶已經開始使用HDInsight + KAP方案。Kyligence自身也積極地在各項業務,如開發、測試、培訓、在線演示、概念驗證等中使用這套組合。要啟用它,您只需要按下面幾個步驟執行:

1) 選擇一個”HBase” 類型的集群,可以是新集群,也可以是一個已存在的集群。

圖4. 選擇“HBase” 做為集群類型

2) 如果是新建集群,需要點擊”Custom”,在第三步“Applications”頁面選擇 “Kyligence Analytics Platform” ,如下圖所示:

圖5. 選擇KAP 進行安裝

如果是已經存在的HBase集群,點擊“Applications”,然后點擊“Add”,在應用程序列表中,選擇 “Kyligence Analytics Platform” 進行安裝。點擊”Purchase” 按鈕意味您已經閱讀并同意相關條款。這里不會產生針對KAP的額外費用。安裝的KAP帶有一個月的試用許可,試用期內免費,試用結束后請聯系Kyligence公司購買正式許可。

圖6. KAP出現在HDInsight Applications中

3) 集群創建完后,通過Azure門戶,您可以獲取到KAP和KyAnalyzer的訪問地址,如圖7所示。點擊這些地址,可以直接跳轉到KAP以及KyAnalyzer 的登錄頁。在這里您也可以獲取到SSH到KAP節點的地址。

圖7. KAP 及KyAnalyzer的訪問URL

KAP的默認管理員賬號是用戶名是”ADMIN”,默認密碼是”KYLIN”。初次登錄后建議在”System” -> “User” 頁面為所有賬戶重置密碼,這里您也可以添加新用戶并為他們授予角色。

圖8. 重置用戶密碼

KyAnalyzer 與KAP共享用戶信息,所以您只需要在KAP中管理用戶,之后便可以在 KyAnalyzer 中使用。

玩轉樣例Cube

KAP安裝時會自動創建一個樣例Cube以及它所需要的Hive表。這個樣例Cube會自動開始構建。

圖9. 樣例Cube

您可以在“Monitor”頁監控此構建任務直至完成。任務完成后,Cube的狀態會更新為“Ready”,意味著它可供查詢。這時您可以在”Insight” 頁輸入一句查詢SQL,例如:

select part_dt, sum(price) as total_selled, count(distinct seller_id) as sellers from kylin_sales group by part_dt order by part_dt;

KAP能夠很快返回查詢結果。您可以拷貝這條SQL到Hive命令行中執行,以感受它們的響應時間差異。

圖 10. 在KAP中執行查詢

至這里您已經體驗了如果使用KAP來加速查詢分析。然而,寫SQL依然是一件麻煩的事情,您可以使用一些可視化工具如KyAnalyzer通過拖拽選擇的方式開展分析。

導入數據到KAP

KAP 支持Apache Hive 和Apache Kafka 做數據源。Hive用于批量數據處理,Kafka用作流數據處理。

要在KAP 中對批量數據做處理,需要將數據文件描述為Hive 表格。HDInsight 支持使用Azure Blob Store 以及Azure Data Lake 做為Hadoop的存儲,通過它們可以輕松地管理和處理海量數據,兼顧高可靠、高可用以及低成本。下面是一個將文件上傳到Azure Blob Store 的例子:

export AZURE_STORAGE_ACCOUNT=

export AZURE_STORAGE_ACCESS_KEY=

# list all files in container

azure storage blob list

# upload a file to container

azure storage blob upload

Azure Blob Store是一個對象存儲系統,不是普通的文件系統;但它支持以”/”做分隔符從而模擬文件目錄樹結構。下面的命令會將本地文件”airline_2015_01.csv” 上傳到容器”mycontainer”中,并使用”airline/2015/airline_2015_01.csv” 做遠程路徑:

azure storage blob upload airline_2015_01.csv mycontainer airline/2015/airline_2015_01.csv

當文件上傳到Azure Blob Store后,您可以使用HiveQL語句來創建Hive表格。您可以在HDInsight Ambari的“Hive view” 中,或者通過SSH到某個節點后使用Hive命令行來執行HiveQL語句。下面是一個創建Hive(帶分區)表的樣例語句:

hive> CREATE EXTERNAL TABLE airline_data (

Year int,

Quarter int,

Month int,

DayofMonth int,

DayOfWeek int,

FlightDate date,

)

PARTITIONED BY (Part_year STRING)

ROW FORMAT SERDE ‘org.apache.hadoop.hive.serde2.OpenCSVSerde’

WITH SERDEPROPERTIES (“separatorChar” = “,”)

LOCATION ‘wasb://@.blob.core.windows.net/airline’

TBLPROPERTIES(‘serialization.null.format’=”,’skip.header.line.count’=’1’);

請替換contianer和storage-account為您的存儲賬戶信息。接下來就可以添加分區:

hive> ALTER TABLE airline_data ADD PARTITION (Part_year = ‘2015’) location ‘wasb://@.blob.core.windows.net/airline/2015’;

當表創建好并有至少一個分區后,您就可以在Hive中執行查詢了,例如:

hive> select * from airline_data limit 100;

至此已經成功創建了一個Hive表,讓它使用Azure Blob Store上的數據文件。可以登錄KAP,在“Model” -> “Data Source” 頁, 點擊 “Load Hive Table” 按鈕來導入Hive表信息到KAP;導入Hive表信息只會同步表的元信息,例如列名、數據類型等,而不會拷貝數據,因此這一步通常非常快。

圖11. 導入Hive 表

創建模型和Cube

當所有表都導入后,您就可以開始創建數據模型。數據模型是創建Cube的基礎,它可以為多個Cube重用。在“Models” 頁,點擊“+Model”,選擇事實表和維度表,選擇維度列和度量列,并設置分區列信息等。

圖12. 創建數據模型

保存模型后,就可以開始創建Cube。Cube是一種多維空間的數據結構,包含維度和度量。KAP支持在一個Cube中包含數十個維度和上百個度量。KAP不僅支持普通度量如SUM, COUNT, MAX, MIN, DISTINCT COUNT等,還支持高級度量如Top- N, Percentile,以及基于Bitmap的精確去重計數器等。點擊 “+Cube”,KAP會啟動一個向導帶領您一步步完成Cube創建。

圖13. 創建Cube

構建Cube

Cube創建好以后,需要將數據加載構建進Cube。在Cube頁,點擊 “Action” -> “Build”。如果數據模型是分區的,那么需要指定一個源數據的時間范圍,如果不是分區的,那么會將所有數據加載進Cube。

圖14. 構建 Cube

觸發Cube構建后,一個構建任務會被啟動并執行,可以在“Monitor”頁面監控此任務的進度。 Cube構建可能會花費數分鐘到數小時來完成,取決于數據規模、模型復雜度、集群規模等多種因素。 可以點擊某個具體任務以查看每一步的具體信息。如果某個步驟是MR任務,KAP會顯示出任務在YARN資源管理器上的鏈接地址。當構建完成后, Cube狀態會自動更新為 “Ready”,意味著可以開始查詢了。

執行查詢

點擊“Insight” 頁,您可以編寫一個SQL查詢語句并點擊“Submit”,語句會被遞交到服務器端執行并將結果展示在前端頁面。

圖15. 在 KAP 界面執行查詢

使用KyAnalyzer敏捷分析

您可以使用與KAP相同的賬戶登錄到KyAnalyzer ,在 “Admin Console” 頁,點擊 “Sync Cubes from Kylin”,然后選擇”kylin_sales_cube” 進行同步,這樣這個Cube的定義會被導入到KyAnalyzer。

圖16. 同步Cube 到 KyAnalyzer

點擊”New query” 打開一個新的空白頁,點擊”Cubes”旁的刷新按鈕,在下拉列表中選擇”kylin_sales”,點擊選擇一個維度和一個度量,KyAnalyzer會自動生成查詢語句、發送查詢并展示結果。

圖17. 選擇維度和度量

點擊 右上角的”Chart Mode” 按鈕,KyAnalyzer 會根據結果數據生成圖表,如下圖所示,是不是很容易?

圖18. 生成圖形化展示

現在您已經創建了一個Cube,并通過拖拽的方式生成了第一個圖表。如果需要,您還可以將KAP跟更高級的BI工具如Tableau、PowerBI、Excel等進行集成。

集成Tableau, Power BI

要從Tableau 或 Power BI連接KAP,您需要安裝Apache Kylin ODBC 驅動(暫只支持Windows平臺 )。詳細的步驟信息請參考http://docs.kyligence.io/v2.3/en/integration/

HDInsight 上的KAP 使用 HTTPS協議訪問,因此當配置ODBC連接的時候,請使用443端口以及HDInsight為KAP注冊的網絡地址進行注冊。圖19是從Tableau連接KAP的樣例。

圖19. 從Tableau 連接KAP

與HDInsight Kafka 的集成

Apache Kafka是一個開源分布式消息平臺,它能夠每秒處理上百萬次的并發讀寫。KAP支持從Kafka (v0.10+) 讀取數據。通過集成Kafka,KAP可以持續將數據構建進Cube,從而大大減少數據從產生到被檢索分析的延遲。

HDInsight 的Kafka 服務提供了受管理的、高可用的Kafka 服務。您可以通過Azure 門戶或API快速創建一個Kafka集群。您可以創建一個Kafka集群,跟已有的含KAP的HDInsight集群一起使用。為了確保Kafka版本的一致,請為這兩個集群選擇相同的HDInsight版本,否則您需要在KAP節點上下載跟服務器端相匹配的Kafka客戶端。

HDInsight的Kafka無法使用公網IP地址,所以為了使得KAP集群與Kafka之間能夠通信,建議使用相同的虛擬網,或使用VPN服務。

KAP默認不攜帶Kafka 客戶端;因此如果直接使用它去連接Kafka數據源的話,您會得到“ClassNotFoundException” 的錯誤。要解決這個問題,需要SSH 到KAP節點,在KYLIN_HOME/bin/find-kafka-dependency.sh中手動指定 KAFKA_HOME的環境變量 :

ssh sshuser@KAP.CLUSTERNAME-ssh.azurehdinsight.net

sudo vi /usr/local/kap/bin/setenv.sh

在文件開始位置,加入下面一行(請使用具體環境中存在的kafka安裝路徑):

export KAFKA_HOME=/usr/hdp/2.5.5.3-2/kafka

隨后您可以執行這個腳本以檢驗它是否能夠尋找Kafka的客戶端jar文件:

sshuser@ed10-kapdem:~$ /usr/local/kap/bin/find-kafka-dependency.sh -v

Turn on verbose mode.

Retrieving kafka dependency…

KAFKA_HOME is set to: /usr/hdp/2.5.5.3-2/kafka, use it to locate kafka dependencies.

kafka dependency: /usr/hdp/2.5.5.3-2/kafka/libs/kafka-clients-0.10.0.2.5.5.3-2.jar

如果一切正常,重啟KAP服務使其生效:

sudo systemctl restart kap

KAP重啟后,回到“Model”頁面,點擊 “Add Streaming Table”,輸入Kafka broker的地址信息,它會自動連接Kafka,列出主題以及樣例消息。

圖20. Kafka 集成

接下來的步驟,只需要按照KAP手冊中的“Streaming Cube” 章節繼續即可。

KAP在HDInsight上的最佳實踐

下面是我們總結的一些在HDInsight 上使用KAP的經驗和技巧,可供參考。

1. 為HDInsight集群使用專有的虛擬網絡(virtual network)

在創建HDInsight 集群的時候,可以指定某個特定的虛擬網絡,用于管理該集群的節點網絡配置。如果用戶沒有指定,Azure 會創建并使用一個默認的虛擬網絡。這個默認虛擬網絡在Azure門戶中是不可見的,這意味著您無法對該虛擬網絡進行配置定制(如防火墻),也無法在該網絡中加入其它實例。因此,為了保留網絡配置的靈活性,建議您在創建集群之前,先創建一個虛擬網絡,然后用于該HDInsight集群。

2. 優化Hadoop 設置

HDInsight默認的Hadoop 設置并不是最適合KAP的,它將較多的資源分配給了HBase服務,給YARN留下的資源較少。此外,HBase將較多資源分配給寫操作,而KAP的場景是較少寫操作而較多的讀操作,因此可以將更多資源分配給block cache以獲得更好的查詢性能。您可以在HDInsight 儀表盤(也即Ambari)中對Hadoop設置進行更改,下面是一些推薦設置:

在Ambari中更新這些參數設置后,請同步改動到集群的各個節點,并重啟相關服務以使設置生效。KAP服務也需要重啟以確保使用最新設置。

3. 使用多個存儲賬戶

使用多個存儲賬戶可以更好地利用網絡帶寬,提高并發IO性能,從而提升集群性能。您可以為Hive表使用與集群不同的存儲賬號。

4. 按需增加或縮減集群規模

由于源數據和Hadoop數據都在Azure Blob Store 或 Azure Data Lake,您可以方便地增加或縮減集群節點而不用擔心數據的丟失。例如,當構建Cube的時候,增加節點以提高構建的性能。當構建完成后,恢復到原來的規模以節省費用。

5. 停止和恢復集群

KAP使用HBase存儲Cube元信息以及數據。Azure的HBase數據也跟其它一樣,Azure Blob Store 或Azure Data Lake存儲,價錢比使用虛擬機硬盤要低很多。因此當您暫時不需要使用集群的時候,可以將HDInsight集群刪除,只保留存儲賬戶。當某天需要使用的時候,再使用同樣的存儲賬戶重建HDInsight集群,就可以恢復之前的Cube了,這對于一些低頻使用的場景非常適用。

在刪除集群的時候,仍有一些數據需要手工備份:

a) KAP/KyAnalyzer 的配置文件及日志

KAP 的配置文件以及shell 腳本都是做為本地文件存放在KAP節點上。如果您對配置做了改動,并且想在重建集群后恢復,那么您需要自行備份改動。可以使用 “Hadoop fs -put” 命令將文件上傳到Hadoop文件系統,由于它是放在Azure存儲上,因此不會在集群刪除時候丟失。

b) Hive 元數據

Hive使用SQL數據庫存儲元數據,因此當刪除集群的時候,如果SQL數據庫被刪除,那么Hive表信息也會丟失。因此建議在創建HDInsight的時候,使用外部SQL實例做為Hive meta store。如果您的集群沒有用外部SQL實例的話,則需要手動備份Hive腳本。

6. 啟動/停止 KAP 及KyAnalyzer

KAP 和KyAnalyzer 一起安裝在HDInsight 分配的邊緣節點中。您需要使用創建集群時指定的用戶名和密碼SSH登錄到節點中進行操作:

ssh sshuser@KAP.CLUSTERNAME-ssh.azurehdinsight.net

請替換 “CLUSTERNAME” 您的集群名稱

KAP 及KyAnalyzer 分別安裝在“/usr/local/kap” (KYLIN_HOME) 和“/usr/local/kyanalyzer” (KYANALYZER_HOME)目錄。可以使用linux命令檢查這些腳本、配置以及日志,如:

tail -200f /usr/local/kap/logs/kylin.log

tail -200f /usr/local/kyanalyzer/tomcat/logs/kyanalyzer.log

KAP 及KyAnalyzer 被注冊為了系統服務。使用systemctl 命令對這些服務進行操作,如:

sudo systemctl status kap

sudo systemctl stop kap

sudo systemctl start kap

對于KyAnalyzer進行操作, 只需要替換上面命令中的“kap”為“kyanalyzer”即可。

常見問題(FAQ)

1. 如何獲取在線文檔

Kyligence用戶手冊: http://manual.kyligence.io/; 此外,Apache Kylin 在線文檔也是很好的補充: https://kylin.apache.org/docs21/

2. 如何獲取幫助?

當遇到問題時,推薦先在網絡、官網(地址)、官微做一些搜索,可以使用“KAP”、“Apache Kylin”等做關鍵字,另外Apache Kylin的社區已有許多用戶使用KAP或Kylin,對于一些常見問題通過搜索往往就可以找到答案。

如果搜索沒有匹配的答案,您可以使用Kyligence 的在線診斷平臺 “KyBot”, https://kybot.io/。在KyBot官網注冊賬號并登陸后,上傳一個系統診斷包。KyBot在線服務將對日志進行分析并給出可能的建議。此外,KyBot還提供一個知識庫,由Kyligence專家團隊貢獻,您可以瀏覽常見問題或搜索關鍵字。

如果上面的辦法都沒能解答您的問題,或者您需要專業級技術服務,請致信 info@kyligence.io

3. 免費試用后,如何購買商業許可證

請致信info@kyligence.io, 我們會安排銷售代表與您聯系。

感謝閱讀,期待您的回復。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容