与数据工厂自定义的 Azure 数据湖连接 activity
Azure data lake connection with data factory custom activity
我对 Azure 数据工厂中的自定义 activity 有疑问。
我想连接到其中的 azure 数据湖。
我正在使用以下命名空间:
using Microsoft.Azure.Management.DataLake.Store;
using Microsoft.IdentityModel.Clients.ActiveDirectory
using Microsoft.Rest.Azure.Authentication;
这是我的代码:
public ConnectDataLakeStore(string applicationId, string applicationSecretKey, string tenantId)
{
var credentials = new ClientCredential(applicationId, applicationSecretKey);
var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, credentials).Result;
var fileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
}
我得到以下异常:
Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Microsoft.Azure.Management.DataLake.Store.Models.AdlsErrorException: Operation returned an invalid status code 'Forbidden'
at Microsoft.Azure.Management.DataLake.Store.FileSystemOperations.<ListFileStatusWithHttpMessagesAsync>d__12.MoveNext()
当我在本地环境中 运行 自定义 activity 时一切正常。部署到 Azure 后出现问题。我还给了广告应用程序所有可能的权限。
有什么提示吗?
我从您上面的评论中得知您已经解决了这个问题。但仍然认为值得为以后遇到类似问题的人添加更多细节。
首先使用您的服务主体和域详细信息创建凭据。
方法:
private static ServiceClientCredentials AuthenticateAzure(string domainName, string clientID, string clientSecret)
{
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
var clientCredential = new ClientCredential(clientID, clientSecret);
return ApplicationTokenProvider.LoginSilentAsync(domainName, clientCredential).Result;
}
也许可以从您的库配置或项目属性中获取值。
var creds = AuthenticateAzure(domainName, appId, appPass);
接下来根据需要创建数据湖帐户管理器或文件系统管理器的实例。
private static DataLakeStoreFileSystemManagementClient adlsFileSystemClient;
private static DataLakeStoreAccountManagementClient adlsAccountManagementClient;
adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
adlsAccountManagementClient = new DataLakeStoreAccountManagementClient(creds);
接下来创建类似下面的方法来将文件上传到数据湖存储。
上传器将比创建文件方法执行得更快。
private static void UploadFile(string srcFilePath, string destFilePath, string accName, bool force = true)
{
var parameters = new UploadParameters(srcFilePath, destFilePath, accName, isOverwrite: force);
var frontend = new DataLakeStoreFrontEndAdapter(accName, adlsFileSystemClient);
var uploader = new DataLakeStoreUploader(parameters, frontend);
uploader.Execute();
}
来源:
ADF 自定义活动
https://www.purplefrogsystems.com/paul/2016/11/creating-azure-data-factory-custom-activities/
希望对您有所帮助
我对 Azure 数据工厂中的自定义 activity 有疑问。 我想连接到其中的 azure 数据湖。 我正在使用以下命名空间:
using Microsoft.Azure.Management.DataLake.Store;
using Microsoft.IdentityModel.Clients.ActiveDirectory
using Microsoft.Rest.Azure.Authentication;
这是我的代码:
public ConnectDataLakeStore(string applicationId, string applicationSecretKey, string tenantId)
{
var credentials = new ClientCredential(applicationId, applicationSecretKey);
var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, credentials).Result;
var fileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
}
我得到以下异常:
Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Microsoft.Azure.Management.DataLake.Store.Models.AdlsErrorException: Operation returned an invalid status code 'Forbidden'
at Microsoft.Azure.Management.DataLake.Store.FileSystemOperations.<ListFileStatusWithHttpMessagesAsync>d__12.MoveNext()
当我在本地环境中 运行 自定义 activity 时一切正常。部署到 Azure 后出现问题。我还给了广告应用程序所有可能的权限。
有什么提示吗?
我从您上面的评论中得知您已经解决了这个问题。但仍然认为值得为以后遇到类似问题的人添加更多细节。
首先使用您的服务主体和域详细信息创建凭据。
方法:
private static ServiceClientCredentials AuthenticateAzure(string domainName, string clientID, string clientSecret)
{
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
var clientCredential = new ClientCredential(clientID, clientSecret);
return ApplicationTokenProvider.LoginSilentAsync(domainName, clientCredential).Result;
}
也许可以从您的库配置或项目属性中获取值。
var creds = AuthenticateAzure(domainName, appId, appPass);
接下来根据需要创建数据湖帐户管理器或文件系统管理器的实例。
private static DataLakeStoreFileSystemManagementClient adlsFileSystemClient;
private static DataLakeStoreAccountManagementClient adlsAccountManagementClient;
adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
adlsAccountManagementClient = new DataLakeStoreAccountManagementClient(creds);
接下来创建类似下面的方法来将文件上传到数据湖存储。
上传器将比创建文件方法执行得更快。
private static void UploadFile(string srcFilePath, string destFilePath, string accName, bool force = true)
{
var parameters = new UploadParameters(srcFilePath, destFilePath, accName, isOverwrite: force);
var frontend = new DataLakeStoreFrontEndAdapter(accName, adlsFileSystemClient);
var uploader = new DataLakeStoreUploader(parameters, frontend);
uploader.Execute();
}
来源:
ADF 自定义活动 https://www.purplefrogsystems.com/paul/2016/11/creating-azure-data-factory-custom-activities/
希望对您有所帮助