azure - 适用于 Databricks、Synapse 和 ADLS gen2 的数据治理解决方案
问题描述
我是数据治理的新手,如果问题缺少一些信息,请原谅我。
客观的
我们正在 Azure 平台上为中型电信公司从头开始构建数据湖和企业数据仓库。我们将 ADLS gen2、Databricks 和 Synapse 用于 ETL 处理、数据科学、ML 和 QA 活动。
我们已经有大约 100 个输入表和 25 TB/年。未来,我们期待更多。
企业对与云无关的解决方案有强烈的需求。他们仍然可以使用 Databricks,因为它在 AWS 和 Azure 上可用。
问题
什么是我们的堆栈和要求的最佳数据治理解决方案?
我的解决方法
我还没有使用任何数据治理解决方案。我喜欢AWS Data Lake解决方案,因为它提供了开箱即用的基本功能。AFAIK,Azure 数据目录已过时,因为它不支持 ADLS gen2。
经过非常快速的谷歌搜索后,我发现了三个选项:
- Databricks Privacera
- Databricks Immuta
- 阿帕奇游侠和阿帕奇阿特拉斯。
目前我什至不确定第三个选项是否完全支持我们的 Azure 堆栈。此外,它将有更大的开发(基础设施定义)工作。那么我有什么理由应该研究 Ranger/Atlas 的方向吗?
选择 Privacera 而不是 Immuta 的原因是什么,反之亦然?
还有其他我应该评估的选择吗?
已经做了什么
从数据治理的角度来看,我们只做了以下事情:
- 在 ADLS 中定义数据区域
- 对敏感数据应用加密/混淆(由于 GDPR 要求)。
- 在 Synapse 和 Power BI 层实施行级安全性 (RLS)
- 用于记录持久化内容和时间的自定义审计框架
要做的事情
- 数据沿袭和单一事实来源。即使在开始的 4 个月内,理解数据集之间的依赖关系也成为一个痛点。血统信息存储在 Confluence 内部,很难在多个地方维护和持续更新。即使现在它在某些地方已经过时了。
- 安全。未来业务用户可能会在 Databricks Notebooks 中进行一些数据探索。我们需要用于 Databricks 的 RLS。
- 数据生命周期管理。
- 也许其他与数据治理相关的东西,例如数据质量等。
解决方案
我目前正在探索 Immuta 和 Privacera,所以我还不能详细评论这两者之间的差异。到目前为止,Immuta 优雅的基于策略的设置给我留下了更好的印象。
尽管如此,还是有一些方法可以在不购买外部组件的情况下解决您上面提到的一些问题:
1. 安全
对于 RLS,请考虑使用表 ACL,并仅授予对某些 Hive 视图的访问权限。
要访问 ADLS 中的数据,请查看在集群上启用密码传递。不幸的是,你禁用了 Scala。
您仍然需要在 Azure Data Lake Gen 2 上设置权限,这对于授予对现有子项的权限来说是一种糟糕的体验。
请避免使用列/行子集创建数据集副本,因为数据复制绝不是一个好主意。
2. 血统
- 一种选择是研究 Apache Atlas & Spline。这是一个如何设置的示例https://medium.com/@reenugrewal/data-lineage-tracking-using-spline-on-atlas-via-event-hub-6816be0fd5c7
- 不幸的是,Spline 仍在开发中,即使复制文章中提到的设置也不是直截了当的。好消息是 Apache Atlas 3.0 对 Azure Data Lake Gen 2 和其他来源有许多可用的定义
- 在一些项目中,我最终创建了读取/写入的自定义日志记录(好像你也走上了这条路)。基于这些日志,我创建了一个 Power BI 报告来可视化沿袭。
- 考虑使用 Azure 数据工厂进行编排。使用适当的 ADF 管道结构,您可以获得高级别的沿袭,并帮助您查看依赖关系并重新运行失败的活动。您可以在这里阅读更多内容:https ://mrpaulandrew.com/2020/07/01/adf-procfwk-v1-8-complete-pipeline-dependency-chains-for-failure-handling/
- 看看 Marquez https://marquezproject.github.io/marquez/。小型开源库,具有一些不错的功能,包括数据沿袭。
3. 数据质量
- Investigate Amazon Deequ - Scala 到目前为止,但有一些很好的预定义数据质量函数。
- 在许多项目中,我们最终编写了集成测试,检查从青铜(原始)到白银(标准化)之间的数据质量。没什么花哨的,纯粹的 PySpark。
4.数据生命周期管理
一种选择是使用本机数据湖存储生命周期管理。这不是 Delta/Parquet 格式背后的可行替代方案。
如果您使用 Delta 格式,您可以更轻松地应用保留或伪匿名
第二种选择,假设您有一个包含所有数据集信息的表(dataset_friendly_name、路径、保留时间、区域、sensitive_columns、所有者等)。您的 Databricks 用户使用小型包装器来读取/写入:
DataWrapper.Read("dataset_friendly_name")
DataWrapper.Write("destination_dataset_friendly_name")
然后由您在后台实现日志记录和数据加载。此外,您可以跳过sensitive_columns,基于保留时间的行为(均在数据集信息表中提供)。需要相当的努力
- 您可以随时将此表扩展为更高级的模式,添加有关管道、依赖项等的额外信息(参见 2.4)
希望您在我的回答中找到有用的东西。知道你走哪条路会很有趣。
推荐阅读
- javascript - 正则表达式:如何匹配不带任何字符但允许空格后的字符的数字?
- javascript - 如何在条码扫描仪中更改后缀(将键输入到其他键,如 ctrl+1)?
- php - 如何在 Laravel 中获取最新的活动记录?
- gitlab - 无法统计文件路径
- java - 合并两个时间序列数据并同步日期时间?
- ios - EXC_BAD_ACCESS KERN_INVALID_ADDRESS Firebase crashlytics 检测到 NSAttributedString 格式化崩溃
- http - 无法使用 Apollo-Client HttpLink 连接到 GraphQL 服务器
- delphi - 如何在 Delphi 中生成 GUID 版本 1?
- java - Intelliji-idea 在网络上找不到 jar
- python - 尝试使用 Django 部署餐厅情感分析模型时遇到问题