[英]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.