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



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

目标

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

我们已经有大约一百个输入表,每年25 TB。在未来,我们期待更多。

业务有强烈的需求倾向于云无关的解决方案。尽管如此,他们仍然可以使用Databricks,因为它可以在AWS和Azure上使用。

问题

对于我们的堆栈和需求,什么是最好的数据治理解决方案

我的工作失误

我还没有使用任何数据治理解决方案。我喜欢AWS Data Lake解决方案,因为它提供开箱即用的基本功能。AFAIK,Azure数据目录已经过时,因为它不支持ADLS gen2。

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

  1. Databricks Privacera
  2. Databricks Immuta
  3. Apache Ranger&Apache Atlas

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

为什么更喜欢Privacera而不是Immuta,反之亦然

我还应该评估其他选项吗

已经做了什么

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

  1. 在ADLS中定义数据区域
  2. 对敏感数据应用加密/模糊处理(由于GDPR要求)
  3. 在Synapse和Power BI层实现行级安全性(RLS)
  4. 用于记录what&何时持久化

要做的事情

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

我目前正在探索Immuta和Privacera,所以我还不能详细评论这两者之间的差异。到目前为止,Immuta以其优雅的基于政策的设置给我留下了更好的印象。

尽管如此,有一些方法可以在不购买外部组件的情况下解决您上面提到的一些问题:

1.安全

  • 对于RLS,请考虑使用表ACL,并只允许访问某些配置单元视图。

  • 为了访问ADLS内部的数据,请考虑在集群上启用密码传递。不幸的是,您禁用了Scala。

  • 您仍然需要在Azure Data Lake Gen 2上设置权限,这对于授予现有子项目的权限来说是一种糟糕的体验。

  • 请避免使用列/行子集创建数据集副本,因为重复数据从来都不是一个好主意。

2.谱系

  • 一个选择是研究Apache Atlas&样条曲线。以下是如何设置的一个示例https://medium.com/@重新布线/数据线-跟踪-使用-样条-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://marquezproject.github.io/marquez/.小型开源库,具有一些不错的功能,包括数据沿袭

3.数据质量

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

4.数据生命周期管理

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

  • 如果你使用德尔塔格式,你可以更容易地应用保留或伪匿名

  • 第二个选项,假设您有一个包含所有数据集信息的表(dataset_friendly_name、路径、保留时间、区域、敏感列、所有者等)

    DataWrapper.Read("dataset_friendly_name")

    DataWrapper.Write("destination_dataset_friendly_name")

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

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

希望你能从我的回答中找到有用的东西。知道你走哪条路会很有趣。

为了更好地理解您在Azure上引用的数据治理选项#2,这里有一个如何在Databricks上应用RLS的教程;相关的Databricks视频演示;以及其他数据治理教程。

全面披露:我的团队为Immuta的数据工程师制作内容,我希望这能帮助您节省一些研究时间。

Azure Purview是一项新服务,它非常适合您的数据治理需求。目前(2020-12-04)正在公开预览中。它包含您在问题中所关注的功能,例如数据沿袭,并且与您正在使用的Azure服务(Synapse、Databricks、ADLSg2)配合良好。

Purview不是一个与云无关的解决方案。它公开了Apache Atlas API,因此一些核心功能和集成可以在任何云中运行。我仍然将Purview归类为Azure特定的解决方案。

Purview可以管理混合数据,例如本地数据或其他云。这样,它就不知道你的数据在哪里。如果你需要在Azure之外拥有一些数据或用例,Purview也可以管理这些数据资产。

我看到Purview路线图上有数据质量功能,稍后将提供。稍后还将讨论其他治理主题,例如政策。

有关Purview的更多信息,请点击此处:https://azure.microsoft.com/en-us/services/purview/

最新更新