簡體   English   中英

嘗試從Azure Data Lake刪除文件時引發異常

[英]Exception raised while trying to delete file from Azure Data Lake

小前言:我正在使用ADF將文件從Azure Data Lake Store存檔(復制和刪除)到Azure Blob Storage ,我的管道有兩個活動1. Copy Activity (將文件從ADLS復制到Blob )2. Custom .NET Activity (刪除) ADLS文件)。

現在, ADF的計划已經完美並且可以流暢運行,沒有任何錯誤- Copy Activity很好,並且能夠查看復制到Blob文件。 我的問題與Custom .NET Activity -沒有記錄任何錯誤(我正在使用IActivityLogger logger ),但是沒有刪除文件。 因此,我開始通過ADL .NET SDK code部分進行調試,並遇到以下問題-

用戶代碼HResult = -2146233088未處理Microsoft.Azure.Management.DataLake.Store.Models.AdlsErrorException消息=操作返回了無效的狀態代碼“禁止”源= Microsoft.Azure.Management.DataLake.Store StackTrace:Microsoft.Azure .Management.DataLake.Store.FileSystemOperations.d__28.MoveNext()-從上一個引發異常的位置開始的堆棧跟蹤結束--在System.Runtime的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務任務)處。 Microsoft.Azure.Management.DataLake.Store.FileSystemOperationsExtensions.d__39.MoveNext()處的CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務任務)-從上一個引發異常的位置開始的堆棧結束跟蹤-在System.Runtime.CompilerServices System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務任務)的.TaskAwaiter.ThrowForNonSuccess(任務任務),Microsoft.Azure.Management.DataLake.Store.FileSystemOperationsExtensions.Delete (IFileSystemOperations操作,String accountName,String filePath,Nullable'1遞歸)位於C:\\ Projects \\ C#\\ DataLakeApplication \\ DataLakeApplication \\ Program.cs:line 117中的DataLakeApplication.DotNetADLApplication.ADLApplication(List'1 dataSetsToDelete):行117內部異常:

delete操作的代碼段:

var fileDeleterResult =
_adlsFileSystemClient.FileSystem.Delete(_adlsAccountName, strInputToDelete, null);

我在.NET代碼中使用AAD Service PrincipalADLS進行通信,身份驗證部分還可以,甚至我還嘗試了其他幾個FileSystemOperations ListFileStatusGetFileStatus這些工作正常。 只有我的Delete會引發上述錯誤,因此我想為我的Service Principal重新檢查對ADLS的權限,該權限已授予ADLS文件夾的Owner -角色和RWX權限。

任何線索將不勝感激,如果有任何進一步的信息需要告知我。

我注意到ADLS中有一些有趣的生意。

需要仔細檢查的幾件事:

如果您還沒有做過(我確定您已經做過),請另外閱讀:

Azure Data Lake Store中的訪問控制

密切注意權限的非層疊性質以及掩碼的工作方式。

但是,正如您所說的,用戶具有所有者權限,這意味着所有強大的功能。

嘗試重新應用包括子級在內的權限(如果適用於您的安全模型),以查看是否可以解決問題。

我也想知道數據湖診斷程序是否可以找到某些東西(我不確定,我自己還沒有看過)。

終於能夠解決它,我的錯誤基本上是我試圖傳遞Azure Data Lake文件夾路徑,而不是傳遞給我Forbidden錯誤消息的文件路徑。 我實現的用於刪除文件夾中文件的代碼-

foreach (string strInputToDelete in dataSetsToDelete)
{
   Console.WriteLine("Listing files and directories.");
   var itemList = _adlsFileSystemClient.FileSystem.ListFileStatus(_adlsAccountName, strInputToDelete).FileStatuses.FileStatus.ToList();
   var fileMenuItems = itemList.Select(a => String.Format("{0,15} {1}", a.Type, a.PathSuffix));
   Console.WriteLine(String.Join("\r\n", fileMenuItems));
   Console.WriteLine("Files and directories listed.");

   for (int i = 0; i < itemList.Count; i++)
   {
        Console.WriteLine("Deleting files...");
        var fileDeleteResult =_adlsFileSystemClient.FileSystem.Delete(_adlsAccountName, strInputToDelete + itemList[i].PathSuffix);
        Console.WriteLine("Deletion result: " + fileDeleteResult.OperationResult.ToString());
        Console.WriteLine("Files deleted");
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM