我正在向Azure Datalake写一个简单的文件来学习如何将其用于其他方法,但我遇到了问题,当我尝试编写时,我收到以下错误消息
21/5/2018 9:03:27 AM] Executed 'NWPimFeederFromAws' (Failed, Id=39adba4b-9c27-4078-b560-c25532e8432e)
[21/5/2018 9:03:27 AM] System.Private.CoreLib: Exception while executing function: NWPimFeederFromAws. Microsoft.Azure.Management.DataLake.Store: One or more errors occurred. (Operation returned an invalid status code 'Forbidden'). Microsoft.Azure.Management.DataLake.Store: Operation returned an invalid status code 'Forbidden'.
有问题的代码如下
static void WriteToAzureDataLake() {
// 1. Set Synchronization Context
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
// 2. Create credentials to authenticate requests as an Active Directory application
var clientCredential = new ClientCredential(clientId, clientSecret);
//var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, clientCredential).Result;
var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, clientCredential).Result;
// 2. Initialise Data Lake Store File System Client
adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
// 3. Upload a file to the Data Lake Store
var source = "c:\\nwsys\\source.txt";
var destination = "/PIMRAW/destination.txt";
adlsFileSystemClient.FileSystem.UploadFile(adlsAccountName, source, destination, 1, false, true);
// FINISHED
Console.WriteLine("6. Finished!");
}
我已将Azure AD中的应用程序添加到我尝试写入的特定文件夹的访问列表中,如下所示
我的代码中的clientID和clientSecret来自这个应用程序,所以我有点迷失为什么我被禁止。
我忘了别的什么吗?
在尝试创建客户端之前,loginAsync还没有完成吗?
答案 0 :(得分:0)
在尝试创建客户端之前,loginAsync还没有完成吗?
与loginAsync无关。 根据我的测试,如果我将权限分配给文件夹,它可以正常使用。
测试结果:
如果可能,您可以创建一个新的Datalake帐户或新文件夹并再次尝试。我建议您可以使用fiddler捕获有关异常的详细信息。
答案 1 :(得分:0)
您是否已授予您的应用程序/服务主体对您应用程序正在编写的特定文件夹的路径中的父文件夹的执行权限?这是遍历文件夹路径所必需的,请参阅此处以获取一些示例:https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-access-control#common-scenarios-related-to-permissions。
答案 2 :(得分:0)
不是答案,只是记录我遇到类似错误时发现的内容。
我在帐户级别(因此是文件系统)级别将 Azure数据工厂托管身份添加到了贡献者角色。
当尝试从ADF创建斑点时,出现了禁止的错误
因此我将其添加到 Storage Blob数据贡献者。该操作无法立即生效,但大约需要10分钟才能被识别。然后一切正常。