尝试从Azure Data Lake中删除文件时引发异常

时间:2017-07-27 09:14:57

标签: c# .net azure-data-factory azure-data-lake

小前言:我正在使用ADF将文件从Azure Data Lake Store归档(复制和删除)到Azure Blob Storage,我的管道有两个活动1. { {1}}(将文件从Copy Activity复制到ADLS)2。Blob(从Custom .NET Activity删除文件)。

现在ADLS已完美安排并且运行顺畅且没有错误 - ADF一切正常并能够将文件复制到Copy Activity。我的问题是Blob - 没有记录错误(我正在使用Custom .NET Activity)但文件没有被删除。所以,我开始按IActivityLogger logger部分进行调试,并面对以下问题 -

  

Microsoft.Azure.Management.DataLake.Store.Models.AdlsErrorException未被用户代码处理     的HResult = -2146233088     Message = Operation返回了无效的状态代码' Forbidden'     来源= Microsoft.Azure.Management.DataLake.Store     堆栈跟踪:          在Microsoft.Azure.Management.DataLake.Store.FileSystemOperations.d__28.MoveNext()       ---从抛出异常的先前位置开始的堆栈跟踪结束---          在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)          在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)          在Microsoft.Azure.Management.DataLake.Store.FileSystemOperationsExtensions.d__39.MoveNext()       ---从抛出异常的先前位置开始的堆栈跟踪结束---          在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)          在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)          在Microsoft.Azure.Management.DataLake.Store.FileSystemOperationsExtensions.Delete(IFileSystemOperations操作,String accountName,String filePath,Nullable' 1递归)          at DataLakeApplication.DotNetADLApplication.ADLApplication(List' 1 dataSetsToDelete)在C:\ Projects \ C#\ DataLakeApplication \ DataLakeApplication \ Program.cs:第117行     的InnerException:

ADL .NET SDK code操作的代码段:

delete

我在我的.NET代码中使用var fileDeleterResult = _adlsFileSystemClient.FileSystem.Delete(_adlsAccountName, strInputToDelete, null); AAD Service Principal进行通信,身份验证部分没问题,甚至我尝试了其他几个ADLS FileSystemOperations& ListFileStatus - 这些工作正常。只有我的GetFileStatus引发了上述错误,因此我想检查DeleteADLS的{​​{1}}权限,其中Service Principal - 角色和{{1} } Owner文件夹的权限。

任何领导都会非常感激,如果在这方面需要进一步的信息,请告诉我。

2 个答案:

答案 0 :(得分:0)

我注意到ADLS中有一些有趣的业务权限。

要仔细检查的一些事项:

如果你还没有完成(我确定你有),请再读一遍:

Access control in Azure Data Lake Store

密切关注权限的非级联性以及掩码的工作方式。

然而,正如你所说,用户拥有所有者权限,这应该意味着所有强大的功能。

尝试重新应用包括子项在内的权限(如果适用于您的安全模型),以查看是否可以解决问题。

我也想知道data lake diagnostics是否可能找到某些东西(我不确定,我自己也没看过)。

答案 1 :(得分:0)

最后能够解决它,我的错误基本上是我试图传递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");
   }
}