Druid简介

参考书目《Druid实时大数据分析原理与实践》sql

1.druid概览

Druid,中文名是德鲁伊。Druid是一个分布式的支持实时分析的数据存储系统,Druid的设计为分析而生,是一个分布式的数据分析平台。在处理数据的实时性、规模上相比传统OLAP系统有了显著提高。官网: http://druid.io 。Druid诞生于MetaMarkets公司(https://metamarkets.com/)。数据库

Hadoop/Hive数据分析有个致命弱点就是速度,为了提高速度,不少公司都尝试过以下的查询架构:数据结构

很明显,相比于第4种架构,第5种直接对数据源进行流式处理,真可谓简单、直接。架构

 

MetaMarkets公司为了知足自身实时数据分析的须要,曾经尝试过第二、3种架构,可是没法解决下面2个问题:负载均衡

  1. RDBMS查询速度太慢(Mysql等全表扫描大数据量时响应时间是个问题);
  2. 不支持灵活的查询分析能力(通常在第3种方案,须要按维度预计算、存储在Nosql/Hbase中,以提升速度。可是,维度若是不少就是灾难。Kylin就是这么作的....

 

Druid的设计之初,肯定了3个原则:分布式

  1. 快速查询
  2. 水平扩展能力
  3. 实时分析

 下面,简单介绍下Druid的基本概念:工具

1.数据格式:oop

Druid的每一个数据集包含3个部分: 时间列、维度列、指标列。 这三个部分是必须具有的,下边是一个数据格式:性能

 

2.数据摄入:大数据

包括2种摄入方式:实时摄入批处理摄入

 

3.数据查询

Druid原生查询采用JSON格式,经过HTTP传送,目前并不支持SQL(后边组件可能支持,例如PlyQL)。

 

数据分析是从数据变成信息、从信息变成知识、最后从知识变为智慧的过程。常常讨论的几个概念是 BI(商业智能) ,DM(数据挖掘)和OLAP(联机分析处理)。OLAP是一种创建数据系统的方法,核心是构建多维度的数据立方体,以维度、度量为基本概念,辅以元数据实现能够钻取、切片、切块等灵活、系统和直观的数据展示。

通常地,Druid、Pinot和Kylin是数据分析软件选型常常碰到的问题。Pinot设计规范,系统也比较复杂,可是由于开源时间短,社区支持能力弱于Druid。Druid设计轻巧,代码库更易懂,支持比较灵活的功能加强。Kylin最大的优点是支持SQL访问,能够兼容传统bi和报表工具,性能并不具优点。

 

2.druid架构

传统RDBMS为了提升查询速度,通常都会建立索引,那么在数据写入时,因为建立索引会消耗额外的性能。也就是说,没法作到同时保证数据摄入和数据查询性能。而Druid却能够实现,这得力于其独到的架构设计、DataSource和Segment数据结构以及系统的优秀设计和实现。

 

2.1 总体架构:

下图为Druid的架构图:

 

实时节点(Real-time Nodes):摄入实时数据,生成Segment文件。

历史节点(Historical Nodes):加载数据文件,支持查询。

查询节点(Broker Nodes):对外提供查询服务,同时从实时和历史节点查询数据并回调对方。

协调节点(Coordinator Nodes):负责历史节点的负载均衡,以及经过规则管理数据生命周期。

元数据库(Mysql): 存储元数据信息,例如Segment。

分布式协调(Zookeeper):为Druid集群提供一致性协调服务组件。

数据文件库(Deep Storage):存储Segment数据文件,并供历史节点下载。(能够是本地磁盘,或HDFS)

 

Druid本质上是一个分布式的时序数据库

2.2 DataSource和Segment数据结构:

Druid的DataSource相似于RDBMS的Table,包含时间列、维度列、指标列(第一部分已介绍)。不管是实时消费仍是批处理,druid基于DataSource结构存储数据。druid在数据存储时就能够对数据进行聚合是它的一大特色。

DataSource是逻辑概念,那Segment则是一个物理存储格式。数据横向切割:Druid将不一样时间范围内的数据存储在不一样的Segment块中。数据纵向切割:Segment也面向列进行数据压缩存储。

相似插件功能,Druid支持自身提供的pull-deps工具下载依赖到本地仓库,来扩展Druid的功能和支持(这里不展开了)。

 

2.3 实时结点:

实时结点经过firehose来消费实时数据,实时结点会经过Plumber模块生成segment数据文件。

Segment文件从制造到传播的过程以下:

  1. 实时节点产出Segment数据文件,并上传到DeepStorage中;
  2. Segment相关文件的元数据信息存放MetaStore里。
  3. Master节点(Coordinator Nodes)根据元数据信息,根据规则配置分配给符合条件的历史节点。
  4. 实时节点丢弃该Segment数据文件,并向集群声明再也不提供该Segment数据文件的查询服务。
相关文章
相关标签/搜索