大数据存储 - Azure 数据湖全面解析
在当今数据爆炸的时代,选择合适的存储解决方案至关重要。当我们考虑存储方案时,数据量是一个关键因素。Azure 提供了多种存储服务,如 Azure 存储、Azure SQL 或 Azure Cosmos DB,还有各种可作为虚拟机镜像的数据库。然而,当数据量没有上限或者增长速度极快时,传统的存储方案可能就无法满足需求了。这时,数据湖这种特殊的存储方式就派上用场了,Azure 数据湖存储(Azure Data Lake Store)就是 Azure 针对此类问题推出的解决方案。
1. Azure 数据湖存储基础
Azure 数据湖存储被称为超大规模的数据存储库,原因在于它对存储文件没有任何限制。文件可以是任意格式、任意大小,并且可以存储不同结构的信息。这对于大数据分析来说是一个非常好的模型,因为你可以根据处理服务的需求来存储文件,有些服务可能更喜欢少量的大文件,而有些则更喜欢大量的小文件,你可以选择最适合自己的方式。
与其他存储解决方案(如关系型数据库、NoSQL 数据库或图数据库)相比,Azure 数据湖存储在存储非结构化数据时没有限制。以下是 Azure 数据湖存储和 Azure 存储的对比:
| 对比项 | Azure 数据湖存储(AZDS) | Azure 存储 |
| ---- | ---- | ---- |
| 限制 | 无文件大小和数量限制 | 最大账户容量 500 TB,有文件最大大小限制 |
| 冗余 | LRS | LRS/ZRS/GRS/RA - GRS |
| API | WebHDFS | Azure Blob 存储 API |
目前,Azure 数据湖存储仅支持 LRS 冗余模型。这意味着在发生灾难时,单个数据中心内存储的数据可能会丢失。为了避免这种情况,你需要自己实现数据复制策略,有同步复制和异步复制两种模型可供选择:
-
同步复制
:确保数据副本已保存,但处理重复数据时更困难,性能较低。
-
异步复制
:数据可能会丢失(因为在灾难发生前可能未将数据复制到副本),但性能更好(因为无需等待复制即可保存),且更容易处理。
此外,Azure 数据湖存储的文件系统基于 HDFS,这使得它能够与许多开源工具无缝集成,如 Apache Hive、Apache Storm、Apache Spark、MapReduce、Apache Pig 等。如果你想在 Azure 数据湖存储中存储数据,并使用 HDInsights 对文件进行分析和转换,你可以轻松连接到实例并开始工作。需要注意的是,目前 ADLS 支持 HDInsight 3.2、3.4、3.5 和 3.6 版本。
在访问 Azure 数据湖存储实例中的文件时,它采用 POSIX 风格的权限模型,主要有三种权限可应用于文件或文件夹:
-
读取(R)
:用于读取数据。
-
写入(W)
:用于写入数据。
-
执行(E)
:适用于文件夹,用于在文件夹上下文中授予读写权限(如创建子文件夹或列出文件)。
2. 创建 Azure 数据湖存储实例
要创建 Azure 数据湖存储实例,你需要在 Azure 门户中搜索“Azure Data Lake”,然后填写相应的表单。在填写表单时,需要考虑以下因素:
-
位置
:目前有四个可用位置,分别是美国中部、美国东部 2、北欧和西欧。要记住,在不同数据中心之间传输数据会产生额外费用,所以如果计划使用此服务,需要仔细规划架构。
-
定价套餐
:有两种定价模型,即按需付费和固定月承诺。固定定价通常更便宜,但在应用程序增长时灵活性较差,有时很难提前规划所需容量。因此,你需要尽可能了解使用该服务的应用程序的特点,选择最适合的定价套餐。
-
加密设置
:新账户默认启用数据加密。虽然可以禁用,但在大多数情况下,建议使用默认设置。加密有两种模型,你可以让服务管理加密密钥,也可以自己提供密钥(存储在 Azure 密钥保管库中)。由于定期轮换加密密钥是个好主意,但在发生故障时,即使是冗余副本的数据也可能无法访问。虽然可以从备份数据中恢复,但需要旧密钥来解密。因此,建议存储旧密钥的副本,以防意外中断。
点击“创建”按钮后,服务将被配置完成,你可以访问它查看概述。由于是新创建的实例,目前还看不到描述存储数据量的不同指标,当前成本为 0 美元,这是因为还没有文件上传到服务中。除了门户,你还可以使用 Microsoft Azure 存储资源管理器轻松访问 Azure 数据湖存储实例,这在处理多个文件和文件夹时非常方便。
3. 在 Azure 数据湖存储中存储数据
Azure 数据湖存储的核心功能是存储数据。你可以存储不同的文件,使用权限限制对它们的访问,并组织实例。重要的是要记住,你不限于使用大数据工具来存储或访问服务中的数据,只要能与 Azure 数据湖存储协议进行通信,就可以使用 C#、JavaScript 或任何其他编程语言来操作文件。
3.1 使用 Azure 门户导航
要在 Azure 门户中开始处理文件,你需要点击“数据资源管理器”按钮。点击后,你将看到一个新屏幕,其中有创建文件夹、上传文件或更改访问属性等多种选项。虽然这个工具不是管理数千个文件的最佳方式,但它可以让你了解存储的内容和方式。
然而,门户中的用户界面存在一些缺点,特别是当你有数百个文件时,界面容易卡顿。一些操作(如删除文件夹)在存储了大量数据时也容易失败。在这种情况下,最好使用 PowerShell 或自定义程序来执行操作。
以下是门户中可用选项的介绍:
-
过滤
:点击“过滤”按钮,你将看到一个屏幕,可用于指定你感兴趣的文件。这是快速限制文件夹中显示文件的最简单方法,但有一些限制,例如不能使用通配符过滤特定文件扩展名。要移除过滤,点击过滤屏幕上的“重置”按钮。
-
新建文件夹
:此选项可让你创建新文件夹。默认情况下,新文件夹仅你自己可以访问,要让其他人可见并允许他们读取,你需要明确为其分配特定的用户组。
-
上传
:使用“上传”功能,你可以直接将本地机器上的文件上传到云端。选择的文件将上传到当前浏览的文件夹中,还可以选择是否覆盖现有文件。如果你选择不覆盖并上传重复文件,将会看到错误提示。
-
访问
:Azure 数据湖存储的一个重要功能是能够完全声明对存储在其中的特定资源的访问权限。默认情况下,只有你可以访问文件或文件夹。要添加新用户或组,点击“+ 添加”按钮。需要注意的是,要授予某人访问文件夹中文件列表的权限,你需要分配“读取”和“执行”两个权限,创建子文件夹也是如此。你可以将一组权限传播到单个文件夹或其内部的所有文件夹,还可以将权限添加为默认权限条目或访问条目,也可以将两者结合使用以加快操作。
每个可见的文件和文件夹旁边都有一个图标,点击后会显示包含其他选项的菜单,这些选项与上述介绍的相同,只是应用于特定的文件夹和文件。
3.2 Microsoft Azure 存储资源管理器
大多数上述操作都可以使用 Microsoft Azure 存储资源管理器完成,但它不能为文件和文件夹分配权限。不过,它是浏览存储数据的更好选择,并且会自动显示分配给项目的一组所需权限。
3.3 使用 SDK
使用 SDK 是管理文件和 Azure 数据湖存储实例最灵活和最先进的方法。目前,官方支持三种不同的语言:.NET 平台、Java 和 Python。此外,还可以使用 REST API,基本上可以使用任何语言连接到服务。以下代码片段可用于连接到服务:
var client = AdlsClient.CreateClient("<account-name">, <credentials>);
连接到服务进行身份验证有两种选项:
- 最终用户身份验证
- 服务到服务身份验证
无论选择哪种选项,最终都会使用生成的 OAuth 2.0 令牌。以下是一个简单的服务提供程序示例,它利用上述方法,允许你轻松创建新文件夹并向文件追加数据:
public class DataLakeProvider : IDisposable
{
private readonly DataLakeStoreFileSystemManagementClient _client;
public DataLakeProvider(string clientId, string clientSecret)
{
var clientCredential = new ClientCredential(clientId, clientSecret);
var creds = ApplicationTokenProvider.LoginSilentAsync("domainId", clientCredential).Result;
_client = new DataLakeStoreFileSystemManagementClient(creds);
}
public Task CreateDirectory(string path)
{
return _client.FileSystem.MkdirsAsync("datalakeaccount", path);
}
public async Task AppendToFile(string destinationPath, string content)
{
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(content)))
{
await _client.FileSystem.ConcurrentAppendAsync("datalakeaccount", destinationPath, stream, appendMode: AppendModeType.Autocreate);
}
}
public void Dispose()
{
_client.Dispose();
}
}
使用 SDK 的重要优势在于能够抽象许多操作并实现自动化,例如递归删除文件或动态创建文件。这些操作在使用用户界面时是无法实现的,大多数严肃的项目开发人员更愿意编写代码而不是依赖手动文件管理。
大数据存储 - Azure 数据湖全面解析
4. 安全
Azure 数据湖存储提供了一种与 Azure 其他存储选项不同的安全模型,它是一个包含身份验证、授权、网络隔离、数据保护和审计的复杂解决方案。由于它被设计为数据驱动系统的基础,因此在确保谁(或什么)以及如何访问存储的信息方面,需要具备更强大的能力。
4.1 身份验证和授权
为了验证谁或什么可以访问存储的数据,Azure 数据湖存储使用 Azure Active Directory 来识别当前访问数据的实体。在授权方面,它同时利用基于角色的访问控制(RBAC)来保护资源本身,以及 POSIX ACL 来保护数据。
需要明确区分这两个术语:
-
身份验证
:确定谁或什么试图访问特定资源。
-
授权
:通过限制对资源的访问,仅允许被分配特定权限集的人访问。
如果有多个订阅托管不同的资源,并且这些资源想要访问 Azure 数据湖存储,必须为所有订阅分配相同的 Azure AD 实例。否则,部分资源将无法访问数据,因为只有在分配给 ADLS 的目录中定义的用户和服务才能进行身份验证并获得访问权限。
下面来看看 RBAC 和 POSIX 模型的区别:
-
RBAC
:RBAC 控制谁可以访问 Azure 资源,它是一组独立的角色和权限,与存储的数据无关。要查看此功能,点击“访问控制(IAM)”面板。在该面板中,可以看到分配给资源的不同应用程序(服务)和用户,以及他们的角色,如“所有者”(拥有包括确定谁可以访问资源在内的完全访问权限)和“贡献者”(拥有除确定谁可以访问资源之外的完全访问权限)。点击“角色”按钮,将看到 ADLS 所有可能角色的完整列表。使用“访问控制(IAM)”面板,可以轻松控制谁可以访问 Azure 数据湖存储实例以及如何访问,在需要更改权限或访问实例的用户/服务集时使用该面板。建议管理用户组而不是单个实体,这样可以在一个地方(Azure AD)添加/删除用户或实体,而无需浏览资源及其 RBAC。
-
POSIX ACL
:如前文所述,可以通过提供定义为“读取”、“写入”和“执行”的一组权限来管理对 ADLS 实例中存储的数据的访问。这些权限是 POSIX 访问控制列表(ACL)的一部分,而 POSIX ACL 是 Hadoop HDFS 的一个特性,也是此 Azure 服务引擎的一部分。如果你使用过 FTP 服务器,可能对文件系统权限有一定了解,它们通常用数字或包含字母 r、w、x 和字符 - 的字符串表示。例如,“-rwx------” 等于 0700,表示仅所有者具有读取、写入和执行权限;“-rwxrwxrwx” 等于 0777,表示所有人都具有读取、写入和执行权限;“-rw-rw-rw-” 等于 0666,表示所有人都具有读取和写入权限。
4.2 网络隔离
之前提到过“防火墙”面板,现在详细介绍一下。点击“防火墙”面板,将看到一个屏幕,可用于指定哪些 IP 地址可以访问你的实例。重要的是,它还能阻止其他 Azure 服务访问你的数据,这在有特定要求,不允许任何人读取 ADLS 中存储的任何信息时非常有用。
5. 最佳实践
Azure 数据湖存储在访问存储的数据以及进行读写操作方面有一些特点。由于该服务是为存储 PB 级数据而设计的,因此了解最佳实践非常重要,以避免出现需要重新组织所有文件或读写速度慢等问题。这也包括前面讨论过的安全功能,因为它是整个解决方案的重要组成部分。
5.1 性能
许多存储解决方案的一个重要特性是性能。通常,我们期望数据库无论负载高低、单个记录大小如何,都能正常工作。对于 ADLS,需要考虑以下因素:
-
并行性
:根据文档,在进行读写操作时,确保提供一定程度的并行性很重要。每个核心的理想线程数定义为 8 - 12 个。
-
文件大小
:不同的数据分析解决方案对不同文件大小的处理方式可能不同,但了解 ADLS 也有最佳工作文件大小很重要。由于它基于 HDFS 并使用 POSIX 权限模型,因此推荐使用较大的文件(数百兆字节)而不是较小的文件,以避免复制、连接和身份验证检查等问题。
-
I/O 限制
:虽然 Azure 数据湖存储没有启用一些关于吞吐量的硬限制,但当作业对容量要求很高时,仍然可能会遇到问题。要记住,即使在这个服务中,也可能会遇到一些软限制,联系 Azure 支持后可以解除这些限制。如果遇到 429 错误,可能是由于限流导致的。
-
批处理
:在许多高吞吐量的情况下,使用批处理来减少写入操作可能是有益的。在 ADLS 中,批处理的最佳大小定义为 4 MB。通过执行该大小的写入操作,可以降低所需的 IOPS 并提高服务的整体性能。
综上所述,Azure 数据湖存储是一个强大的大数据存储解决方案,具有超大规模存储、灵活的数据格式支持、丰富的工具集成以及完善的安全机制等优点。但在使用过程中,需要根据实际情况合理规划架构、选择定价套餐、设置加密和权限,同时遵循最佳实践来提高性能,以充分发挥其优势。
下面是一个简单的流程图,展示了使用 Azure 数据湖存储的基本流程:
graph LR
A[考虑存储需求] --> B{数据量是否无上限或增长极快}
B -- 是 --> C[选择 Azure 数据湖存储]
B -- 否 --> D[选择其他 Azure 存储服务]
C --> E[创建 Azure 数据湖存储实例]
E --> F[设置位置、定价套餐、加密等]
F --> G[存储数据]
G --> H[使用门户、资源管理器或 SDK 操作]
H --> I[应用安全策略]
I --> J[遵循最佳实践优化性能]
通过以上步骤和注意事项,你可以更好地使用 Azure 数据湖存储来满足你的大数据存储和分析需求。
超级会员免费看

被折叠的 条评论
为什么被折叠?



