
Druid
文章平均质量分 87
xiaolongleee
玩儿大数据和Spring的
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Druid中的Extension在启动时是如何加载的?
Druid的Extension在开发时,按照Druid的Extension编写规则,启动Module写在文件:META-INF/services/io.druid.initialization.DruidModule中。如HDFS存储扩展,其文件内容就为:io.druid.storage.hdfs.HdfsStorageDruidModuleDruid在启动时,首先加载配置文件:在Main.jav...原创 2018-04-08 21:22:47 · 1364 阅读 · 0 评论 -
Druid解析之管理用的接口大全
在介绍之前,先列一下Druid各部分的端口号(在代码Main.java中):Coordinator8081Historical8083Broker8082Realtime8084Overlord8090MiddleManager8091Router8888下面是管理命令:1. 查询某个Meta Datasource下所有的segments:GET http://<coordinator>...原创 2018-04-26 09:33:41 · 3615 阅读 · 0 评论 -
Druid原理分析之内存池管理(转)
为了减轻JVM垃圾回收带来的性能波动,Druid尽量使用对外内存和系统内存。使用临时文件,在索引创建和合并的过程中,中间临时结果会占用大量的内存。为了减少JVM内存的使用,采用临时文件,通过文件IO的方式,巧妙地利用内核的Page Cache。为了提升IO的性能,Linux操作系统增加了Page Cahe。文件IO的写操作会写到Page Cache中立即返回,内核会定时将脏页也就是还没写到磁盘的页...原创 2018-04-24 21:52:00 · 1236 阅读 · 0 评论 -
Druid源码解析之Segment
上篇我们介绍了Druid的Column相关实现原理,本次介绍Segment的实现原理。Column在Druid中用于管理单列,Segment则用于管理一组列。这组列包括了Dimension和Metric。我们首先看下Segment的定义接口:public interface Segment extends Closeable { public String getIdentifier();...原创 2018-04-24 21:21:51 · 2624 阅读 · 0 评论 -
Druid源码解析之Column
Column是Druid中Segment的基础列的基础接口。其结构图如下所示:首先看下Column接口:public interface Column{ public static final String TIME_COLUMN_NAME = "__time"; public ColumnCapabilities getCapabilities(); public int get...原创 2018-04-23 22:05:34 · 1281 阅读 · 0 评论 -
Druid源码解析之HDFS存储
Druid自身为各种外围功能定义了很多接口,比如存储就定义了:DataSegmentArchiver:用于对segment文件进行archive与restore,可用在s3之类的存储上,将暂时不用的segment放入到别的bucket中。DataSegmentFinder:用于在特定的目录下查找Druid segment,有时会根据正确的loadSpec更新deep storage上所有的desc...原创 2018-04-23 09:21:09 · 1465 阅读 · 0 评论 -
Druid源码解析之Coordinator
Coordinator时Druid的中心协调模块,用于解耦各个模块之间的直接联系,负责Segment的管理与分发,控制历史节点上Segment的装载和删除,并保持Segment在各个历史节点上的负载均衡。Coordinator采用定期运行任务的设计模式。它包含一些不同的任务。Coordinator并不是直接和历史节点发生调用关系,而是通过Zookeeper作为桥梁,将指令发送到Zookeeper上...原创 2018-04-22 20:14:53 · 1737 阅读 · 0 评论 -
Druid.io从0.10.0到0.12.0新特性介绍
Druid-0.10.0新特性1. 内置SQL查询Druid在该版本提供了一个由Apache Calcite支持的内置SQL查询。它提供了两种查询类型:HTTP POST和JDBC。这为开发人员提供了一种新的JSON查询方式的替代方案,并且可以更容易的集成已有原生SQL的应用程序。该版本的SQL尚无法支持全部的JSON功能。在未来的版本中会陆续支持。启用Druid的SQL查询的方式为在配置文件中设...原创 2018-04-05 10:43:04 · 2226 阅读 · 0 评论 -
让Druid实现事件设备数留存数的精准计算
我们在产品中有很多这样的指标需要计算:每天登陆的用户数(设备数)次日留存数(昨天的激活设备而且今天该设备还活跃),七日留存数,自定义日子的留存数。诸如此类根据设备数来算的指标,如何实现?我们之前是将设备ID转换为offset,再将offset转化为bitmap,并将其根据不同维度存在MySQL中。由于每天的写入和查询量太大,MySQL经受了严峻的考验。分库又面临着数据倾斜等各种问题。我们后来准备将...原创 2018-04-03 16:23:09 · 1991 阅读 · 5 评论 -
在Druid中定制自己的扩展【Extension】
Druid用了一个module体系以便于在运行时加载定制的module扩展。实现你自己的扩展Druid的扩展使用Guice以便于在运行时加载。Guice时一个DI框架,但我们用它来保存Druid处理时用的对象图。通过增加Guice binding,扩展可以实现他们想要的对象拓扑图。虽然Druid扩展提供了任何可以扩展的能力,但一般来说,我们希望人们能够扩展列在下面的内容:1. 通过实现 io.dr...翻译 2018-04-03 15:06:15 · 2751 阅读 · 1 评论 -
Druid原理分析之“批”任务数据流转过程
本文以HDFS中的数据作为数据源,描述Druid中对批数据的处理流程:向Druid中提交批数据处理请求。Druid中的批处理任务会从HDFS中获取原数据。批任务会根据处理请求生成segment,并将生成的segments存到Deep Storage(HDFS)中。将生成的segment的元数据信息保存到元数据存储DB(如MySQL)Coordinator会定时从元数据存储DB中查新生成的segme...原创 2018-04-03 14:59:37 · 680 阅读 · 0 评论 -
Druid原理分析之“流”任务数据流转过程
本文以kafka indexing service和下图为例,描述流任务中Druid从数据摄取到数据查询的全部流程:往Druid提交流任务任务后,kafka indexing service根据提交的json描述,将kafka中的原始数据按时间片,维度来进行聚合,生成segment。segment片生成以后,kafka indexing service会将此部分数据注册到Zookeeper,以供B...原创 2018-04-03 14:11:01 · 1929 阅读 · 0 评论 -
Druid原理分析之Segment的存储结构
Segment是Druid中最基本的数据存储单元,采用列式的方式存储某一个时间间隔(interval)内某一个数据源(dataSource)的部分数据所对应的所有维度值、度量值、时间维度以及索引。Segment的逻辑名称结构为:<dataSource>_<intervalStart>_<intervalEnd>_<version>_<parti...原创 2018-04-03 12:34:06 · 4336 阅读 · 0 评论 -
Druid索引与查询原理简析
Druid 是一个为在大数据集之上做实时统计分析而设计的开源数据存储。这个系统集合了一个面向列存储的层,一个分布式、shared-nothing的架构,和一个索引结构,来达成在秒级以内对十亿行级别的表进行任意的探索分析。 由于Druid保存的是时间序列数据,按列的类型,上述数据可以分为以下三类:时间序列(timestamp):Druid中所有的查询以及索引过程都和时间维度息息相关。Druid底层使...原创 2018-04-03 11:15:50 · 4237 阅读 · 0 评论 -
Druid中的负载均衡策略分析
在生产环境中,Druid查询通常能够命中多个(几十或几百个)segment。由于His节点的资源有限,所以segment需要被按照一定的策略均匀的分不到整个集群中,以确保集群的负载不会出现倾斜。要确定最佳的负载分布,需要对业务,查询模式和速度有一定的了解。通常,Druid查询回复改一个独立数据源中最近一段临近时间的一批segment。总体来说,查询更小的segment速度更快。通过以上,我们需要以...原创 2018-04-09 09:18:23 · 2133 阅读 · 0 评论 -
Druid中的Kafka Indexing Service源码分析
Kafka Indexing Service开发的目的是为了增强Kafka中数据的实时摄入。其特性如下:保障数据摄入的Exactly Once。可以摄入任意时间戳的数据,而不仅仅是当前数据。可以根据Kafka分区的变化二调整任务的数量。影响数据摄入Exactly Once的主要因素是Kafka的Offset管理。Kafka Indexing Service为了实现Exactly Once语义,去掉...原创 2018-04-08 22:23:15 · 2240 阅读 · 0 评论 -
Druid源码分析之Query -- Sequence与Yielder
Druid设计了一种可以迭代的序列叫Sequence,其实现在java-util包中。它是对Iterator操作的高级封装。但是它与普通的Iterator不同,它不会为您提供从中提取值的方式,而是提供了一个累加器(Accumulator)并定义数据如何操作。这种控制反转(IoC)的方式是为了更好的让Sequence进行资源管理。当执行结束时,它可以强制调用close()方法来清除资源。如果没有这种...原创 2018-04-27 11:27:46 · 1673 阅读 · 0 评论