Druid(Druid.io)簡單使用

Druid簡單使用
一、Druid服務進程
Historical進程:Historical進程用於處理歷史數據的存儲和查詢(歷史數據包括所以已經被committed的流數據)。Historical進程從深度存儲(Deep Storage)中下載Segment數據,同時支持對這些數據的查詢操作。Historical進程不支持寫入操作。
MiddleManager進程:MiddleManager負責將數據導入到集羣中。他們負責從外部數據源中讀取數據,也負責發佈新的Segment。
Broker進程:Broker負責從外部客戶端接收查詢請求,並把這些請求拆分成子查詢後轉發給Historical和MiddleManager。當Broker接收到這些子查詢的結果疑惑,會合並子查詢結果並將結果返回給調用者。終端用戶實際上都是和Broker做交互,而不會直接查詢Historical和MiddleManager。
Coordinator進程:Coordinator進程負責協調Historical進程。他們負責把Segment分配給特定的Historical進程,以及確保這些Segment在Historical間是負載均衡的。
Overlard進程:Overlard進程負責協調MiddleManager進程,它也是數據導入的控制器,負責將數據導入任務分配給MiddleManager以及協調發布新的Segment數據。
Router進程:Router進程是爲Broker,Overlard, Coordinator提供統一網關服務的可選進程。用戶也可以不適用Router而將請求直接發送給Broker,Overlard,Coordinator。
二、Druid管理界面
Druid提供管理UI,訪問地址http://{routerNodeIp}:8888/,在該管理服務中可以對Druid進行數據的批量攝入、實時數據配置、數據查詢、數據攝入任務管理、datasource管理等操作
 
Coordinator控制界面: http://{Coordinator NodeIp}:8081/
三、Druid數據攝入
Druid的數據攝入可以使接入流式數據和靜態數據兩種。Druid的數據攝取方式也有兩種,分別是Push(推送)和Pull(拉取)。例如:hdfs中的數據可以採用批量數據Push的方式,而kafka中的流式數據可以採用Pull
流式數據
1.通過實時節點以Pull方式攝取; 
創建pull監控 
curl -X POST -H 'Content-Type: application/json' -d @supervisor-spec.json http://OVERLORD_IP:PORT/druid/indexer/v1/supervisor
2.通過索引服務以Push方式攝取 
創建push規則 
curl -X POST -H ‘Content-Type:application/json’ -d @my-index-task.json http://OVERLORD_IP:PORT/druid/indexer/v1/task
數據push,例如:
curl -X POST -H 'Content-Type:application/json' -d '[{"timestamp":"2016-07-13","user":"張三","type":"瀏覽"}]'  http://PEON_IP:PORT/druid/worker/v1/chat/tableName/push-events/
靜態數據 
1.以索引服務方式攝取 
druid通過索引服務方式批量攝取數據,需要通過統治節點提交一個索引任務 
curl -X POST -H ‘Content-Type:application/json’ -d @my-index-task.json http://OVERLORD_IP:PORT/druid/indexer/v1/task
2.以hadoop方式攝取 
Druid Hadoop Index Job 支持從HDFS上讀取數據,並攝入到Druid系統中,該方式需求POST請求統治節點啓動一個Hadoop Index Job 
curl -X POST -H ‘Content-Type:application/json’ -d @index-hadoop-task.json http://OVERLORD_IP:PORT/druid/indexer/v1/task
注:其中關於各數據格式定義json,可以參考Druid安裝包中quickstart/tutorial目錄,該目錄下包括了各種方式的數據格式定義及樣例數據
四、Druid數據查詢
1.原生語言查詢
接口類型:HTTP REST 、POST
查詢地址: http://BROKER:8082/druid/v2/pretty
語句格式: 

{
"queryType": "groupBy",
"dataSource": {...},
 "columns": [],
"filter":{...},
 "intervals": {...},
"aggregations"{...},
...
}


2.SQL查詢
接口類型:HTTP REST 、POST
查詢地址: http://BROKER:8082/druid/v2/sql
語句格式: 

{
"query":"SELECT COUNT(*) AS TheCount FROM data_source"
}


    注:1.2兩種查詢方式均可以使用管理界面測試 ,也可以直接使用postman工具,或者curl命令
3.JDBC
依賴驅動: Avatica JDBC driver
連接地址: 
jdbc:avatica:remote:url=http://BROKER:8082/druid/v2/sql/avatica/

String url = "jdbc:avatica:remote:url=http://192.168.252.110:8082/druid/v2/sql/avatica/";
        Properties connectionProperties = new Properties();
        String query = "SELECT cityName as cityName,sum(\"count\") as s FROM \"wikiticker-2015-09-12-sampled\" GROUP BY cityName";
        try (Connection connection = DriverManager.getConnection(url, connectionProperties)) {
          try (
              final Statement statement = connection.createStatement();
              final ResultSet resultSet = statement.executeQuery(query)
          ) {
              System.out.println("cityName\t\t\tcount");
              long s = 0;
              while (resultSet.next()) {
                  String cityName = resultSet.getString(1);
                  long count = resultSet.getLong(2);
                  System.out.println(cityName+"\t\t\t"+count);
                  s++;
              }
              System.out.println("total:"+s);
          }
        } catch (SQLException e) {
            e.printStackTrace();
        }


注意:經個人多次測試,在sql語句上datasource即表名上需要帶上雙引號(2 SQL查詢也需要),也沒有找到原因,目前官方文檔上也未明確強調說明

發佈了78 篇原創文章 · 獲贊 53 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章