[英]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 Principal
與ADLS
進行通信,身份驗證部分還可以,甚至我還嘗試了其他幾個FileSystemOperations
ListFileStatus
和GetFileStatus
這些工作正常。 只有我的Delete
會引發上述錯誤,因此我想為我的Service Principal
重新檢查對ADLS
的權限,該權限已授予ADLS
文件夾的Owner
-角色和RWX
權限。
任何線索將不勝感激,如果有任何進一步的信息需要告知我。
我注意到ADLS中有一些有趣的生意。
需要仔細檢查的幾件事:
如果您還沒有做過(我確定您已經做過),請另外閱讀:
密切注意權限的非層疊性質以及掩碼的工作方式。
但是,正如您所說的,用戶具有所有者權限,這意味着所有強大的功能。
嘗試重新應用包括子級在內的權限(如果適用於您的安全模型),以查看是否可以解決問題。
我也想知道數據湖診斷程序是否可以找到某些東西(我不確定,我自己還沒有看過)。
終於能夠解決它,我的錯誤基本上是我試圖傳遞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.