适用于 Databricks、Synapse 和 ADLS gen2 的数据治理解决方案

2024-04-03

我是数据治理的新手,如果问题缺少一些信息,请原谅我。

客观的

我们正在 Azure 平台上为中型电信公司从头开始构建数据湖和企业数据仓库。我们使用 ADLS gen2、Databricks 和 Synapse 进行 ETL 处理、数据科学、ML 和 QA 活动。

我们已经拥有大约一百个输入表和每年 25 TB 的数据。未来我们期待更多。

企业对与云无关的解决方案有强烈的需求倾向。他们仍然对 Databricks 表示满意,因为它可以在 AWS 和 Azure 上使用。

Question

适合我们的堆栈和要求的最佳数据治理解决方案是什么?

我的解决方法

我还没有使用过任何数据治理解决方案。我喜欢AWS 数据湖 https://aws.amazon.com/solutions/data-lake-solution/解决方案,因为它提供了开箱即用的基本功能。 AFAIK,Azure 数据目录 https://azure.microsoft.com/en-us/services/data-catalog/已经过时了,因为它不支持 ADLS gen2 https://learn.microsoft.com/en-us/azure/data-catalog/data-catalog-dsr.

经过快速谷歌搜索后,我发现了三个选项:

  1. Databricks 隐私 https://www.privacera.com/databricks.php#databricks
  2. 数据块Immuta https://www.immuta.com/databricks/
  3. 阿帕奇游骑兵和阿帕奇阿特拉斯。

目前我什至不确定第三个选项是否完全支持我们的 Azure 堆栈。此外,它将有更大的开发(基础设施定义)工作。那么我有什么理由应该研究 Ranger/Atlas 方向吗?

相比 Immuta 更喜欢 Privacera 的原因是什么?反之亦然?

我还应该评估其他选择吗?

已经完成的事情

从数据治理的角度来看,我们只做了以下几件事:

  1. 在 ADLS 内定义数据区域
  2. 对敏感数据应用加密/混淆(由于 GDPR 要求)。
  3. 在 Synapse 和 Power BI 层实施行级安全性 (RLS)
  4. 用于记录持久化内容和时间的自定义审核框架

要做的事情

  1. 数据沿袭和单一事实来源。即使在开始 4 个月后,理解数据集之间的依赖关系也成为一个痛点。沿袭信息存储在Confluence内部,很难在多个地方进行维护和持续更新。即使现在,它在某些地方已经过时了。
  2. 安全。商业用户将来可能会在Databricks Notebooks中进行一些数据探索。我们需要 Databricks 的 RLS。
  3. 数据生命周期管理。
  4. 也许还有其他数据治理相关的东西,例如数据质量等。

我目前正在探索 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 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/ https://mrpaulandrew.com/2020/07/01/adf-procfwk-v1-8-complete-pipeline-dependency-chains-for-failure-handling/
  • 看看马尔克斯https://marquezproject.github.io/marquez/ https://marquezproject.github.io/marquez/。小型开源库,具有一些不错的功能,包括数据沿袭。

3. 数据质量

  • 到目前为止仅研究 Amazon Deequ - Scala,但它具有一些很好的预定义数据质量函数。
  • 在许多项目中,我们最终编写了集成测试,检查从青铜(原始)到白银(标准化)之间的数据质量。没什么花哨的,纯粹的 PySpark。

4.数据生命周期管理

  • 一种选择是使用本机数据湖存储生命周期管理。这不是 Delta/Parquet 格式背后的可行替代方案。

  • 如果您使用 Delta 格式,您可以更轻松地应用保留或伪匿名

  • 第二个选项,假设您有一个表,其中包含有关所有数据集的信息(dataset_friend_name、路径、保留时间、区域、sensitive_columns、所有者等)。您的 Databricks 用户使用一个小包装器来读/写:

    DataWrapper.Read(“数据集友好名称”)

    DataWrapper.Write(“destination_dataset_friend_name”)

然后由您在后台实现日志记录和数据加载。此外,您可以跳过sensitive_columns,根据保留时间进行操作(两者都在数据集信息表中可用)。需要相当多的努力

  • 您始终可以将此表扩展到更高级的模式,添加有关管道、依赖项等的额外信息(参见 2.4)

希望您能在我的回答中找到有用的内容。知道你走了哪条路会很有趣。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适用于 Databricks、Synapse 和 ADLS gen2 的数据治理解决方案 的相关文章

随机推荐