来源:知乎
作者:王boy
By 暴走大数据
场景描述:大数据时代,对于数据的各种操作要求往往是分离开的,比如有专门的系统负责插入,有专门的系统负责查询。druid的就很好的体现了这一点。
关键词:Druid 原理
为理解druid的意义,需了解druid所面向的对象:大数据。了解大数据的一些特点属性,我们才能理解druid在利用大数据的哪个特点进行决策。
IBM曾提出大数据的5V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。
这些特点意味着什么?
意味着,传统的架构(比如单机、单节点结构)很难处理这些特点。
比如,“大量”这个特点决定了数据不可能在单块磁盘上存储下来,必须多块磁盘协作起来(单块磁盘如果能够达到PB级别,在现有的技术下,将会把硬盘做的很大,这样子造成的后果是,磁盘如果毁坏代价很大,另一个方面寻址的时间也会大大增加,因为盘面大了,机械臂寻址的路径就长了)。
比如,“高速”这个特点来源于,互联网的普及,群众创造数据的速度惊人,针对这个特点机器需要有专门的系统负责处理快速产生的数据,否则会有大量的信息会被丢弃。(实时处理系)
这些数据是“真实”的,但是却是“低价值密度”的。所以有必要对其进行提取,抽象(求和,求平均等),进而将这些小的价值收集起来,汇总成大的价值(规律)。
druid的作用
druid解决的问题在于,数据的快速摄入,数据的快速查询。它的摄入及查询是两个不同的系统,需要区别对待。
个人认为其特色在于,快速响应用户的查询请求,在其查询的结果中包含过去的历史数据,还有最近很短时间产生的查询结果(创新之处)。
基于MapReduce的工具框架,处理的大多是已经存放于硬盘的历史数据。这意味着处理的数据距离当前时间点有一定的差距,因为当前还有一段时间的数据中缓存在内存中,这些并没有参与到计算中来。druid的将内存中的数据和已经存储在内存中的数据都考虑进来,并进行了相应的汇总。
理解druid,需要将其理解为两个系统,即输入系统和查询系统。
druid总体架构
接下来,分别就外部节点以及内部节点进行相应的说明。
依赖的外部节点有何作用?
Metadata Storage :
druid若要查询数据(比如查询2017年发生的事情),它需要将这些条件的信息找到(在哪个机器的哪个文件之中),然后再去筛选。去那里找这些数据,也就是位置信息,就是一种元数据信息(描述数据的存储位置),这些信息存储在Metadata Storage中,可以说Metadata Storage在某种程度上,起到了书本中目录的作用。
没有Metadata Storage之后,你将失去了进入各个数据文件的入口。
Deep Storage:
相对于前面而言,该节点负责的是存储的具体的数据(比如2017年具体的事件),要与前面的元数据区分开来。
该类存储的特点是:插入,读取慢,但能够永久存储。(本地硬盘,HDFS都是属于这类存储)
与Metadata Storage 相互配合,才能定位出数据所在位置,并且取出相应的数据。
Distributed Coordination:(比如Zookeeper)
该节点的作用在于协调各个节点。听起来很模糊,举一个简单的例子,zookeeper中保存着各个节点的状态(比如某个节点是否可用),然后创建了一个任务,要分配到相应的节点中去执行,先去zookeeper上查看相关的节点的状态,如果节点可用,并且资源较多,那么就把任务分配到该节点上。(节点可用,资源较多这些信息就是存储在zookeeper上的)
druid内部各节点的职责
查询节点
实时节点
历史节点
协调者节点(与外部协调者相区分)
索引服务节点
索引服务架构图:
各节点间的关系
查询及摄入的数据流图:
PS:
参考:
《Druid实时大数据分析原理与实践》
欢迎点赞+收藏