2017-06-22 73 views
0

我想我datalake store中创建新的文件夹中创建文件夹,里面是在代码中没有错误但没有被反映在datalake storeAzure的数据湖店通过C#脚本

代码:

using System; 
using System.Collections.Generic; 

using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using System.Threading; 

using Microsoft.Azure.Management.DataLake.Store; 
using Microsoft.Azure.Management.DataLake.Store.Models; 
using Microsoft.Rest.Azure.Authentication; 
namespace test_dlstore 
{ 
    class Program 
    { 
     private static DataLakeStoreAccountManagementClient _adlsClient; 
     private static DataLakeStoreFileSystemManagementClient _adlsFileSystemClient; 

     private static string _adlsAccountName; 
     private static string _subId; 
     private static void Main(string[] args) 
     { 
      _adlsAccountName = "[email protected]"; 

      _subId = "2342342-97ce-a54b2-ba6e-234234234234234"; 

      string localFolderPath = @"C:\myfolder\"; // TODO: Make sure this exists and can be overwritten. 
      string localFilePath = Path.Combine(localFolderPath, "try.txt"); 
      string remoteFolderPath = "adl://mystore.azuredatalakestore.net/myfolder"; 
      string remoteFilePath = Path.Combine(remoteFolderPath, "try.txt"); 

      SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); 
      var tenant_id = "my-tenant-id"; 
      var nativeClientApp_clientId = "1950a258-227b-4e31-a9cf-717495945fc2"; 


      var activeDirectoryClientSettings = ActiveDirectoryClientSettings.UsePromptOnly(nativeClientApp_clientId, new Uri("urn:ietf:wg:oauth:2.0:oob")); 
      var creds = UserTokenProvider.LoginWithPromptAsync(tenant_id, activeDirectoryClientSettings).Result; 

      _adlsClient = new DataLakeStoreAccountManagementClient(creds) { SubscriptionId = _subId }; 
      _adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds); 
      Console.WriteLine(ListAdlStoreAccounts()); 
      Console.WriteLine(AppendToFile("adl://mystore.azuredatalakestore.net/myfolder/stage/testfile.txt", "abcdefghijklmnopqrstuvwxyz")); 
      CreateDirectory("adl://mystore.azuredatalakestore.net/myfolder/newdir"); 

      Console.ReadLine(); 

     } 
     // Append to file 
     public static string AppendToFile(string path, string content) 
     { 
      using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(content))) 
      { 
       Console.WriteLine(_adlsAccountName, path, content); 
       Console.WriteLine(path); 
       Console.WriteLine(content); 
       _adlsFileSystemClient.FileSystem.AppendAsync(_adlsAccountName, path, stream); 
       return "Tried"; 
      } 
     } 
     public static string CreateDirectory(string path) 
     { 
      _adlsFileSystemClient.FileSystem.MkdirsAsync(_adlsAccountName, path); 
      return "Tried Creating directory."; 
     } 
} 
} 

的上面的代码执行后,程序并没有错误退出。连接正在进行。

而且它显示datalake多家店,但他们却无法在数据存储湖做任何事情。

我是新来的天青,请帮助我。

+0

如果你只是尝试创建文件夹,请试试使用'_adlsFileSystemClient.FileSystem.Mkdirs(_adlsAccountName, “/ FOLDERNAME”)'; –

+0

@ TomSun-MSFT尝试过。但**在我的datalake商店没有更改**。 – Shubham

+0

请尝试使用我提到的代码而不用其他代码。请使用 相对路径不全路径。我在我身边测试了它的正常工作。 –

回答

0

我做了演示测试在我的身边,它的工作原理上正确的一面。以下是我的详细步骤:

准备:

注册的AD应用和分配角色的applcation,更多详情请 参考Azure official tutorials。之后,我们可以得到tenantIdAPPID秘密密钥从Azure的门户网站。

步骤:

1,创建一个C#控制台项目

2.Referece的Microsoft.Azure.Management.DataLake.Store SDK,详细信息请参考packages.config文件部分。

3.添加后续的代码

var applicationId = "appid"; 
var secretKey = "secretkey"; 
var tenantId = "tenantid"; 
var adlsAccountName = "adlsAccount Name"; 
var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, applicationId, secretKey).Result; 
var adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds,clientTimeoutInMinutes:60); 
adlsFileSystemClient.FileSystem.Mkdirs(adlsAccountName, "/tomtest/newfolder"); 

4.Run测试代码

从天青门户

enter image description here

5.检查。

enter image description here

Packages.config

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Microsoft.Azure.Management.DataLake.Store" version="2.2.0" targetFramework="net452" /> 
    <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.13.8" targetFramework="net452" /> 
    <package id="Microsoft.Rest.ClientRuntime" version="2.3.8" targetFramework="net452" /> 
    <package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.7" 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> 
+0

谢谢。这工作。自昨天以来,我一直被困在这个问题上。 – Shubham