Druid -- Druid介绍及基于Imply方式单机部署

介绍

  Druid是一个快速的列式分布式的支持实时分析的数据存储系统。它在处理PB级数据、毫秒级查询、数据实时处理方面,比传统的OLAP系统有了显著的性能改进。
  注意:阿里巴巴也曾创建过一个开源项目叫作Druid(简称阿里Druid),它是一个数据库连接池的项目。阿里Druid和本文讨论的Druid没有任何关系,它们解决完全不同的问题。

特点

  1. 列式存储:Druid面向列存储,只需要加载特定查询所需要的列,查询速度快。
  2. 可扩展的分布式系统:Druid通常部署在数十到数百台集群中,提供数百万条每秒的摄取率,保留数百万条记录,以及亚秒级到几秒钟的查询延迟。
  3. 大规模的并行处理:Druid可以在整个集群中进行大规模的并行查询。
  4. 实时或批量摄取
  5. 自愈,自平衡,易操作:集群扩展或缩小,只需添加或删除服务器,集群将在后台自动重新平衡,无需停机。
  6. 数据进行了有效的预聚合或预计算,查询速度快。
  7. 数据的结果应用了Bitmap压缩算法。

应用场景

  1. 适用于清洗好的记录实时录入,不需要更新操作
  2. 适用于支持宽表,不用join的方式
  3. 适用于可以总结出基础的统计指标
  4. 适用于实时性要求高的场景
  5. 适用于对数据质量敏感度不高的场景

和其他技术对比

在这里插入图片描述

  1. Druid:是一个实时处理时序数据的OLAP数据库,它的索引首先按照时间分片,查询的时候也是按照时间线去路由索引。
  2. Kylin:核心是Cube,Cube是一种预计算技术,预先对数据作多维索引,查询时只扫描索引而不访问原始数据从而提速。
  3. Presto:它没有使用MapReduce,大部分场景下比Hive快一个数量级,其中的关键是所有的处理都在内存中完成。
  4. Impala:基于内存运算,速度快,支持的数据源没有Presto多。
  5. Spark SQL:基于Spark平台上的一个OLAP框架,基本思路是增加机器来并行计算,从而提高查询速度。
  6. ES:最大的特点是使用了倒排索引解决索引问题。根据研究,ES在数据获取和聚集用的资源比在Druid高。
  7. 框架选型:
    (1)从超大数据的查询效率来看:
    Druid > Kylin > Presto > Spark SQL
    (2)从支持的数据源种类来讲:
    Presto > Spark SQL > Kylin > Druid

原理

架构和组件

在这里插入图片描述

  1. 组成上主要分4个部分:MasterServers、QueryServers、DataServers、ExternalDependancies。
  2. MasterServers主要是两个组件:coordinators和overlords。coordinators协调节点,主要负责historicals历史节点的数据负载平衡,以及通过规则管理数据的生命周期。overlords统治者节点,主要负责监视middleManagers进程,是数据摄入Druid的控制器,他负责将提取任务分配给middleManagers并协调segment发布。
  3. QueryServers主要包含两个组件:routers和brokers。routers路由器进程是可选进程,可以将请求路由到brokers,coordinators和overlords。brokers节点接收查询请求,并将请求转发给historical和middlemanagers。当broker收到结果后,合并结果并缓存,返回给调用者。
  4. DataServers主要包含两个组件:middleManagers和historicals。middleManagers中间管理者节点,主要负责摄入数据,生成segment数据文件。将segment保存在deepStorage中。historicals历史节点,主要负责加载已生成好的数据文件,供数据查询。historical是核心节点,因为它承担了大部分的segment的查询。
  5. ExternalDependencies主要包含三个组件:zookeeper、metadataStorage、deepStorage。zookeeper是整个集群的协调者,默认使用Druid内置的zk,也可以修改zk地址使用外部自己部署的zk集群。metadataStorage元数据存储默认使用内置的derby,建议修改为外部的mysql或者postgre来存储。deepStorage深度存储默认使用本地文件系统,建议修改为hdfs。

数据结构(Datasource + Segment)

  Druid的DataSource相当于关系型数据库中的表(Table)。DataSource的结构包括:
    时间列:表明每行数据的时间值,默认使用 UTC时间格式且精确到毫秒级别。
    维度列:维度来自于OLAP的概念,用来标识数据行的各个类别信息。
    指标列:是用于聚合和计算的列。通常是一些数字,计算操作通常包括Count、Sum等。
在这里插入图片描述

  无论是实时数据消费还是批量数据处理,Druid在基于DataSource结构存储数据时即可选择对任意的指标列进行聚合操作。该聚合操作主要基于维度列与时间范围两方面的情况。
  Druid在数据存储时便可对数据进行聚合操作是其一大特点,该特点使得Druid不仅能够节省存储空间,而且能够提高聚合查询的效率。
  DataSource是一个逻辑概念,Segment是数据的实际物理存储格式。Druid将不同时间范围内的数据存储在不同的Segment数据块中,这便是所谓的数据横向切割。按照时间横向切割数据,避免了全表查询,极大的提高了效率
在这里插入图片描述
  在Segment中,也采用面向列进行数据压缩存储(Bitmap压缩技术),这便是所谓的数据纵向切割。

部署

官网

  1. Druid:https://druid.apache.org/
  2. Imply:https://docs.imply.io/on-prem/quickstart

  安装推荐Imply方式,Imply方式出了提供druid组件,还有图形化、报表等功能。下载imply安装包需要提交邮箱等信息,任意填写即可下载到tar包,本次部署使用imply-3.4版本。

单机部署

  1. 下载tar包,上传服务器,解压
tar -xzf imply-3.4.tar.gz
cd imply-3.4
  1. 使用本地存储、默认元数据存储derby,自带zookeeper启动
nohup bin/supervise -c conf/supervise/quickstart.conf > logs/quickstart.log 2>&1 &
#说明:每启动一个服务均会打印出一条日志。可以通过var/sv/xxx/current查看服务启动时的日志信息
  1. 在页面查看:端口9095
    在这里插入图片描述

集群部署

  Druid – 基于Imply方式集群部署

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值