数据段合并
概要:
本例子主要用于对特定粒度
interval
下的分段segment
进行合并,比如在粒度为DAY
的datasource
下某一天的记录有两个segment
,在这种情形下可以按照本流程对其进行合并,可以起到减少冗余空间、加快查询的等优化效果。前提:
- Druid中已存在相应的datasource
- datasource中的记录有大于等于2的分段碎片(shard)
以下以广东数果科技有限公司为例,展示合并datasource全过程操作指引:
第一步:查找在druid中的目标datasource
- 在
http://192.168.0.222:8081/#/datasources
页面上查找要合并的 datasource。 例如要合并的datasource是test061901
注意:上图红框内的数字”2“代表该条记录包含两个分段碎片。
第二步: 创建、编辑、保存LuceneMergeTask.json文件说明
第三步:执行命令上传json文件,创建Task任务
- 在命令行中使用
cd
命令进入第二步创建的json文件所在的目录 使用
curl
命令上传json文件:curl -X 'POST' -H 'Content-Type:application/json' -d @LuceneMergeTask.json http://{overlordIP}:8090/druid/indexer/v1/task
overlordIP: druid的overlord节点ip地址,如果有多个overlord,必须指定leader的ip.
LuceneMergeTask.json task配置文件,详见下文
第四步:进入overlord服务的Task列表页面,查看Task日志信息,观察Task合并情况。
访问地址:
http://{overlordIP}:8090/console.html
overlordIP: druid的overlord节点ip地址
第五步:在需要停止task时,可以发送如下http post请求停止task任务
curl -X 'POST' -H 'Content-Type:application/json' http://{overlordIP}:8090/druid/indexer/v1/task/{taskId}/shutdown
overlordIP: druid的overlord节点ip地址
taskId: 在
http://{overlordIP}:8090/console.html
task详细页面对应 id 列的信息
第六步:查看合并结果
可以看到,目标datasource的每条记录都变成只有一个分段碎片了
LuceneMergeTask.json详细配置如下:
{
"type":"lucene_merge",
"dataSource": "test061901",
"interval": "2017-06-01/2017-06-30",
"triggerMergeCount": 2,
"mergeGranularity":"DAY",
"maxSizePerSegment":"800MB",
"context": {
"debug": true
}
}
属性名 | 值 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|---|
type | lucene_merge | string | 是 | - | 指定类型,固定值 |
dataSource | 自定义 | string | 是 | - | 要合并的数据源名称 |
interval | 自定义 | string | 是 | - | 需要进行合并的时间间隔,在间隔范围外的不进行合并 |
triggerMergeCount | 自定义 | int | 否 | 2 | 设定触发合并的段的数量,超过该值才触发合并,默认为2, 一般不需要修改 |
mergeGranularity | 参见granularity粒度配置 | string | 否 | null | 指定合并的粒度,不配置则代表在原有粒度上合并 |
maxSizePerSegment | 自定义 | int | 否 | null | 指定合并后数据段的最大大小, 不配置则代表不限制 |
enableLookup | true/false | boolean | 否 | false | 待补充 |
context | 自定义 | json | 否 | null | 配置Task的上下文环境参数 |