30Mb使用DataLakeStoreFileSystemManagementClient

时间:2017-01-04 12:41:51

标签: c# azure azure-data-lake

使用

时收到错误
_adlsFileSystemClient.FileSystem.Create(_adlsAccountName, destFilePath, stream, overwrite)

将文件上传到datalake。超过30Mb的文件出现错误。它适用于较小的文件。

错误是:

  

在   Microsoft.Azure.Management.DataLake.Store.FileSystemOperations.d__16.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   Microsoft.Azure.Management.DataLake.Store.FileSystemOperationsExtensions.d__23.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   Microsoft.Azure.Management.DataLake.Store.FileSystemOperationsExtensions.Create(IFileSystemOperations   operations,String accountName,String directFilePath,Stream   streamContents,Nullable 1 overwrite, Nullable 1 syncFlag)at   AzureDataFunctions.DataLakeController.CreateFileInDataLake(字符串   destFilePath,Stream stream,Boolean overwrite)in   F:\ GitHub的\ ZutoDW \ ADF_ProcessAllFiles \ ADF_ProcessAllFiles \ DataLakeController.cs:行   122

还有其他人遇到过这个吗?或观察到类似的行为?我通过将我的文件分成30Mb片段并上传它们来解决这个问题。

然而,从长远来看这是不切实际的,因为原始文件是380Mb,并且可能相当大一些。从长远来看,我不希望在我的数据池中有10-15个解剖文件。我想上传为单个文件。

我可以通过门户界面将完全相同的文件上传到datalake。

2 个答案:

答案 0 :(得分:5)

它回答了here

目前,大小限制为30000000字节。您可以通过创建初始文件然后追加来处理,两者的流大小都小于限制。

答案 1 :(得分:2)

请尝试使用DataLakeStoreUploader将文件或目录上传到DataLake,更多演示代码请参阅github sample。我测试了演示,它对我来说正常。我们可以从nuget获取Microsoft.Azure.Management.DataLake.StoreMicrosoft.Azure.Management.DataLake.StoreUploader SDK。以下是我的详细步骤:

  1. 创建C#控制台应用程序
  2. 添加以下代码

     var applicationId = "your application Id";
     var secretKey = "secret Key";
     var tenantId = "Your tenantId";
     var adlsAccountName = "adls account name";
     var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, applicationId, secretKey).Result;
     var adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
     var inputFilePath = @"c:\tom\ForDemoCode.zip";
     var targetStreamPath = "/mytempdir/ForDemoCode.zip";  //should be the '/foldername/' not the full path
     var parameters = new UploadParameters(inputFilePath, targetStreamPath, adlsAccountName, isOverwrite: true,maxSegmentLength: 268435456*2); // the default  maxSegmentLength is 256M, we can set by ourself.
     var frontend = new DataLakeStoreFrontEndAdapter(adlsAccountName, adlsFileSystemClient);
     var uploader = new DataLakeStoreUploader(parameters, frontend);
     uploader.Execute();
    
  3. 调试应用程序。

    enter image description here

  4. 从天蓝色门户网站检查

  5. enter image description here

    SDK信息请参阅packages.config文件

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="Microsoft.Azure.Management.DataLake.Store" version="1.0.2-preview" targetFramework="net452" />
      <package id="Microsoft.Azure.Management.DataLake.StoreUploader" version="1.0.0-preview" targetFramework="net452" />
      <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.13.8" targetFramework="net452" />
      <package id="Microsoft.Rest.ClientRuntime" version="2.3.2" targetFramework="net452" />
      <package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.2" targetFramework="net452" />
      <package id="Microsoft.Rest.ClientRuntime.Azure.Authentication" version="2.2.0-preview" targetFramework="net452" />
      <package id="Newtonsoft.Json" version="9.0.2-beta1" targetFramework="net452" />
    </packages>