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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章