Azure Data Lake(一) 在NET Core 控制檯中操作 Data Lake Storage

Grant_Allen發表於2021-12-29

一,引言

  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 簡介

版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。

相關文章