初识Druid.io实时OLAP数据分析存储系统


lxw1234.com网站阅读学习Druid整理的笔记
参考链接:http://lxw1234.com/archives/2015/11/563.htm


一、简介

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

特点:

  • Druid在设计时充分考虑到了高可用性,各种节点挂掉都不会使得druid停止工作(但是状态会无法更新);
  • Druid中的各个组成部分之间耦合性低,如果不需要实时数据完全可以忽略实时节点;
  • Druid使用Bitmap indexing加速列存储的查询速度,并使用CONCISE算法来对bitmap indexing进行压缩,使得生成的segments比原始文本文件小很多;

二、整体架构

Druid集群的构成和数据流向:
在这里插入图片描述
Druid 包含了五种节点 : Realtime、Historical、Coordinator、Broker、Indexer

  • Historical:历史节点是进行存储和查询的“历史”数据(非实时)的工作区,它会从深存储区(Deep Storage)中加载数据段(Data/Segments),响应 Broker 节点的查询请求并返回结果。历史节点通常会在本机同步深存储区上的部分数据段,所以即使深存储区不可访问了,历史节点还是能查询到已经同步的数据段。
  • Realtime:实时节点是进行存储和查询实时数据的工作区,它也会响应Broker节点的查询请求并返回结果 。实时节点会定期地将数据建立成数据段移到历史节点中。
  • Coordinator:协调节点可以认为是Druid中的master,它通过Zookeeper管理历史节点和实时节点,且通过Mysql中的metadata管理数据段。
  • Broker:节点负责响应外部的查询请求,通过查询Zookeeper将请求分别转发给历史节点和实时节点,最终合并并返回查询结果给外部, 由Broker节点通过zookeeper决定哪些历史节点和实时节点提供服务。Broker节点使用Zookeeper来确定哪些Realtime和Historical节点的存在。
  • 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从实时节点移到了历史节点;

三、安装和配置

参考:http://lxw1234.com/archives/2015/11/554.htm

四、数据导入

导入数据方式

  • 文件。 从HDFS, S3, 本地文件等地方导入。

  • Stream push。使用Tranquility工具实时向Druid摄入数据,这种方式通常用于Kafka, Storm, Spark Streaming等。

  • Stream pull。 从外部数据源拉取数据,不常用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章