作者:史少鋒(高級架構師, 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, 我們會安排銷售代表與您聯系。
感謝閱讀,期待您的回復。