简体   繁体   中英

Azure Data Lake store create folder via C# script

I am trying to create new folder inside my datalake store , there is no error in code however nothing is being reflected in datalake store .

Code:

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 = "mycreds@mysite.com"; 

            _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.";
        }
}
}

After execution of above code, program exits with no error. The connection is being made.

Also it is displaying datalake stores that are present but not able to do anything at all over the data lake stores.

I am new to azure please help me out.

I do a demo test on my side,it works correctly on side. The following is my detail steps:

Preparation:

Registry an AD application and assign role to applcation , more details please refer to Azure official tutorials . After that we can get tenantId , appId , secretKey from the Azure Portal.

Steps:

1.Create an C# console project

2.Referece the Microsoft.Azure.Management.DataLake.Store SDK, more details please refer to packages.config file section.

3.Add the follow code

 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 the test code

在此处输入图片说明

5.Check from the azure portal.

在此处输入图片说明

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>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM