Azure Data Lake Storage Gen2 (ADLS Gen2) 是用于大数据分析的高度可扩展且经济高效的数据湖解决方案。随着我们继续与客户合作,利用 ADLS Gen2 从他们的数据中发掘关键洞察,我们已经确定了一些关键模式和注意事项,可帮助他们在大规模大数据平台架构中有效利用 ADLS Gen2。
本文档记录了我们在与客户合作的基础上学到的这些注意事项和最佳实践。就本文档而言,我们将重点介绍我们的大型企业客户在 Azure 上大量使用的现代数据仓库模式,包括我们的解决方案,例如 Azure Synapse Analytics。
我们将改进此文档以在未来的迭代中包含更多分析模式。
重要提示:请将此文档的内容视为指导和最佳实践,以帮助您做出架构和实施决策。这不是官方的 HOW-TO 文档。
企业数据湖旨在成为大数据平台中使用的非结构化、半结构化和结构化数据的中央存储库。企业数据湖的目标是消除数据孤岛(数据只能由组织的一部分访问)并促进单一存储层,以适应组织的各种数据需求有关选择正确的更多信息存储解决方案,请访问在 Azure 中选择大数据存储技术一文。
出现的一个常见问题是何时使用数据仓库与数据湖。我们敦促您将数据湖和数据仓库视为互补的解决方案,它们可以协同工作,帮助您从数据中获得关键见解。数据湖是存储来自各种来源的所有类型数据的存储库。自然形式的数据存储为原始数据,并在此原始数据上应用模式和转换,以根据业务试图回答的关键问题获得有价值的业务洞察力。数据仓库是高度结构化的模式化数据的存储,这些数据通常被组织和处理以获得非常具体的见解。例如。零售客户可以将过去 5 年的销售数据存储在数据湖中,此外,他们可以处理来自社交媒体的数据,从零售分析解决方案中提取消费和情报的新趋势,并利用所有这些作为输入一起生成一个数据集,可用于预测明年的销售目标。然后,他们可以将高度结构化的数据存储在数据仓库中,BI 分析师可以在其中构建目标销售预测。此外,他们可以使用数据湖中相同的销售数据和社交媒体趋势来构建智能机器学习模型,以在其网站上进行个性化推荐。
ADLS Gen2 是适用于大数据分析工作负载的企业级超大规模数据存储库。ADLS Gen2 通过分层命名空间提供更快的性能和 Hadoop 兼容访问,通过细粒度访问控制和本机 AAD 集成降低成本和安全性。这适合作为专注于大数据分析场景的企业数据湖的选择——使用转换从非结构化数据中提取高价值的结构化数据、使用机器学习的高级分析或实时数据摄取和分析以获得快速洞察力。值得注意的是,我们已经看到客户对超大规模的定义有不同的定义——这取决于存储的数据、交易数量和交易吞吐量。当我们说超大规模时,我们通常指的是数 PB 的数据和数百 Gbps 的吞吐量——这种分析所涉及的挑战与吞吐量中的数百 GB 数据和几 Gbps 的事务非常不同。
当您在 ADLS Gen2 上构建企业数据湖时,了解您对关键用例的需求很重要,包括
对于我们一直从客户那里听到的一些关键设计/架构问题,我们希望将本文档的其余部分固定在以下结构中。
为了最好地利用本文档,请确定您的关键场景和要求,并根据您的要求权衡我们的选项以决定您的方法。如果您无法选择完全适合您的场景的选项,我们建议您使用一些选项进行概念验证 (PoC),让数据指导您的决策。
在我们讨论构建数据湖的最佳实践之前,熟悉我们将在使用 ADLS Gen2 构建数据湖的上下文中使用的各种术语非常重要。本文档假设您在 Azure 中有一个帐户。
随着我们的企业客户制定他们的数据湖战略,ADLS Gen2 的关键价值主张之一是作为其所有分析场景的单一数据存储。请记住,这个单一数据存储是一个逻辑实体,根据设计考虑,它可以表现为单个 ADLS Gen2 帐户或多个帐户。一些客户拥有分析管道组件的端到端所有权,而其他客户则拥有一个中央团队/组织来管理数据湖的基础架构、运营和治理,同时为多个客户提供服务——无论是他们企业中的其他组织还是外部的其他客户到他们的企业。
在本节中,我们针对客户在设计企业数据湖时听到的一系列常见问题提出了我们的想法和建议。作为说明,我们将以大型零售客户 Contoso.com 为例,构建他们的数据湖策略以帮助处理各种预测分析场景。
作为企业数据湖,您有两种可用的选择——要么将所有数据管理集中在一个组织内以满足您的分析需求,要么拥有一个联合模型,您的客户管理他们自己的数据湖,而集中式数据团队提供指导并管理数据湖的几个关键方面,例如安全性和数据治理。重要的是要记住,集中式和联合数据湖策略都可以使用一个存储帐户或多个存储帐户来实施。
客户问我们的一个常见问题是,他们是否可以在单个存储帐户中构建数据湖,或者他们是否需要多个存储帐户。虽然从技术上讲,单个 ADLS Gen2 可以解决您的业务需求,但客户选择多个存储帐户的原因有多种,包括但不限于本节其余部分中的以下场景。
在决定要创建的存储帐户数时,以下注意事项有助于决定要预配的存储帐户数。
让我们将这些方面放在一些场景的上下文中。
在全球市场和/或地理分布的组织的推动下,有些情况下,企业的分析场景将多个地理区域考虑在内。数据本身可以分为两大类。
在这种情况下,客户将提供特定于区域的存储帐户来存储特定区域的数据并允许与其他区域共享特定数据。这里仍然有一个集中的逻辑数据湖,其中包含一组由多个存储帐户组成的中央基础设施管理、数据治理和其他操作。
存在企业数据湖服务于多个客户(内部/外部)场景的场景,这些场景可能会受到不同的要求——不同的查询模式和不同的访问要求。让我们以我们的 Contoso.com 为例,他们有分析方案来管理公司运营。在这种情况下,他们拥有各种数据源——员工数据、客户/活动数据和财务数据,这些数据受不同治理和访问规则的约束,也可能由公司内的不同组织管理。在这种情况下,他们可以选择为各种数据源创建不同的数据湖。
在另一种情况下,作为为多个客户提供服务的多租户分析平台的企业最终可能会为不同订阅中的客户提供单独的数据湖,以帮助确保客户数据及其相关的分析工作负载与其他客户隔离,以帮助管理他们的成本和计费模式。
当您决定 ADLS Gen2 存储帐户的数量时,请确保针对您的消费模式进行优化。如果您不需要隔离并且您没有充分利用您的存储帐户的功能,您将承担管理多个帐户的开销,而没有有意义的投资回报。
当您拥有多个数据湖时,您需要谨慎对待的一件事是您是否以及如何跨多个帐户复制数据。这会产生一个管理问题,即真相的来源是什么以及它需要有多新鲜,并且还会消耗涉及来回复制数据的事务。如果您有一个合法的方案来复制您的数据,我们的路线图中有一些功能可以使此工作流程更容易。
我们的客户问的一个常见问题是,单个存储帐户是否可以无限地继续扩展以满足他们的数据、事务和吞吐量需求。我们在 ADLS Gen2 中的目标是满足客户所需的极限。当您遇到需要真正存储大量数据(数 PB)并需要帐户支持真正大的事务和吞吐量模式(数万 TPS 和数百 Gbps 吞吐量)的场景时,我们确实要求),通常通过 Databricks 或 HDInsight 进行分析处理需要 1000 个计算能力核心,请联系我们的产品组,以便我们可以计划适当地支持您的要求。
ADLS Gen2 帐户中的数据组织可以在容器、文件夹和文件的层次结构中按顺序完成,如我们上面所见。当我们与客户合作制定他们的数据湖策略时,一个非常常见的讨论点是他们如何最好地组织他们的数据。有多种方法可以在数据湖中组织数据,本节记录了许多构建数据平台的客户采用的通用方法。
该组织跟踪数据的生命周期,因为它通过源系统一直流向最终消费者——BI 分析师或数据科学家。例如,让我们跟随销售数据通过 Contoso.com 的数据分析平台的旅程。
例如,将原始数据视为自然状态下有水的湖泊/池塘,数据按原样摄取和存储,未经转换,丰富的数据是水库中的水,经过清洗并以可预测的状态存储(以我们的数据为例),策划的数据就像准备消费的瓶装水。工作区数据就像一个实验室,科学家可以在其中携带自己的数据进行测试。值得注意的是,虽然所有这些数据层都存在于单个逻辑数据湖中,但它们可能分布在不同的物理存储帐户中。在这些情况下,拥有 Metastore 有助于发现。
在决定数据结构时,请考虑数据本身的语义以及访问数据的消费者,以确定适合您的数据组织策略。
考虑 | 原始数据 | 丰富的数据 | 策划的数据 | 工作空间数据 |
---|---|---|---|---|
消费者 | 数据工程团队 | 数据工程团队,由数据科学家/BI分析师提供临时访问模式 | 数据工程师、BI分析师、数据科学家 | 数据科学家/BI分析师 |
访问控制 | 数据工程团队已锁定访问权限 | 完全控制数据工程团队,并对BI分析师/数据科学家具有读取权限 | 完全控制数据工程团队,对BI分析师/数据科学家具有读写权限 | 完全控制数据工程师、数据科学家/BI 分析师 |
数据生命周期管理 | 一旦生成了丰富的数据,就可以将其移动到较冷的存储层以管理成本。 | 较旧的数据可以移动到较冷的层。 | 较旧的数据可以移动到较冷的层。 | 虽然最终消费者可以控制这个工作区,但要确保有清理不必要数据的流程和策略——例如,使用基于策略的 DLM,数据可以很容易地建立起来。 |
文件夹结构和层次结构 | 文件夹结构以反映摄入模式。 | 文件夹结构反映组织,例如业务部门。 | 文件夹结构反映组织,例如业务部门。 | 文件夹结构反映了工作区所使用的团队。 |
实例 | /raw/sensordata /raw/lobappdata /raw/userclickdata | /enriched/sales /enriched/manufacturing | /curated/sales /curated/manufacturing | /workspace/salesBI /workspace/manufacturindatascience |
考虑 | 容器 | 文件夹 |
---|---|---|
等级 | 容器可以包含文件夹或文件。 | 文件夹可以包含其他文件夹或文件。 |
使用AAD的访问控制 | 在容器级别,可以使用RBAC设置粗粒度的访问控制。这些RBAC适用于容器内的所有数据。 | 在文件夹级别,可以使用ACL设置细粒度的访问控制。ACL仅适用于该文件夹(除非使用默认ACL,在这种情况下,在该文件夹下创建新文件/文件夹时会对其进行快照)。 |
非AAD访问控制 | 在容器级别,可以启用匿名访问(通过共享密钥)或设置特定于容器的SAS密钥。 | 文件夹不支持非AAD访问控制。 |
虽然 ADLS Gen2 存储不是很昂贵,并且允许您在存储帐户中存储大量数据,但即使您不需要整个数据语料库,生命周期管理策略的缺失也可能最终导致存储中数据的增长非常快为您的方案。我们看到这种数据增长的两种常见模式是:-
ADLS Gen2 支持结合 RBAC 和 ACL 来管理数据访问的访问控制模型。您可以在此处找到有关访问控制的更多信息。除了使用 RBAC 和 ACL 使用 AAD 身份管理访问之外,ADLS Gen2 还支持使用 SAS 令牌和共享密钥来管理对 Gen2 帐户中数据的访问。
我们从客户那里听到的一个常见问题是何时使用 RBAC 以及何时使用 ACL 来管理对数据的访问。RBAC 允许您将角色分配给安全主体(AAD 中的用户、组、服务主体或托管标识),并且这些角色与容器中数据的权限集相关联。RBAC 可以帮助管理与控制平面操作(例如添加其他用户和分配角色、管理加密设置、防火墙规则等)或数据平面操作(例如创建容器、读写数据等)相关的角色。有关 RBAC 的更多信息,您可以阅读这篇文章。
RBAC 本质上仅限于顶级资源——ADLS Gen2 中的存储帐户或容器。您还可以在资源组或订阅级别跨资源应用 RBAC。ACL 允许您将安全主体的一组特定权限管理到更窄的范围 - ADLS Gen2 中的文件或目录。有 2 种类型的 ACL——访问 ADL 控制对文件或目录的访问,默认 ACL 是为与目录关联的目录设置的 ACL 模板,这些 ACL 的快照由在下创建的任何子项继承那个目录。
下表提供了如何使用 ACL 和 RBAC 来管理 ADLS Gen2 帐户中数据权限的快速概览——在较高级别,使用 RBAC 来管理粗粒度权限(适用于存储帐户或容器)并使用用于管理细粒度权限的 ACL(适用于文件和目录)。
Consideration | RBACs | ACLs |
---|---|---|
Scope | Storage accounts, containers. Cross resource RBACs at subscription or resource group level. | Files, directories |
Limits | 2000 RBACs in a subscription | 32 ACLs (effectively 28 ACLs) per file, 32 ACLs (effectively 28 ACLs) per folder, default and access ACLs each |
Supported levels of permission | Built-in RBACs or custom RBACs | ACL permissions |
在容器级别使用 RBAC 作为数据访问控制的唯一机制时,请注意 2000 的限制,尤其是在您可能拥有大量容器的情况下。您可以在门户的任何访问控制 (IAM) 刀片中查看每个订阅的角色分配数量。
数据可能以多种格式到达您的数据湖帐户——人类可读的格式,如 JSON、CSV 或 XML 文件,压缩的二进制格式,如 .tar.gz 和各种大小——巨大的文件(几 TB),如从本地系统导出 SQL 表或从 IoT 解决方案导出大量小文件(几 KB),例如实时事件。虽然 ADLS Gen2 支持在不施加任何限制的情况下存储所有类型的数据,但最好考虑数据格式以最大限度地提高处理管道的效率并优化成本——您可以通过选择正确的格式和正确的文件大小来实现这两个目标。Hadoop 有一组它支持的文件格式,用于优化存储和处理结构化数据。让我们看看一些常见的文件格式——Avro、Parquet 和 ORC。所有这些都是机器可读的二进制文件格式,提供压缩来管理文件大小,并且本质上是自描述的,文件中嵌入了模式。格式之间的区别在于数据的存储方式——Avro 以基于行的格式存储数据,而 Parquet 和 ORC 格式以列格式存储数据。
ADLS Gen2 为您的分析场景提供数据湖存储,目标是降低您的总拥有成本。可以在此处找到 ADLS Gen2 的定价。由于我们的企业客户满足多个组织的需求,包括中央数据湖上的分析用例,他们的数据和交易往往会急剧增加。由于很少或没有集中控制,相关成本也会增加。本部分提供了可用于管理和优化数据湖成本的关键注意事项。
了解您的数据湖的使用方式及其执行方式是操作您的服务并确保它可供使用其中包含的数据的任何工作负载使用的关键组成部分。这包括:
数据湖的所有遥测数据均可通过 Azure Monitor 中的 Azure 存储日志获得。Azure Monitor 中的 Azure 存储日志是 Azure 存储的一项新预览功能,它允许您的存储帐户与 Log Analytics、事件中心以及使用标准诊断设置将日志存档到另一个存储帐户之间的直接集成。可以在 Azure 存储监视数据参考中找到指标和资源日志的完整列表及其关联架构的参考。
以下查询可用于深入了解数据湖的性能和健康状况:
Azure Monitor 中 Azure 存储日志的所有内置查询的列表可在 GitHub 上的 Azure Montior 社区的 Azure 服务/存储帐户/查询文件夹中找到。
正在建设中,寻求贡献
在本节中,我们将讨论如何优化数据湖存储以提高分析管道中的性能。在本节中,我们将重点介绍帮助您优化存储事务的基本原则。为确保我们拥有正确的上下文,没有优化数据湖的灵丹妙药或 12 步流程,因为很多考虑因素取决于您尝试解决的特定用途和业务问题。但是,当我们谈论优化数据湖以提高性能、可扩展性甚至成本时,归结为两个关键因素:-
作为优化的先决条件,了解有关事务配置文件和数据组织的更多信息非常重要。鉴于分析场景的不同性质,优化取决于您的分析管道、存储 I/O 模式和您操作的数据集,特别是数据湖的以下方面。
请注意,我们讨论的场景主要侧重于优化 ADLS Gen2 性能。除了存储性能考虑之外,分析管道的整体性能还会有特定于分析引擎的考虑,我们与 Azure 上的分析产品(如 Azure Synapse Analytics、HDInsight 和 Azure Databricks)的合作关系确保我们专注于打造整体体验更好的。同时,虽然我们以特定引擎为例,但请注意,这些示例主要讨论存储性能。
分析引擎(您的摄取或数据处理管道)会为其读取的每个文件(与列出、检查访问和其他元数据操作相关)产生开销,而过多的小文件会对您的整体工作的性能产生负面影响。此外,当您的文件太小(在 KB 范围内)时,您通过 I/O 操作实现的吞吐量也很低,需要更多的 I/O 来获取您想要的数据。通常,最佳做法是将数据组织成更大的文件(目标至少为 100 MB 或更多)以获得更好的性能。
在很多情况下,如果您的原始数据(来自各种来源)本身并不大,您可以使用以下选项来确保您的分析引擎所操作的数据集仍然使用大文件进行优化。
正如我们已经讨论过的,优化您的存储 I/O 模式可以在很大程度上使您的分析管道的整体性能受益。值得一提的是,选择正确的文件格式不仅可以提供更好的性能,还可以降低数据存储成本。Parquet 是一种非常流行的数据格式,值得为您的大数据分析管道进行探索。
Apache Parquet 是一种开源文件格式,针对读取繁重的分析管道进行了优化。Parquet 的列式存储结构让您可以跳过不相关的数据,从而提高查询效率。这种跳过的能力还会导致只将您想要的数据从存储发送到分析引擎,从而降低成本并提高性能。此外,由于相似的数据类型(对于一列)存储在一起,与以文本文件格式存储相同数据相比,Parquet 有助于高效的数据压缩和编码方案,从而降低数据存储成本。
Azure Synapse Analytics、Azure Databricks 和 Azure 数据工厂等服务内置了本机功能,可以利用 Parquet 文件格式。
有效的数据分区方案可以提高分析管道的性能,还可以降低查询产生的总体事务成本。简单来说,分区是一种通过将具有相似属性的数据集分组到一个存储实体(例如文件夹)中来组织数据的方法。当您的数据处理管道查询具有相似属性的数据(例如过去 12 小时内的所有数据)时,分区方案(在这种情况下,由 datetime 完成)让您跳过不相关的数据,只寻找那些你要。
让我们以 Contoso 的 IoT 场景为例,其中数据从各种传感器实时摄取到数据湖中。现在,您有多种存储数据的选项,包括(但不限于)下面列出的选项:
/<sensorid>/<datetime>/<temperature>, <sensorid>/<datetime>/<pressure>, <sensorid>/<datetime>/<humidity>
/<datetime>/<sensorid>/<temperature>, /<datetime>/<sensorid>/<pressure>, /datetime>/<sensorid>/<humidity>
<temperature>/<datetime>/<sensorid>, <pressure>/<datetime>/<sensorid>, <humidity>/<datetime>/<sensorid>
如果高优先级方案是根据传感器发送的值了解传感器的健康状况以确保传感器正常工作,那么您将每隔一小时左右运行一次分析管道,以对来自特定传感器的数据与来自其他传感器的数据进行三角测量以确保它们正常工作。在这种情况下,选项 2 将是组织数据的最佳方式。相反,如果您的高优先级方案是根据传感器数据了解该地区的天气模式以确保您需要采取哪些补救措施,您将定期运行分析管道,以根据该地区的传感器数据评估天气。在这种情况下,您可能希望通过传感器ID 上的日期和属性来优化组织。
Apache Spark 等开源计算框架为您可以在大数据应用程序中利用的分区方案提供本机支持。
Azure Data Lake Storage 有一项名为 Query Acceleration 的功能,可在预览版中使用,旨在优化性能的同时降低成本。查询加速允许您通过指定更多谓词(认为这些谓词类似于您将在 SQL 查询的 WHERE 子句中提供的条件)和列投影(认为这些列作为您将在 SQL 查询的 SELECT 语句中指定的列)在非结构化数据上。
除了通过过滤查询使用的特定数据来提高性能外,查询加速还通过优化传输的数据来降低分析管道的整体成本,从而降低整体存储交易成本,并节省您的计算资源成本 否则,您本来可以阅读整个数据集并过滤所需的数据子集。
本文 | https://jiagoushi.pro/hitchhikers-guide-data-lake | |
---|---|---|
讨论:知识星球【首席架构师圈】或者加微信小号【cea_csa_cto】或者加QQ群【792862318】 | ||
公众号 | 【jiagoushipro】【超级架构师】精彩图文详解架构方法论,架构实践,技术原理,技术趋势。我们在等你,赶快扫描关注吧。 | |
微信小号 | 【cea_csa_cto】50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化. | |
QQ群 | 【792862318】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。加QQ群,有珍贵的报告和干货资料分享。 | |
视频号 | 【超级架构师】1分钟快速了解架构相关的基本概念,模型,方法,经验。每天1分钟,架构心中熟。 | |
知识星球 | 向大咖提问,近距离接触,或者获得私密资料分享。 | |
喜马拉雅 | 路上或者车上了解最新黑科技资讯,架构心得。 | 【智能时刻,架构君和你聊黑科技】 |
知识星球 | 认识更多朋友,职场和技术闲聊。 | 知识星球【职场和技术】 |
微博 | 【智能时刻】 | 智能时刻 |
哔哩哔哩 | 【超级架构师】 | |
抖音 | 【cea_cio】超级架构师 | |
快手 | 【cea_cio_cto】超级架构师 | |
小红书 | 【cea_csa_cto】超级架构师 | |
谢谢大家关注,转发,点赞和点在看。