如何使用Druid基于HDFS文件构建Cube并执行查询操作
Druid 从HDFS文件构建预聚合Cube及查询操作指南
Druid中常说的Cube本质是按业务需求预定义维度、指标做聚合后生成的时序化Segment数据集,从HDFS文件构建Cube走批量摄入流程即可,具体操作如下:
前置校验
先确认基础环境符合要求:
- HDFS上的源文件为Druid支持的格式(CSV、JSON、Parquet、ORC等均可)
- Druid集群已配置HDFS访问权限,可正常读取目标路径下的文件
- Druid的Overlord、MiddleManager、Coordinator、Broker节点均处于正常运行状态
基于HDFS文件构建Cube的操作步骤
1. 编写摄入规范(Ingestion Spec)JSON文件
这是构建Cube的核心配置,需要包含三个核心模块:
dataSchema:定义目标数据源名称、时间戳字段映射规则、维度列表、指标聚合规则,可按需配置rollup预聚合开关来降低存储占用、提升查询速度ioConfig:配置输入源为HDFS,指定目标文件路径、文件解析规则,核心配置示例如下:
批量摄入建议选择"inputSource": { "type": "hdfs", "paths": "hdfs://<namenode-host>:<port>/<your-file-path>/*" }index_parallel任务类型,可通过多并行度提升构建效率tuningConfig:配置任务并行度、Segment切分大小、内存占用阈值等调优参数,可根据集群资源情况自定义
2. 提交摄入任务
有两种常用提交方式:
- 可视化提交:打开Druid控制台的Tasks页面,点击
Submit task上传编写好的Spec文件即可 - 命令行提交:通过curl命令调用Overlord接口提交,示例命令:
curl -X POST -H 'Content-Type: application/json' http://<overlord-host>:8081/druid/indexer/v1/task -d @<your-spec-file-path>.json
3. 验证构建结果
任务运行完成后,在Druid控制台的Datasources页面可以看到对应数据源,当Segments状态变为Online即代表Cube构建完成,可正常执行查询。
构建完成后的Cube查询方式
Druid支持三类常用查询方式,可按需选择:
1. 原生JSON查询
直接向Broker节点发送JSON格式的查询请求,灵活性最高,示例group by查询如下:
{ "queryType": "groupBy", "dataSource": "<your-datasource-name>", "granularity": "day", "dimensions": ["region", "device_type"], "aggregations": [ {"type": "longSum", "name": "total_visit", "fieldName": "visit_cnt"}, {"type": "doubleSum", "name": "total_pay", "fieldName": "pay_amount"} ], "intervals": ["2024-01-01T00:00:00.000Z/2024-01-08T00:00:00.000Z"] }
提交命令示例:
curl -X POST -H 'Content-Type: application/json' http://<broker-host>:8082/druid/v2/ -d @<your-query-file>.json
2. SQL查询
Druid原生支持ANSI SQL语法,学习成本更低,示例查询如下:
SELECT DATE_TRUNC('day', __time) AS statistics_date, region, device_type, SUM(visit_cnt) AS total_visit, SUM(pay_amount) AS total_pay FROM <your-datasource-name> WHERE __time BETWEEN '2024-01-01' AND '2024-01-08' GROUP BY statistics_date, region, device_type
可以直接在Druid控制台的Query页面执行,也可以通过JDBC驱动、HTTP SQL接口对接业务系统查询。
3. 可视化工具查询
直接在Druid自带控制台的Query页面执行查询即可得到表格、折线图、柱状图等可视化结果,也可以对接Superset、Grafana等BI工具做进一步的数据分析展示。
常用优化建议
- 构建Cube时优先过滤不需要的字段,合理设置rollup预聚合规则,可大幅降低Segment存储占用,提升查询速度
- 高频查询的低基数维度建议放在维度列表的前列,可优化查询性能
- HDFS上的源文件建议按时间做分区,摄入时可指定时间范围跳过不需要的数据,加快Cube构建速度
内容的提问来源于stack exchange,提问作者ikhlas
相关产品推荐
相关产品推荐

