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

Azure - ADlsError / WebHDFS error while deleting ADLS file

我正在使用 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,

An unhandled exception of type 'Microsoft.Azure.Management.DataLake.Store.Models.AdlsErrorException' occurred in ConsoleApplication1.exe

这意味着应该启用 WebHDFS?如何在 ADLS 上启用 webHDFS。我检查了 HDInight,webHDFS 已启用。

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

如果我们不为我们的文件分配权限那么我们将没有操作该文件的权限。如果是这种情况,请参考我的演示。以下是我的详细步骤和示例代码。它对我来说工作正常。

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

1.In 我们的 Data Lake Store 帐户边栏选项卡,单击 Data Explorer

2.click 您要为其提供对 Azure AD 应用程序的访问权限的文件或文件夹,然后单击访问

3.Add "assign permission" ,在 Select 用户或组边栏选项卡中,查找您之前创建的 Azure Active Directory 应用程序。 4.select适当的权限
5.Check文件已获得权限

演示代码:

 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");

删除文件

获取文件状态