基于AIGC写作尝试:深入理解 Dremio

2023-04-17 20:56:47 浏览数 (3)

前言

现代组织不断从各个来源产生和收集大量数据。数据可能存储在不同的格式、位置,并且在容量、速度和种类上可能存在差异,使用户难以快速提取其中的价值。数据孤岛在许多公司都是存在,为了解决数据孤岛问题,企业可以采取的措施有:数据集成、建立数据共享机制、数据标准化、数据虚拟化等。其中数据虚拟化通常需要一个引擎支持读取多源的数据,且统一访问逻辑;业界解决改场景的引擎有Spark、Presto、Dremio等,本文接下来主要描述Dremio。

数据迁移导致成本高、复杂性增加数据迁移导致成本高、复杂性增加

Dremio是一个数据即服务平台,提供快速、自助的数据分析方法。以下三个主要特点是:

数据虚拟化:Dremio 的数据虚拟化功能允许用户访问和查询来自不同来源的数据,而无需物理移动或复制数据。 相反,Dremio 创建了一个逻辑抽象层,将不同的数据源(包括关系数据库、NoSQL 数据库、云存储、Hadoop等)统一到一个单一的逻辑视图中。 这意味着用户可以使用标准 SQL 查询轻松跨多个源查询数据,而无需了解底层数据源或执行任何 ETL 过程。

数据湖加速:Dremio提供强大的加速技术,使用户能够快速分析存储在数据湖中的数据。 通过利用 Apache Arrow 的矢量化处理引擎,与传统系统相比,Dremio 可以将海量数据集的查询速度提高 10-100 倍,包括一个列式存储引擎和自动缓存,可在处理大量数据时提高性能。Reflections功能基于列式存储和内存计算的原理,通过将常用查询结果预先计算和缓存到磁盘或内存中,以便在后续查询中直接使用,从而避免了重复的计算和 I/O 操作。

SQL 加速:Dremio 结合了多种 SQL 加速技术,使用户能够在大型数据集上快速运行复杂的 SQL 查询。 其中包括可以跨多个节点水平扩展的分布式查询引擎、使用机器学习动态优化查询计划的查询优化器,以及支持流行的 BI 工具直接与 Dremio 的 SQL 层交互的创新 JDBC/ODBC 连接器。

此外,Dremio 还提供了强大的数据治理功能,包括数据注释、数据安全、数据版本控制等,帮助用户更好地管理和保护数据。

Dremio支持数据湖场景Dremio支持数据湖场景

以下是外对接的内外部源场景:

  • 云存储:Dremio 可以连接到基于云的存储系统,例如 Amazon S3、Azure Blob Storage 和 Google Cloud Storage。 例如,如果您将数据存储在 S3 存储桶中,则可以使用 Dremio 直接查询该数据,而无需将其移动到本地服务器。 Dremio 的数据虚拟化能力可以让用户无缝访问云端的数据。
  • 数据库:Dremio 支持各种数据库系统,例如 MongoDB、MySQL、PostgreSQL 和 Oracle。 Dremio 可以使用它们的本机驱动程序连接到这些数据库,并允许用户使用 SQL 查询它们。 例如,如果您将客户数据存储在 PostgreSQL 数据库中,则可以使用 Dremio 将该数据与存储在本地服务器 CSV 文件中的销售数据连接起来。
  • 流数据:Dremio 还支持 Apache Kafka 和 Amazon Kinesis 等流数据源。 用户可以配置 Dremio 以使用数据流并创建可以使用 SQL 查询的虚拟数据集。 例如,如果您想实时分析客户交互,您可以使用 Dremio 消费来自 Kafka 的客户事件流并实时生成洞察。

架构原理

Dremio部署架构Dremio部署架构

Dremio的部署架构描述如下:

Coordinator 节点: Dremio 集群的控制中心,负责处理查询请求、协调任务分配、维护元数据等任务。它还包括 Dremio Web UI 和 REST API 等接口,向用户提供管理和监控集群的功能。支持Multi Coordinator 依赖Zookeeper的高可用。

Engine 节点: Dremio 集群中实际执行查询和计算任务的节点。它们从 Coordinator 节点接收任务,并根据需要读取和处理数据。每个 Executor 节点都包含一个或多个工作线程,用于并行执行查询和计算任务。Engine 节点还可以配置缓存和加速器等优化功能,以提高查询性能。

客户端:用户使用的任何与 Dremio 集成的应用程序,例如 BI 工具、ETL 工具、Python 程序等。这些应用程序通过 JDBC/ODBC 或 REST API 接口与 Dremio 集群通信,向其提交查询请求、读取查询结果并访问元数据等。

Dremio功能架构Dremio功能架构

Dremio 是一个分布式数据处理引擎,允许用户查询来自各种来源的数据,例如 Hadoop 分布式文件系统 (HDFS)、NoSQL 数据库和基于云的存储系统。 Dremio的架构可以描述如下:

  1. 数据源:Dremio可以连接多种数据源,包括结构化和半结构化数据源。
  2. Data Reflections:Dremio 创建了一个名为 Data Reflections 的元数据层,其中包含有关存储在源系统中的数据的预聚合和索引信息。 数据反射通过高级索引和缓存技术针对性能进行了优化,最高支持100倍以上的性能提升。
  3. 查询处理层:该层处理用户查询并负责解析、优化和执行它们。 当用户提交查询时,查询规划器对其进行分析,查询规划器根据数据反射中存储的元数据生成执行计划。
  4. 执行引擎:执行引擎负责执行查询计划器生成的查询计划。 它利用分布式计算引擎来并行化工作负载并将其分布在集群中的多个节点上。
  5. 存储层:Dremio以列式存储数据,可以高效处理和分析大型数据集。 此外,Dremio 使用内存缓存来加快查询处理时间。
  6. 资源管理器:资源管理器负责管理集群中的资源,包括CPU、内存和网络带宽。 它确保在集群上运行的所有用户和应用程序之间高效、公平地分配资源。
  7. 客户端界面:客户端界面为用户提供了一种与Dremio交互的方式。 用户可以使用基于 Web 的 UI 或 REST API 提交查询、查看查询结果和访问其他功能。

Dremio查询加速Dremio查询加速

客户端应用程序可以通过ODBC、JDBC或REST向Dremio发出查询。一个查询可能涉及一个或多个数据集,大多数存储在数据湖存储中,但也有可能存储在可选的相对较小的外部数据源中。Dremio利用以下主要技术来减少查询所需处理的量:

  • 直接数据湖存储查询:优化器使用Apache Arrow直接从数据湖存储中读取数据到Arrow缓冲区,采用高速和极端并发的预测式流水线进行大规模并行读取。此外,优化器查询C3以获取自动缓存的数据,实现类似NVME的性能。
  • 推送至可选的外部数据源:优化器考虑底层外部数据源的功能和相关成本。然后生成一个计划,执行查询的各个阶段,无论是在外部源中还是在Dremio的分布式执行环境中,以实现最有效的总体计划。
  • 可选的Data Reflections加速:优化器在查询所有或部分内容时(这将产生最有效的整体计划),使用Data Reflections,这是源数据的高度优化的物理表示。在许多情况下,整个查询可以从Data Reflections中服务。

Dremio查询流程 - Refrections优化Dremio查询流程 - Refrections优化

使用场景

以下是 Dremio 如何帮助业务的一些示例:

  1. 更快的查询:Dremio 的主要优势之一是它处理查询的速度。 通过使用 Dremio,组织已经能够将查询响应时间从几分钟缩短到几秒钟,从而加快决策速度。
  2. 降低成本:Dremio 的开源模型使组织能够避免供应商锁定和许可费用。 此外,Dremio 的数据虚拟化功能可以通过消除对昂贵的数据仓库解决方案的需求来帮助降低基础架构成本。
  3. 自助分析:Dremio 提供了一个自助分析平台,使业务用户能够在不依赖 IT 团队的情况下访问和分析数据。 这帮助组织提高了敏捷性并缩短了获得洞察力的时间。借助 Dremio,用户可以访问其数据的统一视图,确保他们分析的是最新和最准确的可用信息。 这可以帮助组织做出更明智的决策,并避免因数据过时或不准确而导致代价高昂的错误。
  4. 数据治理:Dremio 提供强大的数据治理功能,帮助组织确保遵守 GDPR、CCPA 等法规。组织可以定义策略并将其应用于数据集,以确保数据隐私和安全。
  5. 云数据湖管理:Dremio 通过提供与各种数据源集成的统一界面,帮助组织有效地管理他们的云数据湖。 它支持高效的数据摄取、转换和分析,降低复杂性并提高生产力。
  6. 增强协作:Dremio 通过提供所有利益相关者都可以访问的中央数据中心,实现组织中不同团队之间的协作。 它消除了数据孤岛并提高了透明度,从而做出更好的决策。
  7. 简化数据管理:Dremio 的自助式分析平台让用户无需依赖 IT 团队即可轻松查找和分析数据。 这可以释放宝贵的 IT 资源并提高整体效率。

已用于各种行业和用例的例子:

  • 医疗保健:Dremio 已被用于通过为医疗保健组织提供更快、更准确的患者数据访问来改善患者结果。 例如,犹他大学医疗保健系统使用 Dremio 来统一来自不同来源的数据并启用实时分析,从而带来更好的患者护理。
  • 金融:Dremio 已被用于改善金融行业的风险管理和欺诈检测。 例如,北美一家大型银行使用 Dremio 分析来自多个来源的交易数据并实时识别欺诈活动。
  • 电子商务:Dremio 已被用于提高电子商务行业的客户洞察力和针对性营销。 例如,一家大型在线零售商使用 Dremio 分析来自各种来源的客户数据并个性化产品推荐,从而提高销售额和客户保留率。
  • 能源:Dremio 已被用于优化生产运营并降低能源行业的成本。 例如,一家大型石油和天然气公司使用 Dremio 分析来自钻井平台和生产设施的数据,从而提高了效率并减少了停机时间。
  • 制造业:Dremio 已被用于改善制造业的供应链管理和质量控制。 例如,一家大型汽车制造商使用 Dremio 分析生产线上传感器的数据并实时识别缺陷,从而提高质量并减少浪费。

总结

Dremio这个框架架构和presto/trino是非常类似的,但是在产品化方向走了很远;当然如果有开发人员,是可以基于presto快速的构建出一套和Dremio类似的产品;性能上应该也不会差太多,其中向量化可以对标Velox或者presto代码生成,reflections可以对标物化视图。

Dremio:

  • Dremio是一个开源的数据管理平台,允许用户直接在各种数据源上运行SQL查询。
  • Dremio使用Apache Arrow作为其本地数据格式,使其比传统的查询引擎更快、更高效地处理数据。
  • 为结构化和非结构化数据源提供了统一的界面,例如Hadoop、NoSQL数据库、云存储等。
  • Dremio还提供了高级功能,例如数据筛选、数据谱系和数据反射,以实现优化的性能。

Presto:

  • Presto是另一个开源的分布式SQL查询引擎,主要用于查询大型数据系统。
  • Presto连接到各种数据源,包括Hadoop、Cassandra、MySQL等。
  • Presto的优势在于它能够实时查询大型数据集,无需预处理。
  • Presto使用分布式查询引擎,使其能够在多个节点上处理多个并发查询。

比较:

在数据查询方面,Dremio和Presto都提供类似的功能。但是,它们之间也存在一些差异:

  • Dremio提供了更全面的数据管理解决方案,而Presto主要专注于查询。
  • 尽管这两个平台都支持各种数据源,但Dremio可能更适合数据生态系统更复杂的公司。
  • Presto是需要实时查询的公司的好选择,但Dremio可能更适合需要更强大处理能力的分析工作负载。
  • 这两个平台都拥有强大的社区支持,但Dremio提供了更全面的文档和教程,使用户更容易上手。此外,Dremio还提供了可视化数据探索功能,使用户可以更轻松地进行数据分析和可视化。

本文基于ChatGBT3.5写作。

参考

【1】git link

【2】lakehouse

【3】Document

0 人点赞