Druid的简介及安装使用

应用场景

从技术定位上看,Druid 是一个分布式的数据分析平台,在功能上也非常像传统的OLAP系统,但是在实现方式上做了很多聚焦和取舍,为了支持更大的数据量、更灵活的分布式部署、更实时的数据摄入,Druid 舍去了OLAP 查询中比较复杂的操作,例如JOIN 等。相比传统数据库,Druid 是一种时序数据库,按照一定的时间粒度对数据进行聚合,以加快分析查询。
适用于广告分析、互联网广告系统监控以及网络监控等海量不变数据写入的场景。

特点

对应目前大多数Druid的使用场景来说,Druid本质上是一个分布式时序数据库。其特点有以下几个方面:

  • 数据吞吐量大。
  • 支持流式数据摄入和实时。
  • 查询灵活且快。
  • 社区支持力度大。
  • 查询上通过plyql工具支持少量sql。(也在逐步更新)

设计原则

  • 快速查询(Fast Query)
    部分数据的聚合(Partial Aggregate)+内存化(In-emory)+索引(Index)。
  • 水平扩展能力(Horizontal Scalability)
    分布式数据(Distributed Data)+ 并行化查询(Parallelizable Query)。
  • 实时分析(Realtime Analytics)
    不可变的过去,只追加的未来(Immutable Past,Append-Only Future)。

数据格式

在数据摄入之前,首先需要定义一个数据源(DataSource),每个集合包含三个部分。

  • 时间列(TimeStamp)
    表明每行数据的时间值,默认只用UTC时间格式且精确到毫秒。这个列是数据聚合与范围查询的重要维度
  • 维度列(Dimension)
    用来表示数据行的各个类别信息
  • 指标列(Metric)
    用于聚合和计算的列

相关软件对比

  • OpenTSDB
    OpenTSDB预先定义好维度Tag,采用精巧的数据组织方式放入HBase中,基于HBase有很好的查询效率,但是在任意维度组合查询下,效率会明显降低。
  • influxDB
    都内置HTTP接口,使用方便。influxDB采用golang开发,开箱即用,有类SQL的查询语句。而Druid仅支持部分sql,目前influxDB只有单机版是开源的,集群需要付费。
  • kylin
    kylin是通过预计算和定期任务,把很多数据事先存储在以HBase为基础的OLAP Cube中,而Druid是实时聚合,最大的优势是支持sql访问,可以兼容传统的BI工具和报表,在性能上没有太大优势。

总体架构

Druid是类LSM-tree架构,不同的是Druid不提供日志及实时WAL(预写日志)原则,实时数据首先会被直接加载进实时节点的内存中的堆结构,当条件满足时,缓存区里的数据会被重写到硬盘上形成一个数据块,同事实时节点又会立即将新生成的数据块加载到内存的非堆区,因此无论是堆结构还是缓存区的数据,都是能够被查询节点查询。这种架构安排实际上也在一点程度上借鉴了命令查询职责分离模式(CQRS)

安装环境

我们学习搭建采用Imply组合套件安装包。安装条件如下:

  • linux系统,暂不支持windows。

  • Java7及以上。(没有的话,启动时会用异常信息提示)

  • NodeJS 4.x以上。(没有的话,启动时会用异常信息提示)

  • 下载命令wget https://static.imply.io/release/imply-1.3.1.tar.gz

服务运行

使用tar命令解压后进入imply-1.3.1目录,druid组件会占用2181、8081、8090、9095等等端口,启动前可以用lsof命令检查下是否有进程占用,不然启动是日志会提示异常。然后我执行命令:
nohup bin/supervise -c conf/supervise/quickstart.conf > quickstart.log &
启动我们的单据版。我们查看quickstart.log启动日志,会发现有zk、coordinator、broker、historical、overlord、middleManager、pivot、tranquility-server等服务都先后被启动,如果提示fail或者exit,就要查看下具体服务启动失败原因了。
另外通过bin/service --down 可以退出当前所有服务,也可以通过--stop指定特定的服务。启动正常的话我们可以打开http://localhost:9095 查看Pivot页面。能打开证明启动正常的。但是里面没有数据,我们可以用命令添加一些测试数据:
bin/post-index-task --file quickstart/wikiticker-index.json,这是维基百科的一些测试数据。成功的话会有以下日志返回。

root@fp-bd5:/opt/imply-1.3.1# bin/post-index-task --file quickstart/wikiticker-index.json
Task started: index_hadoop_wikiticker_2019-03-11T11:53:30.328Z
Task log:     http://localhost:8090/druid/indexer/v1/task/index_hadoop_wikiticker_2019-03-11T11:53:30.328Z/log
Task status:  http://localhost:8090/druid/indexer/v1/task/index_hadoop_wikiticker_2019-03-11T11:53:30.328Z/status
Task index_hadoop_wikiticker_2019-03-11T11:53:30.328Z still running...
Task index_hadoop_wikiticker_2019-03-11T11:53:30.328Z still running...
Task index_hadoop_wikiticker_2019-03-11T11:53:30.328Z still running...
Task index_hadoop_wikiticker_2019-03-11T11:53:30.328Z still running...
Task finished with status: SUCCESS

这是可以通过http://localhost:9095 看到我们导入的数据:
在这里插入图片描述
通过plyql工具利用sql语句查询
bin/plyql --host fp-bd5:8082 -v -q "SELECT page , SUM(count) AS Edits FROM wikiticker WHERE '2016-06-27T00:00:00' <= __time AND __time < '2016-06-28T00:00:00' group BY page ORDER BY Edits DESC LIMIT 5"
会有以下返回

┌──────────────────────────────────────────────────────────┬───────┐
│ page                                                     │ Edits │
├──────────────────────────────────────────────────────────┼───────┤
│ Copa América Centenario                                  │ 29    │
│ User:Cyde/List of candidates for speedy deletion/Subpage │ 16    │
│ Wikipedia:Administrators' noticeboard/Incidents          │ 16    │
│ 2016 Wimbledon Championships – Men's Singles             │ 15    │
│ Wikipedia:Administrator intervention against vandalism   │ 15    │
└──────────────────────────────────────────────────────────┴───────┘

通过http协议访问实时导入与查询

bin/generate-example-metrics |curl -XPOST -H'Content-Type:application/json' --data-binary @- http://fp-bd5:8200/v1/post/metrics

返回

{"result":{"received":25,"sent":25}}

本文参考:《Druid实时大数据分析原理与实践》

发布了62 篇原创文章 · 获赞 33 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/yyoc97/article/details/88411429
今日推荐