Azure - 删除ADLS文件时出现ADlsError / WebHDFS错误

时间:2016-12-26 11:06:41

标签: c# azure azure-storage azure-api-apps

我正在使用C#进行ADLS身份验证,并希望执行一些文件操作,例如删除,重命名。使用以下代码进行身份验证和删除操作

var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
ClientCredential clientCredential = new ClientCredential(appId, secretKey);
var tokenResponse = context.AcquireTokenAsync("https://management.azure.com/", clientCredential).Result;
var accessToken = tokenResponse.AccessToken;
using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
    client.BaseAddress = new Uri("https://management.azure.com/");
}

ServiceClientCredentials creds = new TokenCredentials(tokenResponse.AccessToken);// tokenResponse.IdToken, tokenResponse.AccessTokenType);

DataLakeStoreFileSystemManagementClient _adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);

_adlsFileSystemClient.FileSystem.Delete(_adlsAccountName, FilenameWPath);

我收到了AdlsError,

  

未处理的类型异常   'Microsoft.Azure.Management.DataLake.Store.Models.AdlsErrorException'   发生在ConsoleApplication1.exe

是否应该启用WebHDFS?如何在ADLS上启用webHDFS。我检查了HDInight,启用了webHDFS。

请告诉我,如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

如果我们没有为我们的文件授予权限,那么我们将无权操作该文件。如果是这种情况,请参阅我的演示。以下是我的详细步骤和示例代码。它适用于我。

为Azure门户上的文件分配权限。

1.在我们的Data Lake Store帐户边栏中,单击“数据资源管理器”

enter image description here

2.单击要为其提供Azure AD应用程序访问权限的文件或文件夹,然后单击“访问” enter image description here

3.添加"分配权限" ,在“选择用户”或“组刀片”中,查找先前创建的Azure Active Directory应用程序。 enter image description here 4.选择适当的权限 enter image description here
5.检查文件是否已获得许可 enter image description here

演示代码:

 var applicationId = "Application Id";
 var secretKey = "Secret Key";
 var tenantId = "Tenant Id";
 var adlsAccountName = "ADLS Account Name";
 var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, applicationId, secretKey).Result;
 var adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
 var status = adlsFileSystemClient.FileSystem.GetFileStatus(adlsAccountName, "/mytempdir/myinputfile.txt");
 var deletResult = adlsFileSystemClient.FileSystem.Delete(adlsAccountName, "/mytempdir/myinputfile.txt");

删除档案

enter image description here

获取档案状态

enter image description here