1. 程式人生 > >Druid 大數據分析之快速應用(單機模式)

Druid 大數據分析之快速應用(單機模式)

uid druid 控制臺 config html static 數據存儲 指定時間 get

1、概述 本節快速安裝基於單機服務器,很多配置可以默認不需要修改,數據存儲在操作系統級別的磁盤。推出快速安裝的目的,便於了解並指導基於Druid進行大數據分析的開發流程。本節主要講Druid的安裝、實例數據加載、查詢及使用問題解決。

2、安裝要求 1. Java 7 及以上
2. Linux, Mac OS X, or other Unix-like OS (Windows不支持)
3. VMware
4. 2CPU ++; 內存2G ++

3、Zookeeper 安裝 本次采單機版安裝,如果采用分布式安裝,則需要修改Druid相應配置,反之不需要。 Zookeeper默認啟用2181端口監聽。

Linux代碼 技術分享圖片
  1. curl http://www.gtlib.gatech.edu/pub/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz -o zookeeper-3.4.6.tar.gz
  2. tar -xzf zookeeper-3.4.6.tar.gz
  3. cd zookeeper-3.4.6
  4. cp conf/zoo_sample.cfg conf/zoo.cfg
  5. ./bin/zkServer.sh start

zookeeper 安裝驗證

Linux和zookeeper命令代碼 技術分享圖片
  1. cd zookeeper-3.4.6 // 切換至Zookeeper根目錄
  2. bin/zkCli.sh // 啟動Zookeeper客戶端
  3. ls / // 查看根節點
4、Druid 安裝 Java代碼 技術分享圖片
  1. curl -O http://static.druid.io/artifacts/releases/druid-0.9.1.1-bin.tar.gz
  2. tar -xzf druid-0.9.1.1-bin.tar.gz
  3. cd druid-0.9.1.1

解壓後 Druid 相關目錄說明
  • LICENSE - 許可證文件。
  • bin/ - 快速啟動腳本。
  • conf/* - 集群安裝配置(包括Hadoop)。
  • conf-quickstart/*
    - 快速啟動相關配置。
  • extensions/* - Druid擴展。
  • hadoop-dependencies/* - Druid hadoop依賴。
  • lib/* - Druid核心軟件包。
  • quickstart/* - 快速啟動示例文件及數據。

5、啟動 Druid 準備 啟動Druid相關服務之前,我們需要做兩件事:
1. 啟動Zookeeper
2. 切換到Druid根目錄,執行 bin/init

6、啟動 Druid 相關服務 啟動5個Druid進程在不同遠程終端窗口,因為是單機模式,所有進程在同一服務器上;在大的分布式集群中,很多Druid進程可以在同一服務器,我們需要啟動的5個Druid進程:Historical、Broker、coordinator、overlord、middleManager。overlord與middleManager對應Indexer節點,節點相關介紹請查看《http://yangyangmyself.iteye.com/blog/2320502》,後續將會詳細介紹節點工作機制。

切換至Druid安裝目錄,在不同遠程終端窗口依次執行以命令

Java代碼 技術分享圖片
  1. java `cat conf-quickstart/druid/historical/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/historical:lib/*" io.druid.cli.Main server historical
  2. java `cat conf-quickstart/druid/broker/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/broker:lib/*" io.druid.cli.Main server broker
  3. java `cat conf-quickstart/druid/coordinator/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/coordinator:lib/*" io.druid.cli.Main server coordinator
  4. java `cat conf-quickstart/druid/overlord/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/overlord:lib/*" io.druid.cli.Main server overlord
  5. java `cat conf-quickstart/druid/middleManager/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/middleManager:lib/*" io.druid.cli.Main server middleManager

Druid 控制臺 如果上述服務啟動成功,則可以訪問如下控制臺
1.
訪問http://localhost:8090/console.html 可以查看數據批量導入Druid的任務執情況,間隔一段時間刷新一下控制臺,如果看到SUCCESS任務狀態,說明任務執行成功,如下圖所示:

技術分享圖片

2. 訪問http://localhost:8081/ 查看任完成進度、數據分片情況、索引創建等


技術分享圖片

7、Druid 加文件數據 以上Druid相關服務啟動後,我們需要加載相關業務數據到Druid,Druid根據數據加載的配置文件,將我們的原始業務數據做相應的預處理後進行存儲,以便後續查詢統計。數據加載有兩種方式:一是實時加載;二、加載批文件,本節講如何加載Json批數據文件。
Linux環境下加載數據文件,執行方式如下:

Pass.json代碼 技術分享圖片
  1. {"gcxh":"430000002745468976","license":"測AZ6LUL","licenseType":"02","hpys":"5","csys":null,"cllx":"0","clpp":null,"gateId":"430186000347","fxlx":"8","cdbh":"1","passTime":"2016-07-03T20:23:17.000Z","carPassDate":"2016-07-04","carPassTime":"04:23:17","carLoc":"測A","province":"43","city":"4301","region":"430186"}
Pass-index.json代碼 技術分享圖片
  1. {
  2. "type" : "index_hadoop",
  3. "spec" : {
  4. "ioConfig" : {
  5. "type" : "hadoop",
  6. "inputSpec" : {
  7. "type" : "static",
  8. "paths" : "/opt/data/pass.json" /**指定數據*/
  9. }
  10. },
  11. "dataSchema" : {
  12. "dataSource" : "kakou", /**數據源名,類似表名*/
  13. "granularitySpec" : {
  14. "type" : "uniform",
  15. "segmentGranularity" : "day", /**數據分片粒度,按天*/
  16. "queryGranularity" : "none",
  17. "intervals" : ["2016-07-04/2016-07-05"] /**時間跨度*/
  18. },
  19. "parser" : {
  20. "type" : "string",
  21. "parseSpec" : {
  22. "format" : "json", /**數據文件類型*/
  23. "dimensionsSpec" : {
  24. "dimensions" : [ /**數據列*/
  25. "license",
  26. "carLoc",
  27. "licenseType",
  28. "hpys",
  29. "cllx",
  30. "clpp",
  31. "gateId",
  32. "fxlx",
  33. "passTime",
  34. "carPassDate",
  35. "carPassTime",
  36. "province",
  37. "city",
  38. "region"
  39. ]
  40. },
  41. "timestampSpec" : {
  42. "format" : "auto",
  43. "column" : "passTime" /**指定時間分段*/
  44. }
  45. }
  46. },
  47. "metricsSpec" : [
  48. {
  49. "name" : "count",
  50. "type" : "count" /**按count聚合*/
  51. }
  52. ]
  53. },
  54. "tuningConfig" : {
  55. "type" : "hadoop",
  56. "partitionsSpec" : {
  57. "type" : "hashed",
  58. "targetPartitionSize" : 5000000
  59. },
  60. "maxRowsInMemory":500000,
  61. "jobProperties" : {}
  62. }
  63. }
  64. }
將上述Json示例數據保存為pass.json的文件,接下來定義一個數據配置文件pass-index.json,在pass-index.json中引用數據pass.json、指定數據源名(類似表名)、數據維度列、聚合粒度、時間間隔等。

Java代碼 技術分享圖片
  1. /**執行如下命令進行導入操作*/
  2. curl -X ‘POST‘ -H ‘Content-Type:application/json‘ -d @/opt/data/pass-index.json 192.168.121.200:8090/druid/indexer/v1/task
8、Druid 數據導入問題及解決辦法 1. 中文亂碼:Json規範這裏不再闡述,講一下生成Json數據文件註意的情況,目前發現Json中含有中文情況下,將Json數據加載到Druid時出現亂碼。生成Json指文件編碼為UTF-
2. 時間序列值:Druid按時間進序列值進行數據分片,按時間字段進行數據分片的字段值需要標準化(UTC)處理。
3. 任務掛起或等待:Druid將任務提交給Hadoop中的Map-Reduce執行,導入時任務可會因為某種原因導致任務掛起或停止。

中文亂碼解決辦法:

編碼代碼 技術分享圖片
  1. try{
  2. OutputStream out = new FileOutputStream(new File("E:\\study\\druid\\rpass_20150801.json"),true);
  3. Writer write = new OutputStreamWriter(out,"utf-8");
  4. write.write(json.toString()+"\n");
  5. write.flush();
  6. write.close();
  7. out.close();
  8. }catch(){
  9. e.printStackTrace();
  10. }

時間序列值UTC標準化:

Java代碼 技術分享圖片
  1. /**引用Joda類庫*/
  2. DateTimeFormatter dtFormatter=DateTimeFormat.forPattern("yyyy-MM-dd hh:mm:ss");
  3. /**輸出結果 2016-08-29T22:58:20.000Z*/
  4. String result = dtFormatter.parseDateTime(‘2016-08-29 22:58:20‘).withZone(DateTimeZone.UTC).toString();

任務掛起或停止解決辦法:可以通過下述命將掛起任務刪除,重新執行導入。

Java代碼 技術分享圖片
  1. /**taskId可以從控制臺獲取或在執行Curl導入命令時返回值*/
  2. http://<OVERLORD_IP>:<port>/druid/indexer/v1/task/{taskId}/shutdown
9、Druid 請求接口 1. 查詢請求接口對應Broker,默認8082端口 http://<queryable_host>:<port>/druid/v2/?pretty
2. 數據導入接口對應Indexing,默認8090端口 http://<OVERLORD_IP>:<port>/druid/indexer/v1/task

Druid 大數據分析之快速應用(單機模式)