参考书目《Druid实时大数据分析原理与实践》sql
Druid,中文名是德鲁伊。Druid是一个分布式的支持实时分析的数据存储系统,Druid的设计为分析而生,是一个分布式的数据分析平台。在处理数据的实时性、规模上相比传统OLAP系统有了显著提高。官网: http://druid.io 。Druid诞生于MetaMarkets公司(https://metamarkets.com/)。数据库
Hadoop/Hive数据分析有个致命弱点就是速度,为了提高速度,不少公司都尝试过以下的查询架构:数据结构
很明显,相比于第4种架构,第5种直接对数据源进行流式处理,真可谓简单、直接。架构
MetaMarkets公司为了知足自身实时数据分析的须要,曾经尝试过第二、3种架构,可是没法解决下面2个问题:负载均衡
Druid的设计之初,肯定了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和报表工具,性能并不具优点。
传统RDBMS为了提升查询速度,通常都会建立索引,那么在数据写入时,因为建立索引会消耗额外的性能。也就是说,没法作到同时保证数据摄入和数据查询性能。而Druid却能够实现,这得力于其独到的架构设计、DataSource和Segment数据结构以及系统的优秀设计和实现。
下图为Druid的架构图:
实时节点(Real-time Nodes):摄入实时数据,生成Segment文件。
历史节点(Historical Nodes):加载数据文件,支持查询。
查询节点(Broker Nodes):对外提供查询服务,同时从实时和历史节点查询数据并回调对方。
协调节点(Coordinator Nodes):负责历史节点的负载均衡,以及经过规则管理数据生命周期。
元数据库(Mysql): 存储元数据信息,例如Segment。
分布式协调(Zookeeper):为Druid集群提供一致性协调服务组件。
数据文件库(Deep Storage):存储Segment数据文件,并供历史节点下载。(能够是本地磁盘,或HDFS)
Druid本质上是一个分布式的时序数据库。
Druid的DataSource相似于RDBMS的Table,包含时间列、维度列、指标列(第一部分已介绍)。不管是实时消费仍是批处理,druid基于DataSource结构存储数据。druid在数据存储时就能够对数据进行聚合是它的一大特色。
DataSource是逻辑概念,那Segment则是一个物理存储格式。数据横向切割:Druid将不一样时间范围内的数据存储在不一样的Segment块中。数据纵向切割:Segment也面向列进行数据压缩存储。
相似插件功能,Druid支持自身提供的pull-deps工具下载依赖到本地仓库,来扩展Druid的功能和支持(这里不展开了)。
实时结点经过firehose来消费实时数据,实时结点会经过Plumber模块生成segment数据文件。
Segment文件从制造到传播的过程以下: