1

我想做简单的事!!!

通过 Azure Functions 中的 c# 代码,将SourceContainer位于 dataLake gen 2 ( ) 中的容器 () 中的 blob 复制SourceDataLake到第二个 DatLake ( )。TargetDataLake

我的 Azure Function 和之间的连接SourceDataLake通过 Private Link 和 Private Endpoint 得到保护。

DataLakeDirectoryClient sourcedirectoryClient2 = sourceDataLakeFileSystemClient.GetDirectoryClient(myPath);
DataLakeFileClient sourcefileClient = sourcedirectoryClient2.GetFileClient(myBlobName);
Response<FileDownloadInfo> downloadResponse = await sourcefileClient.ReadAsync(); //I get the error in this line
Stream reader = downloadResponse.Value.Content;

DataLakeDirectoryClient targetdirectoryClient = taregetDataLakeFileSystemClient.GetDirectoryClient(TargetDirectory);
DataLakeFileClient targetfileClient = await targetdirectoryClient.CreateFileAsync(myBlobName);

await targetfileClient.UploadAsync(reader, true);

对于 DataLake 的身份验证,我使用此功能:

public static DataLakeFileSystemClient GetDataLakeFileSystemClient(string containerName, string dataLakeName, string dataLakeAccessKey)
{
    StorageSharedKeyCredential storageSharedKeyCredential = new StorageSharedKeyCredential(dataLakeName, dataLakeAccessKey);

    DataLakeClientOptions options = new DataLakeClientOptions(DataLakeClientOptions.ServiceVersion.V2019_07_07);
    DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClient(
        new Uri(string.Concat("https://", dataLakeName, ".dfs.core.windows.net")),
        storageSharedKeyCredential,
        options);

    DataLakeFileSystemClient dataLakeFileSystemClient = dataLakeServiceClient.GetFileSystemClient(containerName);
    return dataLakeFileSystemClient;
}

这段代码对我不起作用。如果我从中删除 Priavet Link Private Endpoint,SourceDataLake它将起作用。不知何故 Private Link 和 Private Endpoint 不适用于这行代码:

Response<FileDownloadInfo> downloadResponse = await sourcefileClient.ReadAsync();

你有什么想法我该如何解决这个问题?还是从 DataLake gen2 复制 blob 的更好方法?

4

1 回答 1

1

抱歉,我无法帮助解决当前问题,但是当您询问其他选项时,我认为您可以探索 Azure 数据工厂。https://docs.microsoft.com/en-us/azure/data-factory/connector-azure-data-lake-storage

于 2021-04-29T05:17:21.743 回答