随着大数据分析需求的爆炸性增长,很多公司都经历过将以关系型商用数据库为基础的数据平台,转移到一些开源生态的大数据平台,例如Hadoop 或Spark 平台,以可控的软硬件成本处理更大的数据量。Hadoop 设计之初就是为了批量处理大数据,但数据处理实时性经常是它的弱点。例如,很多时候一个MapReduce 脚本的执行,很难估计需要多长时间才能完成,无法满足很多数据分析师所期望的秒级返回查询结果的分析需求。为了解决数据实时性的问题,大部分公司都有一个经历,将数据分析变成更加实时的可交互方案。其中,涉及新软件的引入、数据流的改进等。数据分析的几种常见方法如下图。
大数据分析的发展路程:
Druid 具有如下技术特点。
• 数据吞吐量大。
• 支持流式数据摄入和实时。
• 查询灵活且快。
• 社区支持力度大。
Druid本身包含以下四个节点和一个服务
与Druid架构相辅相成的是基于DataSource和Segment的数据结构。
DataSource的结构:与传统的关系型数据库相比较DataSource可以理解为表,包含下面几点
Segment 结构:Datasource是指的逻辑概念,Segment指的是实际的物理存储格式,Druid通过Segment实现了横纵向切割操作。Druid将不同的时间范围内的数据存放在不同的Segment文件块中,通过时间实现了横向切割,同时,Segment也面向列进行数据压缩存储,这边是纵向切割。
实时节点
实时节点主要负责即时摄入实时数据,以及生成Segment文件。
实时节点通过firehose进行数据的摄入,firehose是Druid实时消费模型。比如通过kafka消费,就是kafkaFireHose。 同时,实时节点的另外一个模块Plumer,用于Segment的生成,并且按照指定的周期,将本周期内生成的所有数据块合并成一个
Segment文件从制造到传播要经历一个完整的过程。
历史节点
历史节点再启动的时候,会优先检查自己的本地缓存中是否已经有了缓存的Segment文件,然后从文件系统中下载属于自己,但还不存在的Segment文件,无论是何种查询,历史节点首先将相关的Segment从磁盘加载到内存。然后在提供服务。
可以看出,历史节点的查询效率受内存空间富余成都的影响很大,内存空间富余,查询时需要从磁盘加载数据的次数减少,查询速度就快,反之,查询时需要从磁盘加载数据的次数就多,查询速度就相对较慢,因此,原则上历史节点的查询速度与其内存大小和所负责的Segment数据文件大小成正比关系
查询节点
在常规情况下,Druid集群直接对外提供查询的节点只有查询节点,而查询节点会将从实时节点与历史节点查询到的数据合并后返回给客户端,因此查询节点便是整个集群的查询中枢。
Druid使用了Cache机制来提高自己的查询效率。Druid立功了两类介质作为Cache以供选择,
如果用查询节点的内存作为Cache,查询的时候会首先访问其Cache,只有当不命中的时候才会去访问历史节点和实时节点查询数据
协调节点
对于整个Druid集群来说。其实并没有真正意义上的Master节点,因为实时节点与查询节点能自行管理并不听命于任何其他节点,但是对于历史节点来说,协调节点便是他们的Master,因为协调节点将会给历史节点分配数据,完成数据分布在历史节点之间的负载均衡。历史节点之间是相互不进行通讯的,全部通过协调节点进行通讯。
利用规则管理数据的生命周期:Druid利用针对每个DataSoure设置的规则来加载或者丢弃具体的文件数据,来管理数据的生命周期,可以对一个DataSource按顺序添加多条规则,对于一个Segment文件来说,协调节点会逐条检查规则,当碰到当前Segment文件负责某条规则的情况下,协调节点会立即命令历史节点对该文件执行此规则,加载或者丢弃,并停止余下的规则,否则继续检查。
索引服务
除了通过实时节点生产Segment文件之外,druid还提供了一组索引服务来摄入数据,相比较于实时节点,索引服务的优点是能够有不同的获取数据的方式,支持pull和push;可以通过API编程的方式来配置任务;可以更加灵活地使用资源;灵活地操作Segment文件等。
索引服务的主从架构
索引服务包含一组组件,并以主从结构作为架构方式,其统治节点 Overload node 为主节点。而中间管理者Middle Manager 为从节点
Overload node:作为索引服务的主节点,对外负责接收任务请求,对内负责将任务分解并下发到从节点即Middle Manager 上,Overload node 有两种运行模式
Middle Manager 与苦工:Middle Manager 即是 Overload node 的工作节点,负责接收Overload node 分配的任务,然后启动相关的Peon来完成任务 这种模式和yarn的架构比较类似