今天经济的数据中心特性需要组织与其客户、供应商和合作伙伴之间进行广泛的数据交流。虽然效率和即时可访问性至关重要,但它们常常与安全性的考虑发生冲突。组织需要一种开放而安全的数据共享方法,以在数字经济中蓬勃发展。
通常情况下,数据共享需要在组织内部进行。组织拥有地理分散的位置和本地云解决方案。这些公司通常希望实施数据网格架构,其中所有权是分散的,数据管理是分布式和联合的。高效而安全的数据共享是有效地在整个组织中共享数据产品的关键推动因素。
企业中的不同业务组需要访问数据以做出关键的业务决策。数据团队希望集成他们的解决方案,以创建业务的全面企业视图。
过去,在不同平台、公司和云之间共享数据一直是一个复杂的挑战。由于担心安全风险、竞争以及实施数据共享解决方案的巨大成本,组织不愿意共享数据。
传统的数据共享技术在满足现代需求方面面临困难,例如与多个云环境兼容,支持开放格式,同时提供所需的性能。许多数据共享解决方案与特定供应商绑定,这对于在不兼容平台上运作的数据提供者和消费者造成了问题。
数据共享解决方案以三种格式发展起来:传统的和自制(定制构建)的解决方案、现代云对象存储和专有商业解决方案。每种方法都有其利弊。
组织已经构建了基于传统技术(如电子邮件、SFTP或自定义API)的自制系统来实现数据共享解决方案,如图9-1所示。
这些解决方案的优势包括:
这些解决方案的劣势包括:
商业数据共享解决方案被广泛选择,是企业寻求在不建设内部解决方案的情况下寻找替代方案的一种选择。这些解决方案在不愿意为开发专有解决方案分配大量时间和资源的同时,又希望获得比云对象存储提供的更大控制力的情况下提供了一种平衡,如图9-2所示。
这种解决方案的优势:
商业解决方案为用户提供了一种轻松的方式,使他们可以与同一平台上的其他用户共享数据。
这种解决方案的劣势:
商业解决方案通常缺乏与其他平台的互操作性,使得与使用竞争性解决方案的用户共享数据变得困难。这种限制降低了数据的可访问性,导致供应商锁定。此外,数据提供方和接收方之间的平台差异引入了数据共享的复杂性。
数据需要加载到特定的平台上,这涉及额外的步骤,如ETL和创建数据副本。
商业数据共享解决方案可能受到供应商强加的扩展限制。
上述挑战为与潜在客户共享数据增加了额外的成本,因为数据提供方需要在各种云平台上为不同的接收方复制数据。
云对象存储被认为是云环境中非常合适的解决方案,因为它具有弹性和无缝可扩展性,可以处理大量数据并轻松适应无限增长。领先的云提供商,如Amazon S3、Azure Data Lake Storage (ADLS)和Google Cloud Storage (GCS),提供了经济高效的对象存储服务,具有卓越的可扩展性和可靠性。 云对象存储的一个显著特点是能够生成带有签名的URL。这些URL为下载特定对象提供了有限时间的权限。通过共享预签名的URL,任何持有该URL的人都可以方便地访问指定的对象,促进了高效的数据共享。
这种解决方案的优势有:
这种解决方案的缺点有:
这种解决方案的不完整性和繁琐性阻碍了数据提供方和接收方轻松共享数据。
不同于专有解决方案,开源数据共享不涉及特定厂商技术,不引入不必要的限制和财务负担。开源 Delta Sharing 对任何需要大规模共享数据的人都是可用的。
Delta Sharing 是一个开源协议,旨在实现以下目标:
Delta Sharing 是一个开放的协议,定义了 REST API 端点,使得能够安全地访问云数据集的特定部分。它利用现代云存储系统(如Amazon S3、ADLS或GCS)的能力,以确保可靠地传输大型数据集。这个过程涉及到两个关键的角色:数据提供方和接收方,如图 9-3 所示。
作为数据提供方,Delta Sharing 允许您共享存储在云数据湖中的 Delta Lake 格式的现有表或其部分(例如,特定表的版本或分区)。数据提供方决定要共享的数据,并在其前端运行一个实现 Delta Sharing 协议并管理接收方访问权限的共享服务器。开源的 Delta Lake 包含一个参考共享服务器,Databricks 为其平台提供了一个,其他供应商预计很快也会跟进。
作为数据接收方,您只需使用支持该协议的众多 Delta Sharing 客户端之一。开源的 Delta Lake 已发布了 pandas、Apache Spark、Rust 和 Python 的开源连接器,并正在与合作伙伴合作开发更多的客户端。
实际的交换经过精心设计,通过利用云存储系统和 Delta Lake 的功能,确保了其效率。Delta Sharing 协议的工作方式如下(参见图 9-4):
Delta Sharing 的设计为提供方和消费方带来了许多好处:
delta-sharing 代码仓库可以在 GitHub 上找到。其中包含以下组件:
接下来,让我们使用 Python 连接器访问由 delto-io 提供的示例 Delta Sharing 服务器中的 Delta 表。
Python 连接器以 delta-sharing 作为 PyPi 库提供,因此我们只需将此库添加到我们的集群中,如图 9-5 所示。
Python 连接器根据配置文件访问共享表。您可以通过访问链接下载示例 Delta Sharing Server 的配置文件。该文件将下载为名为 open-datasets.share
的文件。这是一个包含服务器凭据的简单 JSON 文件(在此示例中,令牌已模糊处理):
{
"shareCredentialsVersion": 1,
"endpoint": "https://sharing.delta.io/delta-sharing/",
"bearerToken": "faaiexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
使用 dbfs cp
命令将 share
文件上传到 Databricks 文件系统中的 dbfs:/
位置:
C:\Users\bhael\Downloads>dbfs cp open-datasets.share dbfs:/mnt/.../delta-sharing/
C:\Users\bhael\Downloads>dbfs ls dbfs:/mnt/datalake/book/delta-sharing
open-datasets.share
C:\Users\bhael\Downloads>
在 "01 - Sharing Example" 笔记本中,我们可以引用该文件:
# Point to the profile file. It can be a file on the local
# file system or remote file system. In this case, we have
# uploaded the file to dbfs
profile_path = "/dbfs/mnt/datalake/book/delta-sharing/open-datasets.share"
接下来,我们可以创建一个 SharingClient
,将配置文件路径传递给它,并列出所有共享的 Delta 表:
# Create a SharingClient and list all shared tables
client = delta_sharing.SharingClient(profile_path)
client.list_all_tables()
这将生成以下输出:
Out[22]: [Table(name='COVID_19_NYT', share='delta_sharing',
schema='default'), Table(name='boston-housing', share='delta_sharing',
schema='default'), Table(name='flight-asa_2008', share='delta_sharing',
schema='default'), Table(name='lending_club', share='delta_sharing',
schema='default'), Table(name='nyctaxi_2019', share='delta_sharing',
schema='default'), Table(name='nyctaxi_2019_part', share='delta_sharing',
schema='default'), Table(name='owid-covid-data', share='delta_sharing',
schema='default')]
要创建指向共享表的URL,我们使用以下语法:
<profile file base name>#<share-name>.<schema-name>.<table-name>
我们现在可以构建URL并将共享的Delta表的内容读取为pandas DataFrame:
# Create a URL to access a shared table
# A table path is the profile path following with
# ('<share-name>.<schema_name>.<table_name>)
# Here, we are loading the table as a pandas DataFrame
table_url = profile_path + "#delta_sharing.default.boston-housing"
df = delta_sharing.load_as_pandas(table_url, limit=10)
df.head()
输出(仅显示相关部分):
+--+-------+----+-----+-----+-----+-----+
|ID|crim |zn |indus| chas| nox | rm |
+--+-------+----+-----+-----+-----+-----+
|1 |0.00632|18 | 2.31| 0 |0.538|6.575|
|2 |0.02731| 0 | 7.0 | 0 |0.469|6.421|
|4 |0.03237| 0 | 2.18| 0 |0.458|6.998|
|5 |0.06905| 0 | 2.18| 0 |0.458|7.147|
|7 |0.08829|12.5| 7.87| 0 |0.524|6.012|
+--+-------+----+-----+-----+-----+-----+
如果我们想将表加载为标准的 PySpark DataFrame,可以使用 load_as_spark()
方法:
# We can also access the shared table with Spark. Note that we have to use the
# dbfs:/ path prefix here
profile_path_spark = "dbfs:/mnt/datalake/book/delta-sharing/open-datasets.share"
table_url_spark = profile_path_spark + "#delta_sharing.default.boston-housing"
df_spark = delta_sharing.load_as_spark(table_url_spark)
display(df_spark.limit(5))
注意 URL 中的轻微更改,如前所讨论。这将产生与 pandas 示例相同的输出。
利用开源技术实现数据交换为内部和外部使用打开了许多优势。首先,它提供了显著的灵活性,允许团队定制数据交换流程以满足特定的业务用例和要求。来自活跃的开源社区的支持确保持续改进、修复错误,并获得大量知识,进一步增强了团队和业务用户保持在数据共享实践前沿的能力。
在使用Delta Sharing进行数据提供者和数据接收者时,以下是最重要的几个关键优势: 可扩展性对于处理不断增长的数据集和高需求的用例至关重要。 互操作性是另一个重要的优势。Delta Sharing作为一种开源技术,旨在与数据生态系统的其他组件协同工作,促进无缝集成。 此外,与专有解决方案相比,透明度和安全性得到了提高,因为Delta Sharing的源代码可以进行审查,这允许采取更强的安全措施,并能够响应并主动解决已识别的漏洞。 通过使用Delta Sharing,团队避免了对供应商的依赖,因为他们可以自由切换工具或供应商,而无需投资于适应新架构。开源社区中创新的快速步伐使团队能够拥抱尖端功能,并迅速适应数据管理和分析领域的新趋势。 利用Delta Sharing进行数据共享使数据生态系统更加敏捷、具有成本效益,并为在不断变化的环境和数据格局中实现组织成功提供了更好的数据驱动解决方案和洞察。
在已学到的基础组件基础上,第10章将深入探讨如何构建完整的数据湖仓。
阅读量:1984
点赞量:0
收藏量:0