部门要搭建一套druid环境,买的是阿里云的服务

overload使用一台机器,middleManager使用两台机器

其他的查询组件也都部署在这三台机器上

因为这几个节点设计indexService,也就是灌库任务,我们主要关心灌库

下面是灌库过程中遇到的一堆坑

 

druid灌库会启动hadoop的mr任务,会读s3上数据,会将生成的segment写到deep storage上。

涉及最本质的三个问题:

1.数据从哪来

2.数据在哪计算

3.数据写哪去

阿里提供的druid集群,本身有一套自带的hadoop做mr计算,有自带的hdfs做deep storage

我们这次druid灌库一直都使用这个自带的hadoop和hdfs

 

1.准备好了灌库脚本和灌库数据,启动灌库命令后立刻报错

druid灌库报错-灌库数据中的时间戳和json中的intervals

这个问题在另一篇文章中详细讨论

 

 

2.灌库任务无法连接s3

druid灌库报错-灌库数据中的时间戳和json中的intervals

虽然在家目录的.aws配置了访问s3桶的秘钥,但是druid灌库json中也有这个秘钥配置,改成新的秘钥之后,问题解决

 

3.索引创建任务失败

权限问题解决后,继续提交灌库任务,报错如下:索引创建任务失败

druid灌库报错-灌库数据中的时间戳和json中的intervals

阿里同学说他去看了druid灌库任务启动的mr作业,去druid自带的hadoop的web控制台(yarn控制台)看,发现mr作业失败了

druid灌库报错-灌库数据中的时间戳和json中的intervals

druid灌库报错-灌库数据中的时间戳和json中的intervals

于是他很机智的让我在灌库json中加了下面这行,问题解决,这个地方是我感觉整个过程中最能体现他们经验的地方,佩服

 

druid灌库报错-灌库数据中的时间戳和json中的intervals

 

Mr任务成功

druid灌库报错-灌库数据中的时间戳和json中的intervals

但是灌库任务仍然是失败的

druid灌库报错-灌库数据中的时间戳和json中的intervals

报错日志变成了下面这个新的,很宽泛的一个错误

druid灌库报错-灌库数据中的时间戳和json中的intervals

到谷歌上查“segmentDescriptorInfo does not exist.”,有几篇文章提到是时间戳格式没写对

下面贴一下灌库用的json和准备灌库的数据,下面是修改之后能最终灌库成功的,错误的原因我写在后面

druid灌库报错-灌库数据中的时间戳和json中的intervals

druid灌库报错-灌库数据中的时间戳和json中的intervals

下面详细解释下灌库用的json

1.加载的数据是tsv文件,是用制表符分割的

2.paser中包括时间列和维度列,columns中是所有列的表头,指标列并不在这里面

3.这是一个小时级的灌库任务,druid统一采用utc时区,注意intervals中的写法

4.如果想指定哪个时区查询,在查询语句中指定

 

下面写下上面的报错原因是为啥?

因为我的intervals开始的时候写的是2019-03-01, 要索引的时间段内没有数据

但是报错日志也是太宽泛了,就不能报错到“灌库数据时间和json中的intervals时间不符”?

 

开始的时候我们都没注意到这个错误,当时还怀疑是灌库mr任务访问s3有问题,于是从druid.io官网下载了一个quickstart的灌库json和灌库数据

灌库命令如下

curl -X 'POST' -H 'Content-Type:application/json' -d @/home/orion_data/druid-script/druid_ingest/detail_report/template/template_mock.json http://overloadip:port/druid/indexer/v1/task -s

druid灌库报错-灌库数据中的时间戳和json中的intervals

灌库数据是从tar.gz的quickstart中粘贴出来的,这里就不粘贴了

灌库任务是天级别

灌库数据是json类型

日期格式是iso

我执行了这个灌库脚本,数据完美灌入,看来访问s3没问题,然后我就黔驴技穷,过了一段时间,阿里云工程师说是我的灌库数据中的时间戳和json中的intervals不符,太低级的错误了,看来还是缺乏经验啊

 

另外在灌库控制台日志中还能看到druid本身使用的hdfs路径

但是druid灌库启动的mr作业用的yarn web地址是overload节点的8088端口

druid灌库报错-灌库数据中的时间戳和json中的intervals

相关文章: