EMR Druid 探索(一)

简介: EMR Druid 探索(一) 什么是 Druid、Druid 使用场景 Druid 是 Metamarkets 公司(一家为在线媒体或广告公司提供数据分析服务的公司)推出的一个分布式内存实时分析系统,用于解决如何在大规模数据集下进行快速的、交互式的查询和分析。

EMR Druid 探索(一)

什么是 Druid、Druid 使用场景

Druid 是 Metamarkets 公司(一家为在线媒体或广告公司提供数据分析服务的公司)推出的一个分布式内存实时分析系统,用于解决如何在大规模数据集下进行快速的、交互式的查询和分析。现今有一些非常热的 SQL on Hadoop 解决方案或者基于传统数据库技术的 MPP 方案,前者比如 Hive、Impala、Spark SQL、Presto 等,后者比如 Greenplum。这些方案的查询响应速度往往与数据集的规模成正比,查询时延从秒级到天级不等。这对于想要快速验证想法的业务人员来说是个极大的问题。与这些系统不同,Druid 通过预先聚合一些维度来换取速度,查询时延可以控制在秒亚秒级到秒级。这非常适合那些业务数据维度比较固定,又对查询时延要求非常高的场景,比如

  • 实时指标监控
  • 推荐模型
  • 广告平台
  • 搜索模型

这些场景的特点都是拥有大量的数据,且对数据查询的时延要求非常高。例如在广告程序化交易中,广告平台的出价策略来源于广告流量数据的分析,整个过程要求实时,因为市场变动很快,根据第一天的流量计算第二天的出价是没有意义的,这里的联动需要做到秒级。实时指标监控类似,在一些重要的场合,系统问题需要在出现的一刻被检测到并被反馈随后被解决。在推荐系统或者用户行为分析系统中,模型需要在多个维度分析数据提炼用户行为,并及时更新到线上系统。

Druid 特点

  • 亚秒级 OLAP 查询,包括多维过滤、ad-hoc 的属性分组、快速聚合数据等等
  • 实时的数据消费,真正做到数据摄入实时、查询结果实时
  • 高效的多租户能力,最高可以做到几千用户同时在线查询
  • 扩展性强,支持 PB 级数据、千亿级事件快速处理,支持每秒数千查询并发
  • 极高的高可用保障,支持滚动升级

其中最为亮眼的是第一条与第二条。开源界能够同时做到两者的系统或解决方案并不多见,主要竞争者有 LinkedIn 公司的 Pinot,eBay 公司的 Kylin,以及 Elasticsearch 等。我们下文有专门的对比。

Druid 架构

下图是 Druid 工作层(数据索引以及查询)包含的组件。其中,

  • Realtime 组件负责数据的实时摄入
  • Broker 阶段负责查询任务的分发以及查询结果的汇总,并将结果返回给用户
  • Historical 节点负责索引后的历史数据的存储。数据存储在 deep storage。deep storage 可以是本地,也可以是 HDFS 等分布式文件系统
  • Indexing service 包含两个组件(图中未画出)

    • Overlord 组件负责索引任务的管理、分发
    • MiddleManager 负责索引任务的具体执行

working-laryer

下图是 Druid segments(Druid 索引文件)管理层所涉及的组件。其中

  • Zookeeper 负责存储集群的状态以及作为服务发现组件,例如集群的拓扑信息,overlord leader 的选举,indexing task 的管理等等
  • Coordinator 负责 segments 的管理,如 segments 下载、删除以及如何在 historical 之间做均衡等等。
  • Metadata storage 负责存储 segments 的元信息,以及管理集群各种各样的持久化或临时性数据,比如配置信息、审计信息等等

manage-laryer

Druid 与 Pinot、Kylin 对比

三者均是基于预计算换取查询时延。Druid 与 Pinot 是比较类似的,Kylin 是另外一种。Kylin 实际上是一个预聚合生成 cube 的一个系统。它的数据导入并不是实时的,需要设置定时任务做聚合计算,生成 cube,因此它本质上是一个 cube 生成与管理系统。cube 是一个数据的多维立方体,当维度增多之后 cube 体积会迅速增大。但是在不同的维度间切换视角、或是执行上卷、下钻等操作会非常省时。

Druid 与 Pinot 都是 lambda 架构,既可以通过批处理历史数据,又可以通过流实时处理数据。下表列出了两者在主要维度上的对比

Pinot Druid
发起者 LinkedIn MetaMarkets
发布年份 2015 2011
架构 lambda 架构 lambda 架构
存储方式 列存 列存
索引类型 inverted/start tree/bitmap inverted
消费数据格式 avro/csv/json(historical), Kafka(realtime) json/csv/tsv/regex(any custom data format), stream(rest), Kafka
组件管理 Zookeeper+Helix Zookeeper
文档支持 一般
SQL 支持 PQL Druid SQL
JDBC 不支持,但其java api 类似于jdbc 通过 avatica jdbc driver 支持

Druid 与 Elasticsearch 对比

Elasticsearch (ES) 是一个基于 Lucenen 的搜索引擎系统,原先主要应用于搜索领域,后来加入了聚合等特性,支持了更多的查询类型,从而变成了一个 NoSQL 的数据库。它是从搜索引擎而来,因此具有一些搜索引擎所具有的特点,同时由于其基于搜索的设计,也导致了一些场景下的短板。

ES 的优点主要在于

  • 可以处理海量的数据同时查询时延得到保证 这一点与搜索引擎是类似的
  • 支持全文检索 这一点对于文档型数据非常重要,对于这一类型数据,ES 可以说非常适合
  • 支持聚合查询 通过 ES 提供的聚合接口,用户可以实现多维度的聚合查询
  • 支持明细查询 ES 存储了原始文档的正排信息,查询后可以将原始文档原文输出
  • 支持join join 是很多场景不可避免的,也是很多实时分析系统(如 Druid、Kylin)不具备的,因此支持 join 就是一个很大的优势
  • 良好的扩展性和高可用 不同于 Hadoop 生态系统的很多 master-slave 架构,ES 各节点是全同的,只是在运行时会有一个节点被选举出来做 leader 做一些轻量化的工作。当一个 leader 挂掉后,另外一个就会选举出来
  • 提供了ELK一体化工具 这是一个日志分析场景的一套工具,Logstash 负责数据接入,ES 负责数据分析,Kibana 负责数据展现
  • Schema free 数据可以事先不定义 schema 导入 ES,ES 会自动生成 schema,本质上仍然属于 “schema on write”。

ES 的缺点有

  • 数据导入非实时 ES 不支持实时索引,但是 ES 支持近实时索引作为弥补。
  • 数据膨胀 相对于原始文档,默认配置下 ES 索引后数据是膨胀的,ES 存储了文档的倒排信息和正排信息,有时还要存储文档本身。
  • 不支持SQL ES 官方目前没有支持,其查询语言是一套自定义的 DSL。
  • Range 查询性能较差 这是由其技术基础决定的

Druid 与 ES 是两种技术上完全不同的方案。前者基于数据的预计算换取查询时延,后者则是完全基于倒排索引。Druid 相对于 ES 的优势在于

  1. 实时数据索引与查询
  2. 更适合传统数仓领域的结构化数据,相比 ES 更适合半结构化数据
  3. 更加方便的数据源接入,包括 Kafka、Flink 等接入数据,与 Hadoop 生态融合更好
  4. Range 查询性能更佳

由于两者都具有鲜明的特点,因此针对具体场景选择哪种方案就不存在什么选择困难。对于半结构化的日志分析,ELK 可能更好一些。对于结构化的数据又有实时性的要求的话,Druid 是更好的选择。

Druid 性能

Druid 具有高超的性能。主要体现在:一,很高的水平扩展能力,能够处理极大的数据集;二,预聚合带来的自然加速优势;三,基于内存的计算保证了计算的速度;四,从 deep storage 到磁盘再到内存形成了一个多级缓存架构,热数据能够快速被处理。

下表列出了 Metamarkets 公司 Druid 集群的一些性能指标

  • 每天处理 1000 亿的事件,100TB 的流式数据
  • 超过 100 PB 的原始数据
  • 超过 50000 亿的总数据
  • 上千用户的每秒查询峰值
  • 数万个处理器核
目录
相关文章
|
分布式计算 druid Shell
EMR Druid 探索(二)
EMR Druid 探索(二) EMR Druid 上文介绍了 Druid 的特点、使用场景以及性能。EMR 在 3.11.0 引入了 Druid,并专门推出了一种新的集群类型:Druid 集群。在具体使用时,Druid 集群可以与 Hadoop 集群结合,以 HDFS 集群作为 deep storage 的存储,以 YARN 作为批量索引的计算引擎。
2792 0
|
3月前
|
分布式计算 大数据 MaxCompute
EMR Remote Shuffle Service实践问题之阿里云RSS的开源计划内容如何解决
EMR Remote Shuffle Service实践问题之阿里云RSS的开源计划内容如何解决
|
3月前
|
分布式计算 测试技术 调度
EMR Remote Shuffle Service实践问题之集群中落地阿里云RSS如何解决
EMR Remote Shuffle Service实践问题之集群中落地阿里云RSS如何解决
|
19天前
|
SQL 存储 缓存
阿里云EMR StarRocks X Paimon创建 Streaming Lakehouse
本文介绍了阿里云EMR StarRocks在数据湖分析领域的应用,涵盖StarRocks的数据湖能力、如何构建基于Paimon的实时湖仓、StarRocks与Paimon的最新进展及未来规划。文章强调了StarRocks在极速统一、简单易用方面的优势,以及在数据湖分析加速、湖仓分层建模、冷热融合及全链路ETL等场景的应用。
217 2
阿里云EMR StarRocks X Paimon创建 Streaming Lakehouse
|
8天前
|
SQL 存储 缓存
降本60% ,阿里云 EMR StarRocks 全新发布存算分离版本
阿里云 EMR Serverless StarRocks 现已推出全新存算分离版本,该版本不仅基于开源 StarRocks 进行了全面优化,实现了存储与计算解耦架构,还在性能、弹性伸缩以及多计算组隔离能力方面取得了显著进展。
183 6
|
12天前
|
SQL 存储 缓存
阿里云EMR StarRocks X Paimon创建 Streaming Lakehouse
讲师焦明烨介绍了StarRocks的数据湖能力,如何使用阿里云EMR StarRocks构建基于Paimon的极速实时湖仓,StarRocks与Paimon的最新进展及未来规划。
73 3
|
2月前
|
SQL 分布式计算 Serverless
阿里云 EMR Serverless Spark 版正式开启商业化
阿里云 EMR Serverless Spark 版正式开启商业化,内置 Fusion Engine,100% 兼容开源 Spark 编程接口,相比于开源 Spark 性能提升300%;提供 Notebook 及 SQL 开发、调试、发布、调度、监控诊断等一站式数据开发体验!
101 3
阿里云 EMR Serverless Spark 版正式开启商业化
|
2月前
|
SQL 存储 NoSQL
阿里云 EMR StarRocks 在七猫的应用和实践
本文整理自七猫资深大数据架构师蒋乾老师在 《阿里云 x StarRocks:极速湖仓第二季—上海站》的分享。
213 2
|
3月前
|
存储 分布式计算 大数据
大数据革新在即,阿里云EMR如何布局DeltaLake引领行业潮流?
【8月更文挑战第26天】大数据时代,实时处理与分析能力对企业至关重要。Delta Lake 作为高性能、可靠且支持 ACID 事务的开源存储层,已成为业界焦点。阿里云 EMR 深度布局 Delta Lake,计划深化集成、强化数据安全、优化实时性能,并加强生态建设与社区贡献。通过与 Spark 的无缝对接及持续的技术创新,阿里云 EMR 致力于提供更高效、安全的数据湖解决方案,引领大数据处理领域的发展新方向。
44 3
|
3月前
|
存储 分布式计算 监控
揭秘阿里云EMR:如何巧妙降低你的数据湖成本,让大数据不再昂贵?
【8月更文挑战第26天】阿里云EMR是一种高效的大数据处理服务,助力企业优化数据湖的成本效益。它提供弹性计算资源,支持根据需求调整规模;兼容并优化了Hadoop、Spark等开源工具,提升性能同时降低资源消耗。借助DataWorks及Data Lake Formation等工具,EMR简化了数据湖构建与管理流程,实现了数据的统一化治理。此外,EMR还支持OSS、Table Store等多种存储选项,并配备监控优化工具,确保数据处理流程高效稳定。通过这些措施,EMR帮助企业显著降低了数据处理和存储成本。
116 3