尝试从 Azure 数据湖中删除文件时引发异常



小前言:我正在使用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部分进行调试,并面临以下问题-

Microsoft.Azure.Management.DataLake.Store.Models.AdlsErrorException 未由用户代码处理 HResult=-2146233088 消息 = 操作返回无效的状态代码"禁止" Source=Microsoft.Azure.Management.DataLake.Store 堆栈跟踪: at Microsoft.Azure.Management.DataLake.Store.FileSystemOperations.d__28.MoveNext(( --- 从引发异常的先前位置的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task( at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task( at Microsoft.Azure.Management.DataLake.Store.FileSystemOperationsExtensions.d__39.MoveNext(( --- 从引发异常的先前位置的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task( at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task( at Microsoft.Azure.Management.DataLake.Store.FileSystemOperationsExtensions.Delete(IFileSystemOperations operations, String accountName, String filePath, Nullable'1 recursive( at DataLakeApplication.DotNetADLApplication.ADLApplication(List'1 dataSetsToDelete( in C:\Projects\C#\DataLakeApplication\DataLakeApplication\Program.cs:line 117 内部异常:

delete操作的代码片段:

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

我在我的.NET代码中使用AAD Service PrincipalADLS进行通信,身份验证部分还可以,甚至我也尝试了其他几个FileSystemOperationsListFileStatusGetFileStatus- 这些工作正常。只有我的Delete抛出了上述错误,所以我想重新检查我的Service PrincipalADLS的权限,该权限被授予Owner- 角色和RWXADLS文件夹的权限。

任何线索将不胜感激,如果在这方面需要任何进一步的信息,请告诉我。

我注意到 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("rn", 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");
}
}

相关内容

  • 没有找到相关文章

最新更新