Azure Data Lake(一) 在NET Core 控制台中操作 Data Lake Storage
一,引言
Azure Data Lake Storage Gen2 是一组专用于大数据分析的功能,基于 Azure Blob Storage 构建的。Data Lake Storage Gen2 包含了 Gen1 和 Blob Storage 的存储功能。但是在实际项目中如何使用,如何读取数据?如何操作数据?我们可以先从官方概念中先了解什么是 Azure Data Lake
以下引用于官方的术语--------------------
Data Lake Storage Gen2 使 Azure 存储成为在 Azure 上构建企业 Data Lake 的基础。 Data Lake Storage Gen2 从一开始就设计为存储数千万亿字节的信息,同时保持数百千兆位的吞吐量,允许你轻松管理大量数据。
Data Lake Storage Gen2 在 Blob 存储的基础上构建,并通过以下方式增强了性能、管理和安全性:
-
优化了性能,因为你不需要将复制或转换数据作为分析的先决条件。 与 Blob 存储上的平面命名空间相比,分层命名空间极大地提高了目录管理操作的性能,从而提高了整体作业性能。
-
管理更为容易,因为你可以通过目录和子目录来组织和操作文件。
-
安全性是可以强制实施的,因为可以在目录或单个文件上定义 POSIX 权限。
巴拉巴拉说了一大堆,我们该如何使用呢,接下来我们就通过实践(代码操作)的方式进一步了解Azure Data Lake
二,正文
1,创建 Azure Data Lake Gen2
Azure Portal 点击 “Create a resource”, 选择 “Storage account",并点击 “Create”
输入以下相关参数
Resource group:“Web_Test_AC_RG”
Storage account name:“cnbatedatalake”
Region:“East Asia”
Performance:“Standard”
Redundancy:“Locally-redundant storage(LRS)”
点击 “Next:Advanced >” 进行下一步操作
是否启用“分层命名空间”,可以在下图圈中的部分进行设置,并点击 “Review + create”
预校验完成后,点击 “Create” 进行创建
2,通过控制台代码操作 Azure Data Lake
2.1 创建新的NET Core 控制台程序,添加 Azure Data Lake Storage 的 Nuget 程序包
也可以使用程序包管理器控制台进行安装
Install-Package Azure.Storage.Files.DataLake -Version 12.8.0
访问 Azure Data Lake 得通过授权,需要安装 “Azure.Identity”
使用程序包管理器进行安装
Install-Package Azure.Identity -Version 1.5.0
代码部分 Program.cs
重点:接下来,需要将之前在Azure上注册的服务主体的 AZURE_CLIENT_ID(应用程序ID),AZURE_CLIENT_SECRET(客户端密码),AZURE_TENANT_ID(租户ID)配置到代码变量中去。
该代码的主要目的在 storage account 的 container(如果没有 "cdl" 容器,则创建) 下创建文件目录 父目录=》"my-directory",子目录=》"my-subdirectory"
1 class Program 2 { 3 static async Task Main(string[] args) 4 { 5 var accountName = "cnbatedatalake"; 6 var clientID = "xxxxxxxxx-xxx-xxxx-xxxx-xxxxxxxxx"; 7 var clientSecret = "JJxxxxxxxxxxxxxxbB6gIrxxxxxxxxNnI"; 8 var tenantID = "9bda686c-xxxx-xxxxx-xxxxx-xxxx-xxxx"; 9 10 var fileSystemName = "cdl"; 11 12 DataLakeServiceClient dataLakeServiceClient = null; 13 GetDataLakeServiceClient(ref dataLakeServiceClient, accountName, clientID, clientSecret, tenantID); 14 15 16 17 18 var filedirClient= await CreateDirectory(dataLakeServiceClient, fileSystemName); 19 20 Console.ReadLine(); 21 } 22 23 public static async Task<DataLakeDirectoryClient> CreateDirectory 24 (DataLakeServiceClient serviceClient, string fileSystemName) 25 { 26 27 DataLakeFileSystemClient fileSystemClient = 28 serviceClient.GetFileSystemClient(fileSystemName); 29 if (!await fileSystemClient.ExistsAsync()) 30 { 31 await serviceClient.CreateFileSystemAsync(fileSystemName); 32 } 33 34 DataLakeDirectoryClient directoryClient = 35 await fileSystemClient.CreateDirectoryAsync("my-directory"); 36 37 return await directoryClient.CreateSubDirectoryAsync("my-subdirectory"); 38 } 39 40 public static void GetDataLakeServiceClient(ref DataLakeServiceClient dataLakeServiceClient, 41 String accountName, String clientID, string clientSecret, string tenantID) 42 { 43 44 TokenCredential credential = new ClientSecretCredential(tenantID, clientID, clientSecret); 45 46 string dfsUri = "https://" + accountName + ".dfs.core.windows.net/"; 47 48 //dataLakeServiceClient = new DataLakeServiceClient(new Uri(dfsUri), credential: new DefaultAzureCredential()); 49 50 dataLakeServiceClient = new DataLakeServiceClient(new Uri(dfsUri), credential); 51 } 52 }
接下啦,我们直接运行代码,并在 cnbatedatalake 这个 Azure Data Lake 中查看是否创建容器以及文件目录
父目录 “my-directory”
子目录 “my-subdirectory”
OK,成功。这里我就不在演示文件/文件目录的添加,删除等操作了,稍后我会重新补充一下代码,供大家参考。
*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。🎉🎉🎉🎉🎉
三,结尾
ok,今天所演示的就是通过代码 service principal 的权限创建Azure Data Lake 的容器,然后在该容器中创建文件目录。在实际项目中,我们其实是需要将不同的数据写入到 Azure Data Lake 中。同时也要避免掉把一些重要的机密信息通过硬编码的方式保留在系统中。
作者:Allen
参考链接:Azure Data Lake Storage Gen2 简介
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。