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

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

 

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

 

三、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 安裝驗證html

Linux和zookeeper命令代碼   收藏代碼
  1. cd zookeeper-3.4.6 // 切換至Zookeeper根目錄  
  2. bin/zkCli.sh       // 啓動Zookeeper客戶端  
  3. ls /               // 查看根節點  
 
四、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/* - 快速啓動示例文件及數據。

 

五、啓動 Druid 準備
   啓動Druid相關服務以前,咱們須要作兩件事:
    1. 啓動Zookeeper
    2. 切換到Druid根目錄,執行 bin/init

 

六、啓動 Druid 相關服務
   啓動5個Druid進程在不一樣遠程終端窗口,由於是單機模式,全部進程在同一服務器上;在大的分佈式集羣中,不少Druid進程能夠在同一服務器,咱們須要啓動的5個Druid進程:Historical、Broker、coordinator、overlord、middleManager。overlord與middleManager對應 Indexer節點,節點相關介紹請查看《 http://yangyangmyself.iteye.com/blog/2320502》,後續將會詳細介紹節點工做機制。

    

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

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/ 查看任完成進度、數據分片狀況、索引建立等

 
 

 

七、Druid 加文件數據
   以上Druid相關服務啓動後,咱們須要加載相關業務數據到Druid,Druid根據數據加載的配置文件,將咱們的原始業務數據作相應的預處理後進行存儲,以便後續查詢統計。數據加載有兩種方式:一是實時加載;2、加載批文件,本節講如何加載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  
 
八、Druid 數據導入問題及解決辦法
1. 中文亂碼:Json規範這裏再也不闡述,講一下生成Json數據文件注意的狀況,目前發現Json中含有中文狀況下,將Json數據加載到Druid時出現亂碼。生成Json指文件編碼爲UTF-
2. 時間序列值:Druid按時間進序列值進行數據分片,按時間字段進行數據分片的字段值須要標準化(UTC)處理。
3. 任務掛起或等待:Druid將任務提交給Hadoop中的Map-Reduce執行,導入時任務可會由於某種緣由致使任務掛起或中止。
 

   中文亂碼解決辦法: apache

編碼代碼   收藏代碼
  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標準化: json

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   
九、Druid 請求接口
1. 查詢請求接口對應Broker,默認8082端口 http://<queryable_host>:<port>/druid/v2/?pretty 2. 數據導入接口對應Indexing,默認8090端口 http://<OVERLORD_IP>:<port>/druid/indexer/v1/task
相關文章
相關標籤/搜索