文档章节

Druid 实时数据分析存储系统

beta-o-
 beta-o-
发布于 2015/11/13 17:12
字数 2776
阅读 8300
收藏 194
点赞 10
评论 12


简介

Druid 是一个开源的,分布式的,列存储的,适用于实时数据分析的存储系统,能够快速聚合、灵活过滤、毫秒级查询、和低延迟数据导入

 

  • Druid在设计时充分考虑到了高可用性,各种节点挂掉都不会使得druid停止工作(但是状态会无法更新);

  • Druid中的各个组成部分之间耦合性低,如果不需要实时数据完全可以忽略实时节点;

  • Druid使用Bitmap indexing加速列存储的查询速度,并使用CONCISE算法来对bitmap indexing进行压缩,使得生成的segments比原始文本文件小很多;


架构

整体架构

Druid集群包含不同类型的节点,而每种节点都被设计来做好某组事情。这样的设计可以隔离关注并简化整个系统的复杂度。

不同节点的运转几乎都是独立的并且和其他的节点有着最小化的交互,因此集群内的通信故障对于数据可用性的影响非常小。

Druid集群的构成和数据流向如图1所示:

 

(图1)

Druid 本身包含了五种节点 : Realtime、Historical、Coordinator、Broker、Indexer

  • Historical 历史节点是进行存储和查询的“历史”数据(非实时)的工作区,它会从深存储区(Deep Storage)中加载数据段(Data/Segments),响应 Broker 节点的查询请求并返回结果。历史节点通常会在本机同步深存储区上的部分数据段,所以即使深存储区不可访问了,历史节点还是能查询到已经同步的数据段。

  • Realtime 实时节点是进行存储和查询实时数据的工作区,它也会响应Broker节点的查询请求并返回结果 。实时节点会定期地将数据建立成数据段移到历史节点中。

  • Coordinator 协调节点可以认为是Druid中的master,它通过Zookeeper管理历史节点和实时节点,且通过Mysql中的metadata管理数据段。

  • Broker节点负责响应外部的查询请求,通过查询Zookeeper将请求分别转发给历史节点和实时节点,最终合并并返回查询结果给外部, 由Broker节点通过zookeeper决定哪些历史节点和实时节点提供服务。

  • Indexer 索引节点负责数据导入,加载批次和实时数据到系统中,并可以修改存储到系统中的数据 。

 

Druid 包含3个外部依赖 :Mysql、Deep storage、Zookeeper

 

  • Mysql:存储关于Druid中的metadata而不是存储实际数据,包含3张表:”druid_config”(通常是空的), “druid_rules”(协作节点使用的一些规则信息,比如哪个segment从哪个node去load)和“druid_segments”(存储每个segment的metadata信息);

  • Deep storage: 存储segments,Druid目前已经支持本地磁盘,NFS挂载磁盘,HDFS,S3等。Deep Storage的数据有2个来源,一个是批数据摄入, 另一个来自实时节点;

  • ZooKeeper: 被Druid用于管理当前cluster的状态,比如记录哪些segments从实时节点移到了历史节点;


实时节点

实时节点封装了导入和查询事件数据的功能,经由这些节点导入的事件数据可以立刻被查询。实时节点只关心一小段时间内的事件数据,并定期把这段时间内收集的这批数据导入到深存储区里。实时节点通过Zookeeper来宣布它们的在线状态和它们提供的数据。

(图2)

如图2,实时节点缓存事件数据到内存中的索引上,然后有规律的持久化到磁盘上。在转移之前,持久化的索引会周期性地合并在一起。查询会同时命中内存中的和已持久化的索引。所有的实时节点都会周期性的启动后台的计划任务搜索本地的持久化索引,后台计划任务将这些持久化的索引合并到一起并生成一块不可变的数据,这些数据块包含了一段时间内的所有已经由实时节点导入的事件数据,称这些数据块为”Segment”。在传送阶段,实时节点将这些segment上传到一个永久持久化的备份存储中,通常是一个分布式文件系统,例如S3或者HDFS,称之为”Deep Storage”(深存储区)。


历史节点

历史节点遵循shared-nothing的架构,因此节点间没有单点问题。节点间是相互独立的并且提供的服务也是简单的,它们只需要知道如何加载、删除和处理Segment。类似于实时节点,历史节点在Zookeeper中通告它们的在线状态和为哪些数据提供服务。加载和删除segment的指令会通过Zookeeper来进行发布,指令会包含segment保存在deep storage的什么地方和怎么解压、处理这些segment的相关信息。



(图3)

如图3,在历史节点从深存储区下载某一segment之前,它会先检查本地缓存信息中看segment是否已经存在于节点中,如果segment还不存在缓存中,历史节点会从深存储区下载segment到本地。这阶段处理完成,这个segment就会在Zookeeper中进行通告。此时,这个segment就可以被查询了,查询之前需要将segment加载到内存中。


 

协调节点

 

协调节点主要负责Segment的管理和在历史节点上的分布。协调节点告诉历史节点加载新数据、卸载过期数据、复制数据、和为了负载均衡移动数据。Druid为了维持稳定的视图,使用一个多版本的并发控制交换协议来管理不可变的segment。如果任何不可变的segment包含的数据已经被新的segment完全淘汰了,则过期的segment会从集群中卸载掉。协调节点会经历一个leader选举的过程,来决定由一个独立的节点来执行协调功能,其余的协调节点则作为冗余备份节点。


Broker节点

Broker节点是历史节点和实时节点的查询路由。Broker节点知道发布于Zookeeper中的segment的信息,Broker节点就可以将到来的查询请求路由到正确的历史节点或者是实时节点,Broker节点也会将历史节点和实时节点的局部结果进行合并,然后返回最终的合并后的结果给调用者。Broker节点包含一个支持LRU失效策略的缓存。

(图4)

如图4,每次Broker节点接收到查询请求时,都会先将查询映射到一组segment中去。这一组确定的segment的结果可能已经存在于缓存中,而不需要重新计算。对于那些不存在于缓存的结果,Broker节点会将查询转发到正确的历史节点和实时节点中去,一旦历史节点返回结果,Broker节点会将这些结果缓存起来以供以后使用,这个过程如图6所示。实时数据永远不会被缓存,因此查询实时节点的数据的查询请求总是会被转发到实时节点上去。实时数据是不断变化的,因此缓存实时数据是不可靠的。


Indexer节点

索引服务是运行索引任务相关的高可用性,分布式的服务。索引服务创建(有时破坏)Druid的Segment。索引服务有一个类似主/从的架构。

 

(图5)

 

索引服务是由三个主要部分组成:可以运行单个任务的peon组件,用于管理peon的中层管理组件,以及管理任务分配到中层管理组件的overlord组件。overlord组件和中层管理组件可以在同一节点上或跨多个节点上运行,而中层管理组件和peon组件总是相同的节点上运行。


ZooKeeper 

Druid 使用ZooKeeper(ZK)管理当前集群状态,在ZK上发生的操作有:

 

1.协调节点的leader选举

2.历史和实时节点发布segment协议

3.协调节点和历史节点之间的segment Load/Drop协议

4.overlord的leader选举

5.索引服务任务管理


 

Druid vs 其他系统

 

Druid vs Impala/Shark

Druid和Impala、Shark 的比较基本上可以归结为需要设计什么样的系统

Druid被设计用于:

  1. 一直在线的服务

  2. 获取实时数据

  3. 处理slice-n-dice式的即时查询

查询速度不同:

  • Druid是列存储方式,数据经过压缩加入到索引结构中,压缩增加了RAM中的数据存储能力,能够使RAM适应更多的数据快速存取。索引结构意味着,当添加过滤器来查询,Druid少做一些处理,将会查询的更快。

  • Impala/Shark可以认为是HDFS之上的后台程序缓存层。 但是他们没有超越缓存功能,真正的提高查询速度。

数据的获取不同:

  • Druid可以获取实时数据。

  • Impala/Shark是基于HDFS或者其他后备存储,限制了数据获取的速度。

查询的形式不同:

  • Druid支持时间序列和groupby样式的查询,但不支持join。

  • Impala/Shark支持SQL样式的查询。


 

Druid vs Elasticsearch

Elasticsearch(ES) 是基于Apache Lucene的搜索服务器。它提供了全文搜索的模式,并提供了访问原始事件级数据。 Elasticsearch还提供了分析和汇总支持。根据研究,ES在数据获取和聚集用的资源比在Druid高。

Druid侧重于OLAP工作流程。Druid是高性能(快速聚集和获取)以较低的成本进行了优化,并支持广泛的分析操作。Druid提供了结构化的事件数据的一些基本的搜索支持。

 

Druid vs Spark

Spark是围绕弹性分布式数据集( RDD )的概念,建立了一个集群计算框架,可以被看作是一个后台分析平台。 RDD启用数据复用保持中间结果存在内存中,给Spark提供快速计算的迭代算法。这对于某些工作流程,如机器学习,相同的操作可应用一遍又一遍,直到有结果后收敛尤其有益。Spark提供分析师与不同算法各种各样运行查询和分析大量数据的能力。

Druid重点是数据获取和提供查询数据的服务,如果建立一个web界面,用户可以随意查看数据。

 

引用

论文: Druid A Real-time Analytical Data Store 

官方文档:http://druid.io/docs/0.8.1/design/index.html


© 著作权归作者所有

共有 人打赏支持
beta-o-
粉丝 6
博文 2
码字总数 2849
作品 0
朝阳
加载中

评论(12)

单行道
单行道
学了一招
胡小子
我们
草熘最新2015
你是在借阿里的Druid上位吗?
bigtiger02
bigtiger02
这名字还以为是阿里的Druid连接池呢,还在纳闷这玩意啥时候可以进行数据分析了。
du00cs
du00cs
其实我也有总结过,不过没有这么细,在这个东西上面花掉了两个多月时间。东西还是非常赞的!
车开源
车开源

引用来自“wms1”的评论

我还以为是阿里开源的数据库连接池呢。。。。。
同感,原来不是一回事。
心有灵犀
心有灵犀
你是在借阿里的Druid上位吗?
Leon_wy
Leon_wy

引用来自“wms1”的评论

我还以为是阿里开源的数据库连接池呢。。。。。
我表示也是因为点击进来的
wms1
wms1
我还以为是阿里开源的数据库连接池呢。。。。。
beta-o-
beta-o-

引用来自“东胜神洲”的评论

图没有显示出来。。谢谢
现在看看显示了么
Druid学习笔记(1)Druid介绍与基本概念

概述 随着互联网快速发展,数据量增长快,达到TB、PB,以交通车流量为例,如湖南省每月的车辆流量至少达到4亿,这个数据量远不止如此。数据量如此大,如何满足后期分析,传统面向OLTP型数据库...

sun7545526
2017/11/01
0
0
Druid:一个用于大数据实时处理的开源分布式系统

引言 Druid是一个用于大数据实时查询和分析的高容错、高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分析。尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机...

无寄语
2016/08/31
80
0
EMR Druid 探索(一)

EMR Druid 探索(一) 什么是 Druid、Druid 使用场景 Druid 是 Metamarkets 公司(一家为在线媒体或广告公司提供数据分析服务的公司)推出的一个分布式内存实时分析系统,用于解决如何在大规...

xy_xind
06/01
0
0
OLAP 数据存储系统--Druid-IO

Druid 是一个开源的专为事件数据的 OLAP 查询设计的数据存储系统。Druid 用于大数据实时查询和分析的高容错、高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分析。 ...

匿名
2016/11/07
9K
6
日志分析(一)框架选择

概要 日志分析,有两个主要模块日志收集以及分析统计。日志收集主要实现日志数据源的获取。分析统计是对数据源的聚合和统计分析。 日志收集又分为离线收集和热数据收集:离线收集的日志收集服...

venuser
2015/12/11
353
0
Druid 驱动海量实时多维分析

我今天分享的话题是Druid驱动海量数据实时多维分析。 1、需求背景 首先我来谈一下海量实时多维分析的需求背景,我们广告系统有DSP睿视系统和AD exchange等,前段时间品友的曹老师分享时提到D...

xrzs
2016/06/26
510
1
Druid :大数据实时处理的开源分布式系统(1)

引言 Druid 是一个快速,近实时的查询海量只读数据的系统。Druid 的目标是可用性要达到100%,即使在部署新代码,或者某些节点 down 机的情况下。 Druid 目前支持的单表查询方式和 Dremel,P...

OneAPM蓝海讯通
2015/12/18
143
0
druid-0.8.3-rc2 发布下载,OLAP 数据查询引擎

druid-0.8.3-rc2 发布下载: src="https://github.com/druid-io/druid/archive/druid-0.8.3-rc2.zip" href="https://github.com/druid-io/druid/archive/druid-0.8.3-rc2.zip">https://githu......

oschina
2015/12/20
863
3
OLAP 数据查询引擎--Druid Analytics

Druid 是为大型数据集上实时探索查询的引擎,提供专为 OLAP 设计的开源分析数据存储系统,它的设计意图是在面对代码部署、机器故障以及其他产品系统遇到不测时能保持100%正常运行。它也可以用...

大土豆
2014/11/12
12.4K
1
druid-0.9.1-rc4 发布下载,OLAP 数据查询引擎

druid-0.8.3-rc2 发布下载: Source code (zip) Source code (tar.gz) Druid 是为大型数据集上实时探索查询的引擎,提供专为 OLAP 设计的开源分析数据存储系统,它的设计意图是在面对代码部署...

oschina
2016/06/15
2.4K
4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Hive应用:外部分区表

Hive应用:外部分区表 介绍 Hive可以创建外部分区表。创建表的时候,分区要在建表语句中体现。建完之后,你不会在表中看到数据,需要进行分区添加,使用alter语句进行添加。然后数据才会显示...

星汉
13分钟前
0
0
点击Enter登录

1. 效果 2. 实现过程(记得引入jq文件) //6.回车事件 登录 $(function() { document.onkeydown = function(event) { var e = event || window.event || arguments.callee.caller.arguments......

Lucky_Me
19分钟前
1
0
点击菜单内容切换

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .menu{ height: 38px; background-color: #eeeeee; line-height: 38px; } .mao{ ......

南桥北木
今天
1
0
OSChina 周六乱弹 —— 妹子和游戏哪个更好玩

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享唐朝乐队的单曲《国际歌》 《国际歌》- 唐朝乐队 手机党少年们想听歌,请使劲儿戳(这里) @举个栗子- :日常祈雨 邪恶的大祭...

小小编辑
今天
428
6
流利阅读笔记32-20180721待学习

“人工智能”造假:只有人工,没有智能 Lala 2018-07-21 1.今日导读 当今社会,擅长单个方面的人工智能已经盛行,手机借助 AI 智慧防抖技术帮助大家拍出清晰照片,谷歌研发的 AI 助手将可以帮...

aibinxiao
今天
6
0
我的成长记录(一)

今天突然精神抖擞,在我的博客下新开一项分类>成长记录,专门记录每隔一段时间我的一点感悟吧。因为今天才专门花时间新开这样一个分类,所以以前有过的一些感悟没有记录下来,现在已经想不起...

dtqq
今天
1
0
机器学习管理平台 MLFlow

最近工作很忙,博客一直都没有更新。抽时间给大家介绍一下Databrick开源的机器学习管理平台-MLFlow。 谈起Databrick,相信即使是不熟悉机器学习和大数据的工程湿们也都有所了解,它由Spark的...

naughty
今天
1
0
idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
2
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部