paint-brush
数据湖谜团揭开:Nessie、Dremio 和 MinIO 掀起波澜经过@minio
8,080 讀數
8,080 讀數

数据湖谜团揭开:Nessie、Dremio 和 MinIO 掀起波澜

经过 MinIO6m2024/02/22
Read on Terminal Reader

太長; 讀書

本文提供了分步指南,演示 Nessie、Dremio 和 MinIO 如何协同工作以提高数据工程工作流程中的数据质量和协作。
featured image - 数据湖谜团揭开:Nessie、Dremio 和 MinIO 掀起波澜
MinIO HackerNoon profile picture


我们中的许多人都根据后来发展的需求对数据进行了更改。当我们意识到这一点时,回滚就变得不可能了。变化不仅仅是一个常数;而是一个常数。它是管理数据的重要组成部分,需要采用复杂的方法。输入 Dremio 数据目录 Nessie 的类似 Git 的功能。


正如 Git 已成为软件开发的基础一样,数据工程师也需要类似的工具来并行工作、比较数据版本、促进生产更改并在需要时回滚数据。 Nessie 为数据工程师提供了类似 Git 的版本控制系统,用于管理数据版本、分支、合并和提交。当多个数据工程师同时处理和转换数据时,这非常有帮助。 Nessie 允许每个工程师在不同的分支中工作,同时以主分支的形式维护单一事实来源。此功能使数据工程团队能够在面对不断变化的情况下协作维护数据质量。


本文提供了分步指南,演示 Nessie、Dremio 和 MinIO 如何协同工作以提高数据工程工作流程中的数据质量和协作。无论您是数据工程师、机器学习工程师,还是现代数据湖爱好者,此博客都可以为您提供有效增强数据版本控制实践所需的知识和工具。

了解基础知识:Nessie 工作负载

Nessie 允许类似 Git 的工作负载,让您可以测试、开发并推送到生产环境。让我们分解一些关键概念:


  • 分支:就像在 Git 中一样,Nessie 中的分支允许您同时处理不同的数据工程任务。例如,您可能有一个用于功能开发、数据清理和数据转换的分支。每个分支都可以有自己的一组数据更改。


  • 提交:在 Nessie 中,提交代表特定时间点的数据快照。当您对数据进行更改时,您会创建一个新的提交来记录这些更改。提交链接到特定分支。当您需要将数据恢复到稳定或已知良好的状态时,Nessie 可以轻松选择特定的提交并回滚到该数据版本。这确保了数据质量和一致性。


  • 合并:Nessie 允许您将一个分支的更改合并到另一个分支。这类似于合并 Git 中的代码更改。合并分支时,该分支中所做的数据更改将成为目标分支的一部分。

组件



Dremio是一个分布式分析引擎,作为开源平台运行,为数据探索、转换和协作工作提供直观的自助服务界面。它的设计基于 阿帕奇箭,一种高速列式存储器格式。


我们已经探索了如何使用 Kubernetes 部署 Dremio,以及如何使用 Dremio 查询 MinIO 上的 Iceberg 表。有关 Dremio 的更多信息,请咨询德雷米奥资源


MinIO是高性能对象存储。以其卓越的品质而闻名速度可扩展性,MinIO 是构建和维护现代数据湖基础设施的关键组件。 MinIO 使架构师能够在本地、裸机、边缘或任何公共云上高效管理和存储大量数据。


阿帕奇冰山是一种开放表格式,适合管理数据湖中的大量数据。时间旅行、动态模式演化和分区演化等独特功能使其成为游戏规则改变者,允许查询引擎安全高效地同时处理相同的数据。看使用 Iceberg 和 MinIO 的 Lakehouse 架构权威指南有关 Iceberg 功能的更多信息。

入门

你将需要Docker引擎Docker 组合对于本教程。如果您还没有两者,最简单的方法是安装 Docker Desktop。


这部分教程基于Dremio的博客文章。您可以获得该项目的存储库这里


首先,打开终端并导航到您克隆/下载存储库的文件夹,然后运行以下命令来启动 Dremio。


 docker-compose up dremio


稍等片刻,然后导航至http://localhost:9047以访问 Dremio。更新请求的字段,然后单击下一步。



接下来,运行以下命令来启动 MinIO。


 docker-compose up minio


下面的最后一个docker-compose up命令将启动 Nessie。


 docker-compose up nessie


导航到http://localhost:9001使用用户名和密码minioadmin:minioadmin登录 MinIO。系统会提示您创建存储桶。



创建一个名为iceberg-datalake



然后返回 Dremio http://localhost:9047 ,单击“添加源”并选择“Nessie”。



  • 将名称设置为nessie
  • 将端点 URL 设置为http://nessie:19120/api/v2
  • 将身份验证设置为none



暂时不要单击“保存”。相反,在左侧的导航面板中,单击“存储”。 MinIO 是 S3-API 兼容的对象存储,可以使用与 AWS S3 相同的连接路径。


  • 对于您的访问密钥,设置minioadmin
  • 对于您的密钥,设置minioadmin
  • 将根路径设置为/iceberg-datalake



向下滚动查看下一组说明。

  • 单击Connection Properties下的Add Property按钮以创建和配置以下属性。
    • fs.s3a.path.style.accesstrue
    • fs.s3a.endpoint的端点minio:9000
    • dremio.s3.compattrue
    • 取消选中Encrypt connection



然后单击“保存”。您现在应该在数据源中看到 Nessie Catalogs。



创建数据源

在 Dremio 中,导航到左侧的 SQL Runner。确保文本编辑器右上方区域的Context设置为我们的 Nessie 源。否则,您将必须引用nessie.SalesData等上下文,而不仅仅是SalesData来运行此查询。复制并粘贴下面的 SQL 并运行。


 CREATE TABLE SalesData (    id INT,    product_name VARCHAR,    sales_amount DECIMAL,    transaction_date DATE ) PARTITION BY (transaction_date); 



运行下面的查询将数据插入到您刚刚创建的表中。


 INSERT INTO SalesData (id, product_name, sales_amount, transaction_date) VALUES    (1, 'ProductA', 1500.00, '2023-10-15'),    (2, 'ProductB', 2000.00, '2023-10-15'),    (3, 'ProductA', 1200.00, '2023-10-16'),    (4, 'ProductC', 1800.00, '2023-10-16'),    (5, 'ProductB', 2200.00, '2023-10-17'); 



导航回 MinIO,可以看到您的数据湖已填充了 Iceberg 表。


与 Nessie 的分支和合并

返回 Dremio,网址为http://localhost:9047 。首先使用AT BRANCH语法查询主分支上的表:


 SELECT * FROM nessie.SalesData AT BRANCH main; 



创建 ETL(提取转换和加载)分支,以便您可以在不影响生产的情况下处理和转换数据。


 CREATE BRANCH etl_06092023 in nessie


在 ETL 分支中,将新数据插入表中:

 USE BRANCH etl_06092023 in nessie; INSERT INTO nessie.SalesData (id, product_name, sales_amount, transaction_date) VALUES (6, 'ProductC', 1400.00, '2023-10-18');


确认 ETL 分支中新数据的立即可用性:

 SELECT * FROM nessie.SalesData AT BRANCH etl_06092023;


请注意主分支上用户的更改是隔离的:

 SELECT * FROM nessie.SalesData AT BRANCH main;


将 ETL 分支的更改合并回主分支:

 MERGE BRANCH etl_06092023 INTO main in nessie;


再次选择主分支可以看到更改确实已经合并了。

 SELECT * FROM nessie.SalesData AT BRANCH main


这种分支策略使数据工程师能够独立处理跨多个表的大量事务。当准备就绪时,数据工程师可以将这些事务合并到主分支内的单个、全面的多表事务中。

结论

这篇博文深入探讨了数据工程中类似 Git 的版本控制的力量,强调了如何尼斯湖水怪无缝管理数据版本、分支和合并。本分步指南演示了 Nessie 如何与作为对象存储基础的 Dremio 和 MinIO 合作,增强数据工程工作流程中的数据质量和协作。


让我们知道您的数据湖屋是什么样的你好@minio.io或上我们的 Slack 频道


也出现在这里