1 Druid是否支持非结构化数据?
Druid不支持非结构化数据,数据摄入时依赖预先定义好的结构对数据进行处理
2 Druid支持什么格式的数据入库
支持json csv tsv 或者有明确分隔符的原始数据。
3 Druid数据写入失败的原因?
实时 : 实时流数据的写入有一个以当前时间为基准的时间窗口(windowPeriod)设置,若待写入数据的时间不在该时间窗口内,则无法写入Druid
离线 : 离线写入的数据时间需在指定的interval范围内。
4 实时写入方式的Segment没有落地的原因?
- Druid更新Metadata Storage 失败,需要确保连接MetaData Storage正确
- 历史节点没有足够的容量用于本地缓存Segment
- Deep Storage连接配置不正确
5 如何使用HDFS作为Deep Storage?
- 确保安装包含druid-hdfs-storage组件
- 在common.runtime.properties的druid.extensions.loadList配置中加入druid-hdfs-storage,且在middleManager配置中加入对应的Hadoop依赖项
- 在服务启动命令中增加Hadoop classpath依赖,或者在_common目录下增加Hadoop相关配置文件(core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml)
6 数据更新是怎么回事?
Druid可以通过对数据重新摄入生成新的Segment 一旦新的Segment成功生成,新生成的Segment就将替代旧的Segment
7 如何更新历史数据?
Druid中历史数据的更新基于segment 如schema变化(新增或减少字段),metric聚合规则变化,Roll-up聚合粒度改变等,可以利用离线方式重算数据,然后通过重跑batch-ingestion任务的方式覆盖指定时间范围的数据。
8 如何监控批量导入Druid方式的任务?
以hadoop导入数据方式为例:
1) 首先离线ETL处理后把待写入Druid的数据放置在指定HDFS路径中
2) 然后通过inputSpec发送HTTP POST请求给overlord节点并获取taskId
3) 最后定期利用taskId向overlord节点发送HTTP GET请求检查任务状态
9 数据时间格式如何设置?
auto 由Druid自动判断时间格式,若含有非数据字符,按照iso解析,否则按照millis解析
iso 2016-09-01T12:00:00+08:00
posix 从1970年1月1日开始的秒数
millis 从1970年1月1日开始的毫秒数
Druid是内存数据库么?
早期的Druid的确是设计为内存数据库,所有数据都在内存中,后来为了需要支持更多的数据,Druid采用了内存映射加使用配置管理的方式,就是将最需要被查询的数据放在内存中,超出部分和不常用的数据放在磁盘和SSD中。
什么是Druid的深度存储?
Druid依赖深度存储系统保存Segment文件,如果历史节点挂掉,Druid则可以从深度存储中加载Segment恢复数据支持查询,深度存储系统可以使用HDFS
zookeeper会不会因为单点失效影响Druid
首先 zookeeper可以部署为多节点模式,且通常非常可靠,其次,即使zookeeper全部失败了,Druid的查询功能可以正常对外服务,但是新写入的数据将无法进入系统,因为Druid需要通过zk来管理Segment
coordinator会不会存在单点失效的问题
coordinator的运行采用master/slave模式,即每次只有一个master工作,多个slave节点处于预备状态中,coordinator和zookeeper一样,如果全部失效后,将影响新Segment的分配和管理,但对已有的查询没有影响。
查询是否会经过Coordinator?
coordinator只会参与管理Segment而不参与查询过程,因此查询不会经过coordinator节点。
Druid与Elasticsearch的比较?
Druid通过数据预聚合的方式压缩数据并提升访问速度,但是原始数据经过Roll-up后将丢失,Elasticsearch保存原始数据并通过建立倒排索引的方式对文档索引查询,因此非常适合检索的场景,Druid需要预先定义数据的schema,Elasticsearch则Schema free ,因此可以写入各种JSON数据。
为何多次并行聚合查询性能会下降?
通常的思路是从判断是否遇到GC瓶颈入手,聚合查询会用到更多的内存,因此比价容易遇到内存使用上限的问题。
在Druid中如何设置Segment的保留时间?
Druid中已生成的Segment会永久的存储在Deep Storage中,但是可以利用coordinator的管理页面配置指定DataSource的Segment在本地服务器上的保留时长 配置参考如下
- Forever Load 永久保留
- Interval Load 只保留指定时间段的数据
- Period Load 只保留最近指定时长的数据