Repository: reef
Updated Branches:
  refs/heads/master baa5be82b -> b759764c7


[REEF-1976] Implement Azure Data Lake Storage FileSystem

   * Implement Azure Data Lake Storage FileSystem
   * Add unit tests checking exceptions for azure data lake filesystem methods 
(#9)
   * Add unit tests checking exceptions for azure data lake filesystem methods
   * upgrade Newtonsoft.Json to 10.0.0.3
   * add doc link for AD app creation

JIRA: [REEF-1976](https://issues.apache.org/jira/browse/REEF-1976)

Closes #1427


Project: http://git-wip-us.apache.org/repos/asf/reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/reef/commit/b759764c
Tree: http://git-wip-us.apache.org/repos/asf/reef/tree/b759764c
Diff: http://git-wip-us.apache.org/repos/asf/reef/diff/b759764c

Branch: refs/heads/master
Commit: b759764c7b67afd6cd37044029901ec8a9adba72
Parents: baa5be8
Author: dwaijam <dwai...@gmail.com>
Authored: Thu Jan 25 16:46:08 2018 -0800
Committer: Sergiy Matusevych <mo...@apache.org>
Committed: Wed Feb 21 13:01:53 2018 -0800

----------------------------------------------------------------------
 .../Org.Apache.REEF.IO.Tests.csproj             |  35 ++-
 .../TestAzureBlockBlobFileSystemE2E.cs          |  10 +-
 .../TestAzureDataLakeFileSystem.cs              | 234 +++++++++++++++++
 .../TestAzureDataLakeFileSystemE2E.cs           | 251 +++++++++++++++++++
 .../cs/Org.Apache.REEF.IO.Tests/packages.config |   8 +-
 .../AzureDataLake/AzureDataLakeFileSystem.cs    | 232 +++++++++++++++++
 .../AzureDataLakeFileSystemConfiguration.cs     |  71 ++++++
 ...reDataLakeFileSystemConfigurationProvider.cs |  61 +++++
 .../AzureDataLake/AzureDataLakeStoreClient.cs   |  44 ++++
 .../AzureDataLake/IAdlsCredentials.cs           |  28 +++
 .../AzureDataLake/IDataLakeStoreClient.cs       |  36 +++
 .../AzureDataLake/Parameters/ClientId.cs        |  29 +++
 .../Parameters/DataLakeStorageAccountName.cs    |  29 +++
 .../AzureDataLake/Parameters/SecretKey.cs       |  29 +++
 .../AzureDataLake/Parameters/Tenant.cs          |  29 +++
 .../AzureDataLake/Parameters/TokenAudience.cs   |  29 +++
 .../AzureDataLake/SecretKeyAdlsCredentials.cs   |  45 ++++
 .../Hadoop/Parameters/CommandTimeOut.cs         |   2 +-
 .../Org.Apache.REEF.IO.csproj                   |  43 +++-
 lang/cs/Org.Apache.REEF.IO/packages.config      |   7 +
 20 files changed, 1240 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO.Tests/Org.Apache.REEF.IO.Tests.csproj
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IO.Tests/Org.Apache.REEF.IO.Tests.csproj 
b/lang/cs/Org.Apache.REEF.IO.Tests/Org.Apache.REEF.IO.Tests.csproj
index 5a7e323..5d688cc 100644
--- a/lang/cs/Org.Apache.REEF.IO.Tests/Org.Apache.REEF.IO.Tests.csproj
+++ b/lang/cs/Org.Apache.REEF.IO.Tests/Org.Apache.REEF.IO.Tests.csproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -34,8 +34,34 @@ under the License.
     <BuildPackage>false</BuildPackage>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Microsoft.Azure.DataLake.Store, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.Azure.DataLake.Store.1.0.4\lib\net452\Microsoft.Azure.DataLake.Store.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory, 
Version=2.28.3.860, Culture=neutral, PublicKeyToken=31bf3856ad364e35, 
processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.IdentityModel.Clients.ActiveDirectory.2.28.3\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll</HintPath>
+    </Reference>
+    <Reference 
Include="Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms, 
Version=2.28.3.860, Culture=neutral, PublicKeyToken=31bf3856ad364e35, 
processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.IdentityModel.Clients.ActiveDirectory.2.28.3\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Rest.ClientRuntime, Version=2.0.0.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.Rest.ClientRuntime.2.3.10\lib\net452\Microsoft.Rest.ClientRuntime.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="Microsoft.Rest.ClientRuntime.Azure.Authentication, 
Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, 
processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.Rest.ClientRuntime.Azure.Authentication.2.3.1\lib\net452\Microsoft.Rest.ClientRuntime.Azure.Authentication.dll</HintPath>
+    </Reference>
+    <Reference Include="Newtonsoft.Json">
+      
<HintPath>$(PackagesDir)\Newtonsoft.Json.$(NewtonsoftJsonVersion)\lib\net45\Newtonsoft.Json.dll</HintPath>
+    </Reference>
+    <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
+      <HintPath>$(PackagesDir)\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Net.Http" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
@@ -58,7 +84,9 @@ under the License.
     <Compile Include="FileSystemTestUtilities.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="TestAzureBlockBlobFileSystem.cs" />
+    <Compile Include="TestAzureDataLakeFileSystemE2E.cs" />
     <Compile Include="TestAzureBlockBlobFileSystemE2E.cs" />
+    <Compile Include="TestAzureDataLakeFileSystem.cs" />
     <Compile Include="TestFilePartitionInputDataSet.cs" />
     <Compile Include="TestHadoopFileSystem.cs" />
     <Compile Include="TestLocalFileSystem.cs" />
@@ -91,7 +119,10 @@ under the License.
     <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="packages.config" />
+    <None Include="$(SolutionDir)\App.config" />
+    <None Include="packages.config">
+      <SubType>Designer</SubType>
+    </None>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Import Project="$(SolutionDir)\.nuget\NuGet.targets" 
Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureBlockBlobFileSystemE2E.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureBlockBlobFileSystemE2E.cs 
b/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureBlockBlobFileSystemE2E.cs
index 7b749e4..f5665b6 100644
--- a/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureBlockBlobFileSystemE2E.cs
+++ b/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureBlockBlobFileSystemE2E.cs
@@ -168,8 +168,9 @@ namespace Org.Apache.REEF.IO.Tests
         {
             var helloFilePath = PathToFile(HelloFile);
             var blob = _container.GetBlockBlobReference(HelloFile);
-            var tempFilePath = GetTempFilePath();
+            var tempFilePath = Path.GetTempFileName();
             const string Text = "hello";
+            
             try
             {
                 UploadFromString(blob, Text);
@@ -189,7 +190,7 @@ namespace Org.Apache.REEF.IO.Tests
             var helloFilePath = PathToFile(HelloFile);
             ICloudBlob blob = _container.GetBlockBlobReference(HelloFile);
             Assert.False(CheckBlobExists(blob));
-            var tempFilePath = GetTempFilePath();
+            var tempFilePath = Path.GetTempFileName();
             const string Text = "hello";
             try
             {
@@ -284,11 +285,6 @@ namespace Org.Apache.REEF.IO.Tests
             Assert.True(CheckContainerExists(_container));
         }
 
-        private static string GetTempFilePath()
-        {
-            return Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
-        }
-
         private static void UploadFromString(ICloudBlob blob, string str)
         {
             var byteArray = Encoding.UTF8.GetBytes(str);

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureDataLakeFileSystem.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureDataLakeFileSystem.cs 
b/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureDataLakeFileSystem.cs
new file mode 100644
index 0000000..821e6ae
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureDataLakeFileSystem.cs
@@ -0,0 +1,234 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using System.IO;
+using System.Linq;
+using Microsoft.Azure.DataLake.Store;
+using NSubstitute;
+using Org.Apache.REEF.IO.FileSystem.AzureDataLake;
+using Org.Apache.REEF.Tang.Implementations.Tang;
+using Xunit;
+
+namespace Org.Apache.REEF.IO.Tests
+{
+    public sealed class TestAzureDataLakeFileSystem
+    {
+        private static readonly Uri FakeBaseUri = new 
Uri("http://fakeadls.com";);
+        private static readonly Uri FakeDirUri = new Uri(FakeBaseUri, "dir");
+        private static readonly Uri FakeFileUri = new 
Uri($"{FakeDirUri}/fakefile");
+        private readonly TestContext _context = new TestContext();
+        private readonly AzureDataLakeFileSystem _fs;
+
+        public TestAzureDataLakeFileSystem()
+        {
+            _fs = _context.GetAdlsFileSystem();
+        }
+
+        [Fact]
+        public void TestOpen()
+        {
+            _context.MockAdlsClient.CreateFile(FakeFileUri.AbsolutePath, 
IfExists.Overwrite);
+            var stream = _fs.Open(FakeBaseUri);
+            Assert.IsAssignableFrom<AdlsInputStream>(stream);
+        }
+
+        [Fact]
+        public void TestOpenException()
+        {
+            // Open a file that doesn't exist.
+            Exception ex = Assert.Throws<AdlsException>(() => 
_fs.Open(FakeFileUri));
+            Assert.IsAssignableFrom<IOException>(ex);
+        }
+
+        [Fact]
+        public void TestCreate()
+        {
+            _fs.Create(FakeFileUri);
+            
Assert.True(_context.MockAdlsClient.CheckExists(FakeFileUri.AbsolutePath));
+            var directoryEntry = 
_context.MockAdlsClient.GetDirectoryEntry(FakeFileUri.AbsolutePath);
+            Assert.Equal(DirectoryEntryType.FILE, directoryEntry.Type);
+        }
+
+        [Fact]
+        public void TestCreateFileUnderDirectory()
+        {
+            // Checks when file is created, directory in path was properly 
created too
+            _fs.Create(FakeFileUri);
+            
Assert.True(_context.MockAdlsClient.CheckExists(FakeDirUri.AbsolutePath));
+            var directoryEntry = 
_context.MockAdlsClient.GetDirectoryEntry(FakeDirUri.AbsolutePath);
+            Assert.Equal(DirectoryEntryType.DIRECTORY, directoryEntry.Type);
+        }
+
+        [Fact]
+        public void TestDelete()
+        {
+            _context.MockAdlsClient.CreateFile(FakeFileUri.AbsolutePath, 
IfExists.Overwrite);
+            _fs.Delete(FakeFileUri);
+            
Assert.False(_context.MockAdlsClient.CheckExists(FakeFileUri.AbsolutePath));
+        }
+        
+        [Fact]
+        public void TestDeleteException()
+        {
+            // Delete a file that doesn't exist.
+            Assert.Throws<IOException>(() => _fs.Delete(FakeFileUri));
+        }
+
+        [Fact]
+        public void TestFileDoesNotExists()
+        {
+            Assert.False(_context.GetAdlsFileSystem().Exists(FakeFileUri));
+        }
+
+        [Fact]
+        public void TestExists()
+        {
+            _context.MockAdlsClient.CreateFile(FakeFileUri.AbsolutePath, 
IfExists.Overwrite);
+            Assert.True(_fs.Exists(FakeFileUri));
+        }
+
+        [Fact]
+        public void TestCopy()
+        {
+            // Setup
+            Uri src = new Uri($"{FakeDirUri}/copyfile");
+            _context.MockAdlsClient.CreateFile(src.AbsolutePath, 
IfExists.Fail);
+            Assert.True(_context.MockAdlsClient.CheckExists(src.AbsolutePath));
+            
Assert.False(_context.MockAdlsClient.CheckExists(FakeFileUri.AbsolutePath));
+
+            _fs.Copy(src, FakeFileUri);
+            
Assert.True(_context.MockAdlsClient.CheckExists(FakeFileUri.AbsolutePath));
+        }
+
+        [Fact]
+        public void TestCopyException()
+        {
+            // Source file does not exist
+            Uri src = new Uri($"{FakeDirUri}/copyfile");
+            Assert.Throws<IOException>(() => _fs.Copy(src, FakeFileUri));
+        }
+
+        [Fact(Skip = "This test is failing during appveyor build saying 
'Currently not supported for folder' which might be because of a bug in 
MockAdlsClient.")]
+        public void TestCopyFromLocal()
+        {
+            
Assert.False(_context.MockAdlsClient.CheckExists(FakeFileUri.AbsolutePath));
+            _fs.CopyFromLocal("fakefile", FakeFileUri);
+            
Assert.True(_context.MockAdlsClient.CheckExists(FakeFileUri.AbsolutePath));
+        }
+
+        [Fact]
+        public void TestCopyToLocal()
+        {
+            _context.MockAdlsClient.CreateFile(FakeFileUri.AbsolutePath, 
IfExists.Overwrite);
+            _fs.CopyToLocal(FakeFileUri, 
Path.GetFileName(FakeFileUri.LocalPath));
+            Assert.True(File.Exists(Path.GetFileName(FakeFileUri.LocalPath)));
+        }
+
+        [Fact]
+        public void TestCopyToLocalException()
+        {
+            // Source file does not exist
+            Assert.Throws<IOException>(() => _fs.CopyToLocal(FakeFileUri, 
"fileName"));
+        }
+
+        [Fact]
+        public void TestCreateDirectory()
+        {
+            _fs.CreateDirectory(FakeDirUri);
+            
Assert.True(_context.MockAdlsClient.CheckExists(FakeDirUri.AbsolutePath));
+            
+            // check if it is a directory and not a file
+            var directoryEntry = 
_context.MockAdlsClient.GetDirectoryEntry(FakeDirUri.AbsolutePath);
+            Assert.Equal(DirectoryEntryType.DIRECTORY, directoryEntry.Type); 
+        }
+
+        [Fact]
+        public void TestDeleteDirectory()
+        {
+            _context.MockAdlsClient.CreateDirectory(FakeDirUri.AbsolutePath);
+            
Assert.True(_context.MockAdlsClient.CheckExists(FakeDirUri.AbsolutePath), "Test 
setup failed: did not successfully create directory to delete.");
+            _fs.Delete(FakeDirUri);
+            
Assert.False(_context.MockAdlsClient.CheckExists(FakeDirUri.AbsolutePath), 
"Test to delete adls directory failed.");
+        }
+
+        [Fact]
+        public void TestDeleteDirectoryException()
+        {
+            // Delete a directory that doesn't exist.
+            Assert.Throws<IOException>(() => _fs.DeleteDirectory(FakeDirUri));
+        }
+
+        [Fact]
+        public void TestGetChildren()
+        {
+            _context.MockAdlsClient.CreateDirectory(FakeDirUri.AbsolutePath);
+            var children = _fs.GetChildren(FakeDirUri);
+            int count = children.Count();
+            Assert.Equal(0, count);
+
+            _context.MockAdlsClient.CreateFile(FakeFileUri.AbsolutePath, 
IfExists.Overwrite);
+            children = _fs.GetChildren(FakeDirUri);
+            count = children.Count();
+            Assert.Equal(1, count);
+        }
+
+        [Fact]
+        public void TestGetChildrenException()
+        {
+            // Search a directory that doesn't exist.
+            Assert.Throws<IOException>(() => 
_fs.GetChildren(FakeFileUri).ToList());
+        }
+
+        [Fact]
+        public void TestCreateUriForPath()
+        {
+            string dirStructure = FakeFileUri.AbsolutePath;
+            Uri createdUri = _fs.CreateUriForPath(dirStructure);
+            Assert.Equal(createdUri, new 
Uri($"adl://{_context.AdlAccountName}{dirStructure}"));
+        }
+
+        [Fact]
+        public void TestGetFileStatusThrowsException()
+        {
+            Assert.Throws<ArgumentNullException>(() => 
_fs.GetFileStatus(null));
+        }
+
+        private sealed class TestContext
+        {
+            public readonly string AdlAccountName = "adlAccount";
+            public readonly AdlsClient MockAdlsClient = 
Microsoft.Azure.DataLake.Store.MockAdlsFileSystem.MockAdlsClient.GetMockClient();
+
+            public AzureDataLakeFileSystem GetAdlsFileSystem()
+            {
+                var conf = 
AzureDataLakeFileSystemConfiguration.ConfigurationModule
+                     
.Set(AzureDataLakeFileSystemConfiguration.DataLakeStorageAccountName, 
"adlsAccountName")
+                    .Set(AzureDataLakeFileSystemConfiguration.Tenant, "tenant")
+                    .Set(AzureDataLakeFileSystemConfiguration.ClientId, 
"clientId")
+                    .Set(AzureDataLakeFileSystemConfiguration.SecretKey, 
"secretKey")
+                    .Build();
+                var injector = TangFactory.GetTang().NewInjector(conf);
+                var testDataLakeStoreClient = 
Substitute.For<IDataLakeStoreClient>();
+                injector.BindVolatileInstance(testDataLakeStoreClient);
+                
testDataLakeStoreClient.GetAdlsClient().ReturnsForAnyArgs(MockAdlsClient);
+                testDataLakeStoreClient.AccountFQDN.Returns(AdlAccountName);
+                var fs = injector.GetInstance<AzureDataLakeFileSystem>();
+                return fs;
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureDataLakeFileSystemE2E.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureDataLakeFileSystemE2E.cs 
b/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureDataLakeFileSystemE2E.cs
new file mode 100644
index 0000000..a0aaad0
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IO.Tests/TestAzureDataLakeFileSystemE2E.cs
@@ -0,0 +1,251 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using Microsoft.Rest;
+using Microsoft.Rest.Azure.Authentication;
+using Org.Apache.REEF.IO.FileSystem;
+using Org.Apache.REEF.Tang.Implementations.Tang;
+using Xunit;
+using System.Threading;
+using Org.Apache.REEF.IO.FileSystem.AzureDataLake;
+using Microsoft.Azure.DataLake.Store;
+using Org.Apache.REEF.Tang.Interface;
+using System.IO;
+using System.Linq;
+
+namespace Org.Apache.REEF.IO.Tests
+{
+    /// <summary>
+    /// E2E tests for AzureDataLakeFileSystem.
+    /// These tests require the person running the test to fill in credentials.
+    /// </summary>
+    public sealed class TestAzureDataLakeFileSystemE2E : IDisposable
+    {
+        private const string SkipMessage = "Fill in credentials before running 
test"; // Use null to run tests
+        private const string ContentsText = "hello";
+        private readonly IFileSystem _fileSystem;
+        private readonly AdlsClient _adlsClient;
+        private readonly string _defaultFolderName;
+
+        public TestAzureDataLakeFileSystemE2E()
+        {
+            // Service principal / application authentication with client 
secret / key
+            // Use the application ID of an existing AAD "Web App" application 
as the ClientId and
+            // use its authentication key as the SecretKey
+            // 
https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal#get-application-id-and-authentication-key
+            // Fill in before running test!
+            const string AdlsAccountName = "#####.azuredatalakestore.net";
+            const string Tenant = "microsoft.onmicrosoft.com";
+            const string TokenAudience = @"https://datalake.azure.net/";;
+            const string ClientId = "########-####-####-####-############"; // 
e.g. "c2897d56-5eef-4030-8b7a-46b5c0acd05c"
+            const string SecretKey = "##########"; // e.g. "SecretKey1234!"
+
+            _defaultFolderName = "reef-test-folder-" + Guid.NewGuid();
+
+            IConfiguration conf = 
AzureDataLakeFileSystemConfiguration.ConfigurationModule
+                
.Set(AzureDataLakeFileSystemConfiguration.DataLakeStorageAccountName, 
AdlsAccountName)
+                .Set(AzureDataLakeFileSystemConfiguration.Tenant, Tenant)
+                .Set(AzureDataLakeFileSystemConfiguration.ClientId, ClientId)
+                .Set(AzureDataLakeFileSystemConfiguration.SecretKey, SecretKey)
+                .Build();
+
+            _fileSystem = 
TangFactory.GetTang().NewInjector(conf).GetInstance<AzureDataLakeFileSystem>();
+
+            ServiceClientCredentials adlCreds = GetCredsSpiSecretKey(Tenant, 
new Uri(TokenAudience), ClientId, SecretKey);
+            _adlsClient = AdlsClient.CreateClient(AdlsAccountName, adlCreds);
+        }
+
+        public void Dispose()
+        {
+            _adlsClient?.DeleteRecursive($"/{_defaultFolderName}");
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestOpenE2E()
+        {
+            string fileName = UploadFromString(ContentsText);
+            using (var reader = new 
StreamReader(_fileSystem.Open(PathToFile(fileName))))
+            {
+                string streamText = reader.ReadToEnd();
+                Assert.Equal(ContentsText, streamText);
+            }
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestCreateE2E()
+        {
+            string fileName = $"/{_defaultFolderName}/TestCreateE2E.txt";
+            var stream = _fileSystem.Create(PathToFile(fileName));
+            Assert.True(_adlsClient.CheckExists(fileName));
+            Assert.IsType<AdlsOutputStream>(stream);
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestDeleteE2E()
+        {
+            string fileName = UploadFromString(ContentsText);
+            Assert.True(_adlsClient.CheckExists(fileName));
+            _fileSystem.Delete(PathToFile(fileName));
+            Assert.False(_adlsClient.CheckExists(fileName));
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestDeleteExceptionE2E()
+        {
+            Assert.Throws<IOException>(() => 
_fileSystem.Delete(PathToFile("fileName")));
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestExistsE2E()
+        {
+            string fileName = UploadFromString(ContentsText);
+            Assert.True(_fileSystem.Exists(PathToFile(fileName)));
+            _adlsClient.Delete(fileName);
+            Assert.False(_fileSystem.Exists(PathToFile(fileName)));
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestCopyE2E()
+        {
+            var sourceTempFilePath = Path.GetTempFileName();
+            var destTempFilePath = Path.GetTempFileName();
+            try
+            {
+                string fileName = UploadFromString("CopyThis", 1);
+                var sourceUri = PathToFile(fileName);
+                string copyToFile = $"/{_defaultFolderName}/testFile2.txt";
+                var destUri = PathToFile(copyToFile);
+                _fileSystem.Copy(sourceUri, destUri);
+                _adlsClient.BulkDownload(sourceUri.AbsolutePath, 
sourceTempFilePath);
+                _adlsClient.BulkDownload(destUri.AbsolutePath, 
destTempFilePath);
+                FileSystemTestUtilities.HaveSameContent(sourceTempFilePath, 
destTempFilePath);
+            }
+            finally
+            {
+                try
+                {
+                    File.Delete(sourceTempFilePath);
+                }
+                finally
+                {
+                    File.Delete(destTempFilePath);
+                }
+            }
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestCopyToLocalE2E()
+        {         
+            var tempFilePath = Path.GetTempFileName();
+            try
+            {
+                string fileName = UploadFromString(ContentsText);
+                _fileSystem.CopyToLocal(PathToFile(fileName), tempFilePath);
+                Assert.True(File.Exists(tempFilePath));
+                Assert.Equal(ContentsText, File.ReadAllText(tempFilePath));
+            }
+            finally
+            {
+                File.Delete(tempFilePath);
+            }
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestCopyFromLocalE2E()
+        {
+            var tempFilePath = Path.GetTempFileName();
+            var tempFileName = Path.GetFileName(tempFilePath);
+            try
+            {
+                File.WriteAllText(tempFilePath, ContentsText);
+                Uri remoteFileUri = 
PathToFile($"/{_defaultFolderName}/{tempFileName}");
+                _fileSystem.CopyFromLocal(tempFilePath, remoteFileUri);
+                
Assert.True(_adlsClient.CheckExists($"/{_defaultFolderName}/{tempFileName}"));
+                var stream = _fileSystem.Open(remoteFileUri);
+                string streamText = new StreamReader(stream).ReadToEnd();
+                Assert.Equal(ContentsText, streamText);
+            }
+            finally
+            {
+                File.Delete(tempFilePath);
+            }
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestCreateDirectoryE2E()
+        {
+            string dirName = $"/{_defaultFolderName}";
+            _fileSystem.CreateDirectory(PathToFile(dirName));
+            Assert.True(_adlsClient.CheckExists(dirName));
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestDeleteDirectoryE2E()
+        {
+            string dirName = $"/{_defaultFolderName}";
+            _adlsClient.CreateDirectory(dirName);
+            Assert.True(_adlsClient.CheckExists(dirName));
+            _fileSystem.Delete(PathToFile(dirName));
+            Assert.False(_adlsClient.CheckExists(dirName));
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestGetChildrenE2E()
+        {
+            string fileName1 = UploadFromString("file1", 1);
+            string fileName2 = UploadFromString("file2", 2);
+            string dirName = $"/{_defaultFolderName}";
+            var childUris = 
_fileSystem.GetChildren(PathToFile(dirName)).ToList();
+            Assert.Equal(2, childUris.Count);
+            Assert.Equal(new[] { PathToFile(fileName1), PathToFile(fileName2) 
}, childUris);
+        }
+
+        [Fact(Skip = SkipMessage)]
+        public void TestGetFileStatusE2E()
+        {
+            string fileName = UploadFromString(ContentsText);
+            var fileStatus = _fileSystem.GetFileStatus(PathToFile(fileName));
+            Assert.Equal(ContentsText.Length, fileStatus.LengthBytes);
+        }
+
+        private static ServiceClientCredentials GetCredsSpiSecretKey(string 
tenant, Uri tokenAudience, string clientId, string secretKey)
+        {
+            SynchronizationContext.SetSynchronizationContext(new 
SynchronizationContext());
+
+            var serviceSettings = ActiveDirectoryServiceSettings.Azure;
+            serviceSettings.TokenAudience = tokenAudience;
+
+            return ApplicationTokenProvider.LoginSilentAsync(tenant, clientId, 
secretKey, serviceSettings).Result;
+        }
+
+        private string UploadFromString(string str, int fileIndex = 1)
+        {
+            string fileName = $"/{_defaultFolderName}/testFile{fileIndex}.txt";
+            using (var streamWriter = new 
StreamWriter(_adlsClient.CreateFile(fileName, IfExists.Overwrite)))
+            {
+                streamWriter.Write(str);
+            }
+            return fileName;
+        }
+
+        private Uri PathToFile(string filePath)
+        {
+            return _fileSystem.CreateUriForPath(filePath);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO.Tests/packages.config
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IO.Tests/packages.config 
b/lang/cs/Org.Apache.REEF.IO.Tests/packages.config
index 6cae99e..cc3ad3b 100644
--- a/lang/cs/Org.Apache.REEF.IO.Tests/packages.config
+++ b/lang/cs/Org.Apache.REEF.IO.Tests/packages.config
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -18,6 +18,12 @@ specific language governing permissions and limitations
 under the License.
 -->
 <packages>
+  <package id="Microsoft.Azure.DataLake.Store" version="1.0.4" 
targetFramework="net452" />
+  <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" 
version="2.28.3" targetFramework="net452" />
+  <package id="Microsoft.Rest.ClientRuntime" version="2.3.10" 
targetFramework="net452" />
+  <package id="Microsoft.Rest.ClientRuntime.Azure.Authentication" 
version="2.3.1" targetFramework="net452" />
+  <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net452" />
+  <package id="NLog" version="4.4.12" targetFramework="net452" />
   <package id="NSubstitute" version="1.8.2.0" targetFramework="net45" />
   <package id="StyleCop.MSBuild" version="5.0.0" targetFramework="net45" 
developmentDependency="true" />
   <package id="xunit" version="2.1.0" targetFramework="net45" />

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystem.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystem.cs
 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystem.cs
new file mode 100644
index 0000000..39d1f04
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystem.cs
@@ -0,0 +1,232 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Microsoft.Azure.DataLake.Store;
+using Microsoft.Azure.DataLake.Store.FileTransfer;
+using Org.Apache.REEF.Tang.Annotations;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake
+{
+    /// <summary>
+    /// An IFileSystem implementation for Azure Data Lake Store.
+    /// </summary>
+    internal sealed class AzureDataLakeFileSystem : IFileSystem
+    {
+        private readonly IDataLakeStoreClient _client;
+        private readonly AdlsClient _adlsClient;
+
+        [Inject]
+        private AzureDataLakeFileSystem(IDataLakeStoreClient client)
+        {
+            _client = client;
+            _adlsClient = _client.GetAdlsClient();
+        }
+
+        /// <summary>
+        /// Opens the given URI for reading
+        /// </summary>
+        /// <exception cref="AdlsException">If the URI couldn't be 
opened.</exception>
+        public Stream Open(Uri fileUri)
+        {
+            return _adlsClient.GetReadStream(fileUri.AbsolutePath);
+        }
+
+        /// <summary>
+        /// Creates a new file under the given URI.
+        /// </summary>
+        /// <exception cref="AdlsException">If the URI couldn't be 
created.</exception>
+        public Stream Create(Uri fileUri)
+        {
+            return _adlsClient.CreateFile(fileUri.AbsolutePath, 
IfExists.Overwrite);
+        }
+
+        /// <summary>
+        /// Deletes the file under the given URI.
+        /// </summary>
+        /// <exception cref="IOException">If the specified file cannot be 
deleted</exception>
+        public void Delete(Uri fileUri)
+        {
+            bool deleteStatus = _adlsClient.Delete(fileUri.AbsolutePath);
+            if (!deleteStatus)
+            {
+                throw new IOException($"Cannot delete directory/file specified 
by {fileUri}");
+            }
+        }
+
+        /// <summary>
+        /// Determines whether a file exists under the given URI.
+        /// </summary>
+        public bool Exists(Uri fileUri)
+        {
+            return _adlsClient.CheckExists(fileUri.AbsolutePath);
+        }
+
+        /// <summary>
+        /// Copies the file referenced by sourceUri to destinationUri.
+        /// Note : This method reads from the input stream of sourceUri 
locally and
+        /// writes to the output stream of destinationUri.
+        /// This is time consuming and not recommended for large file 
transfers.
+        /// </summary>
+        /// <exception cref="IOException">If copy process encounters any 
exceptions</exception>
+        public void Copy(Uri sourceUri, Uri destinationUri)
+        {
+            try
+            {
+                using (var readStream = Open(sourceUri))
+                {
+                    readStream.Position = 0;
+                    using (var writeStream = Create(destinationUri))
+                    {
+                        readStream.CopyTo(writeStream);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new IOException($"Error copying {sourceUri} to 
{destinationUri}", ex);
+            }
+        }
+
+        /// <summary>
+        /// Copies the remote file to a local file.
+        /// </summary>
+        /// <exception cref="IOException">If copy process encounters any 
exceptions</exception>
+        public void CopyToLocal(Uri remoteFileUri, string localFileName)
+        {
+            TransferStatus status;
+            try
+            {
+                status = _adlsClient.BulkDownload(remoteFileUri.AbsolutePath, 
localFileName); // throws KeyNotFoundException
+            }
+            catch (Exception ex)
+            {
+                throw new IOException($"Error in bulk download from 
{remoteFileUri} to {localFileName}", ex);
+            }
+            if (status.EntriesFailed.Count != 0)
+            {
+                throw new IOException($"{status.EntriesFailed.Count} entries 
did not get transferred correctly");
+            }
+        }
+
+        /// <summary>
+        /// Copies the specified file to the remote location.
+        /// </summary>
+        /// <exception cref="IOException">If copy process encounters any 
exception</exception>
+        public void CopyFromLocal(string localFileName, Uri remoteFileUri)
+        {
+            TransferStatus status;
+            try
+            {
+                status = status = _adlsClient.BulkUpload(localFileName, 
remoteFileUri.AbsolutePath);
+            }
+            catch (Exception ex)
+            {
+                throw new IOException($"Error in bulk upload from 
{localFileName} to {remoteFileUri}", ex);
+            }
+            if (status.EntriesFailed.Count != 0)
+            {
+                throw new IOException($"{status.EntriesFailed.Count} entries 
did not get transferred correctly");
+            }
+        }
+
+        /// <summary>
+        /// Creates a new directory.
+        /// </summary>
+        /// <exception cref="IOException">If directory cannot be 
created</exception>
+        public void CreateDirectory(Uri directoryUri)
+        {
+            bool createDirStatus = 
_adlsClient.CreateDirectory(directoryUri.AbsolutePath);
+            if (!createDirStatus)
+            {
+                throw new IOException($"Cannot create directory specified by 
{directoryUri}");
+            }
+        }
+
+        /// <summary>
+        /// Deletes a directory.
+        /// </summary>
+        /// <exception cref="IOException">If directory cannot be 
deleted</exception>
+        public void DeleteDirectory(Uri directoryUri)
+        {
+            bool deleteStatus = Exists(directoryUri) && 
+                _adlsClient.GetDirectoryEntry(directoryUri.AbsolutePath).Type 
== DirectoryEntryType.DIRECTORY &&
+                _adlsClient.DeleteRecursive(directoryUri.AbsolutePath);
+            if (!deleteStatus)
+            {
+                throw new IOException($"Cannot delete directory specified by 
{directoryUri}");
+            }
+        }
+
+        /// <summary>
+        /// Get the children on the given URI, if that refers to a directory.
+        /// </summary>
+        /// <exception cref="IOException">If directory does not 
exist</exception>
+        public IEnumerable<Uri> GetChildren(Uri directoryUri)
+        {
+            if (!Exists(directoryUri) || 
_adlsClient.GetDirectoryEntry(directoryUri.AbsolutePath).Type != 
DirectoryEntryType.DIRECTORY)
+            {
+                throw new IOException($"Cannot find directory specified by 
{directoryUri}");
+            }
+
+            return 
_adlsClient.EnumerateDirectory(directoryUri.AbsolutePath).Select(entry => 
CreateUriForPath(entry.FullName));
+        }
+
+        /// <summary>
+        /// Create Uri from a given file path.
+        /// The file path can be full with prefix or relative without prefix.
+        /// If null is passed as the path, ArgumentException will be thrown.
+        /// </summary>
+        /// <exception cref="ArgumentNullException">If specified path is 
null</exception>
+        public Uri CreateUriForPath(string path)
+        {
+            if (path == null)
+            {
+                throw new ArgumentNullException(nameof(path), "Specified path 
is null");
+            }
+            return new Uri($"{GetUriPrefix()}/{path.TrimStart('/')}");
+        }
+
+        /// <summary>
+        /// Gets the FileStatus for remote file.
+        /// </summary>
+        /// <exception cref="ArgumentNullException">If remote file URI is 
null</exception>
+        /// <returns>FileStatus</returns>
+        public FileStatus GetFileStatus(Uri remoteFileUri)
+        {
+            if (remoteFileUri == null)
+            {
+                throw new ArgumentNullException(nameof(remoteFileUri), 
"Specified uri is null");
+            }
+            var entrySummary = 
_adlsClient.GetDirectoryEntry(remoteFileUri.AbsolutePath);
+            if (!entrySummary.LastModifiedTime.HasValue)
+            {
+                throw new IOException($"File/Directory at {remoteFileUri} does 
not have a last modified time. It may have been deleted.");
+            }
+
+            return new FileStatus(entrySummary.LastModifiedTime.Value, 
entrySummary.Length);
+        }
+
+        private string GetUriPrefix()
+        {
+            return $"adl://{_client.AccountFQDN}";
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystemConfiguration.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystemConfiguration.cs
 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystemConfiguration.cs
new file mode 100644
index 0000000..6c386f6
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystemConfiguration.cs
@@ -0,0 +1,71 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using Org.Apache.REEF.Common.Client.Parameters;
+using Org.Apache.REEF.Tang.Formats;
+using Org.Apache.REEF.Tang.Interface;
+using Org.Apache.REEF.Tang.Util;
+using Org.Apache.REEF.IO.FileSystem.AzureDataLake.Parameters;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake
+{
+    /// <summary>
+    /// Configuration Module for the Azure Data Lake (ADL) file system 
implementation of IFileSystem.
+    /// </summary>
+    public sealed class AzureDataLakeFileSystemConfiguration : 
ConfigurationModuleBuilder
+    {
+        /// <summary>
+        /// The account FQDN to be used to connect to the data lake store
+        /// </summary>
+        public static readonly RequiredParameter<string> 
DataLakeStorageAccountName = new RequiredParameter<string>();
+
+        /// <summary>
+        /// The Tenant to be used to authenticate with Azure
+        /// </summary>
+        public static readonly RequiredParameter<string> Tenant = new 
RequiredParameter<string>();
+
+        /// <summary>
+        /// The Application ID to be used to authenticate with Azure
+        /// </summary>
+        public static readonly RequiredParameter<string> ClientId = new 
RequiredParameter<string>();
+
+        /// <summary>
+        /// The Client Secret to be used to authenticate with Azure
+        /// </summary>
+        public static readonly RequiredParameter<string> SecretKey = new 
RequiredParameter<string>();
+
+        /// <summary>
+        /// The ADL TokenAudience Uri to be used to authenticate with Data 
Lake Store
+        /// </summary>
+        public static readonly OptionalParameter<string> TokenAudience = new 
OptionalParameter<string>();
+
+        /// <summary>
+        /// Set AzureDataLakeFileSystemConfigurationProvider to 
DriverConfigurationProviders.
+        /// Set all the parameters needed for injecting 
AzureDataLakeFileSystemConfigurationProvider.
+        /// </summary>
+        public static readonly ConfigurationModule ConfigurationModule = new 
AzureDataLakeFileSystemConfiguration()
+            .BindSetEntry<DriverConfigurationProviders, 
AzureDataLakeFileSystemConfigurationProvider, IConfigurationProvider>(
+                GenericType<DriverConfigurationProviders>.Class, 
GenericType<AzureDataLakeFileSystemConfigurationProvider>.Class)
+            .BindImplementation(GenericType<IFileSystem>.Class, 
GenericType<AzureDataLakeFileSystem>.Class)
+            .BindNamedParameter(GenericType<DataLakeStorageAccountName>.Class, 
DataLakeStorageAccountName)
+            .BindNamedParameter(GenericType<Tenant>.Class, Tenant)
+            .BindNamedParameter(GenericType<ClientId>.Class, ClientId)
+            .BindNamedParameter(GenericType<SecretKey>.Class, SecretKey)
+            .BindNamedParameter(GenericType<TokenAudience>.Class, 
TokenAudience)
+            .Build();
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystemConfigurationProvider.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystemConfigurationProvider.cs
 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystemConfigurationProvider.cs
new file mode 100644
index 0000000..8e1564c
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeFileSystemConfigurationProvider.cs
@@ -0,0 +1,61 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using Org.Apache.REEF.Common.Evaluator.Parameters;
+using Org.Apache.REEF.IO.FileSystem.AzureDataLake.Parameters;
+using Org.Apache.REEF.Tang.Annotations;
+using Org.Apache.REEF.Tang.Implementations.Tang;
+using Org.Apache.REEF.Tang.Interface;
+using Org.Apache.REEF.Tang.Util;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake
+{
+    /// <summary>
+    /// This provider provides configuration for AzureDataLakeFileSystem
+    /// The client that is going to use AzureDataLakeFileSystem in its driver 
and evaluators should set 
+    /// configuration data through AzureDataLakeFileSystemConfiguration module 
in the client's configuration
+    /// </summary>
+    internal sealed class AzureDataLakeFileSystemConfigurationProvider : 
IConfigurationProvider
+    {
+        private readonly IConfiguration _configuration;
+
+        [Inject]
+        private AzureDataLakeFileSystemConfigurationProvider(
+            [Parameter(typeof(DataLakeStorageAccountName))] string 
adlsAccountName,
+            [Parameter(typeof(Tenant))] string tenant,
+            [Parameter(typeof(ClientId))] string clientId,
+            [Parameter(typeof(SecretKey))] string secretKey,
+            [Parameter(typeof(TokenAudience))] string tokenAudience)
+        {
+            _configuration = TangFactory.GetTang().NewConfigurationBuilder()
+                .BindImplementation(GenericType<IFileSystem>.Class, 
GenericType<AzureDataLakeFileSystem>.Class)
+                .BindImplementation(GenericType<IAdlsCredentials>.Class, 
GenericType<SecretKeyAdlsCredentials>.Class)
+                
.BindStringNamedParam<DataLakeStorageAccountName>(adlsAccountName)
+                .BindStringNamedParam<Tenant>(tenant)
+                .BindStringNamedParam<ClientId>(clientId)
+                .BindStringNamedParam<SecretKey>(secretKey)
+                .BindStringNamedParam<TokenAudience>(tokenAudience)
+                .BindSetEntry<EvaluatorConfigurationProviders, 
AzureDataLakeFileSystemConfigurationProvider, IConfigurationProvider>()
+                .Build();
+        }
+
+        public IConfiguration GetConfiguration()
+        {
+            return _configuration;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeStoreClient.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeStoreClient.cs
 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeStoreClient.cs
new file mode 100644
index 0000000..6367797
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/AzureDataLakeStoreClient.cs
@@ -0,0 +1,44 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using Microsoft.Azure.DataLake.Store;
+using Org.Apache.REEF.IO.FileSystem.AzureDataLake.Parameters;
+using Org.Apache.REEF.Tang.Annotations;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake
+{
+    /// <summary>
+    /// A proxy class for AdlsClient, mainly in order to fake for unit testing.
+    /// </summary>
+    internal sealed class AzureDataLakeStoreClient : IDataLakeStoreClient
+    {
+        private readonly AdlsClient _adlsClient;
+
+        [Inject]
+        private 
AzureDataLakeStoreClient([Parameter(typeof(DataLakeStorageAccountName))] string 
adlsAccountName, IAdlsCredentials adlsCredentials)
+        {
+            _adlsClient = AdlsClient.CreateClient(adlsAccountName, 
adlsCredentials.Credentials);
+        }
+
+        public AdlsClient GetAdlsClient()
+        {
+            return _adlsClient;
+        }
+
+        public string AccountFQDN => _adlsClient.AccountFQDN;
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/IAdlsCredentials.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/IAdlsCredentials.cs 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/IAdlsCredentials.cs
new file mode 100644
index 0000000..6f217d9
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/IAdlsCredentials.cs
@@ -0,0 +1,28 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using Microsoft.Rest;
+using Org.Apache.REEF.Tang.Annotations;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake
+{
+    [DefaultImplementation(typeof(SecretKeyAdlsCredentials))]
+    internal interface IAdlsCredentials
+    {
+        ServiceClientCredentials Credentials { get; }
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/IDataLakeStoreClient.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/IDataLakeStoreClient.cs 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/IDataLakeStoreClient.cs
new file mode 100644
index 0000000..da694c3
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/IDataLakeStoreClient.cs
@@ -0,0 +1,36 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using Microsoft.Azure.DataLake.Store;
+using Org.Apache.REEF.Tang.Annotations;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake
+{
+    /// <summary>
+    /// A proxy interface for AzureDataLakeStoreClient, mainly in order to 
fake for unit testing.
+    /// </summary>
+    [DefaultImplementation(typeof(AzureDataLakeStoreClient))]
+    internal interface IDataLakeStoreClient
+    {
+        AdlsClient GetAdlsClient();
+
+        /// <summary>
+        /// Returns the account name for the AdlsClient.
+        /// </summary>
+        string AccountFQDN { get; }
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/ClientId.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/ClientId.cs 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/ClientId.cs
new file mode 100644
index 0000000..c9c8d55
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/ClientId.cs
@@ -0,0 +1,29 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using Org.Apache.REEF.Tang.Annotations;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake.Parameters
+{
+    /// <summary>
+    /// The Application ID to be used to authenticate with Azure
+    /// </summary>
+    [NamedParameter("The Application ID to be used to authenticate with 
Azure")]
+    internal sealed class ClientId : Name<string>
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/DataLakeStorageAccountName.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/DataLakeStorageAccountName.cs
 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/DataLakeStorageAccountName.cs
new file mode 100644
index 0000000..5d3f2ed
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/DataLakeStorageAccountName.cs
@@ -0,0 +1,29 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using Org.Apache.REEF.Tang.Annotations;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake.Parameters
+{
+    /// <summary>
+    /// The account FQDN to be used to connect to the data lake store
+    /// </summary>
+    [NamedParameter("The account FQDN to be used to connect to the data lake 
store")]
+    internal sealed class DataLakeStorageAccountName : Name<string>
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/SecretKey.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/SecretKey.cs 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/SecretKey.cs
new file mode 100644
index 0000000..21a23b4
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/SecretKey.cs
@@ -0,0 +1,29 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using Org.Apache.REEF.Tang.Annotations;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake.Parameters
+{
+    /// <summary>
+    /// The Client Secret to be used to authenticate with Azure
+    /// </summary>
+    [NamedParameter("The Client Secret to be used to authenticate with Azure")]
+    internal sealed class SecretKey : Name<string>
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/Tenant.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/Tenant.cs 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/Tenant.cs
new file mode 100644
index 0000000..a5c5cca
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/Tenant.cs
@@ -0,0 +1,29 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using Org.Apache.REEF.Tang.Annotations;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake.Parameters
+{
+    /// <summary>
+    /// The Tenant to be used to authenticate with Azure
+    /// </summary>
+    [NamedParameter("The Tenant to be used to authenticate with Azure")]
+    internal sealed class Tenant : Name<string>
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/TokenAudience.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/TokenAudience.cs
 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/TokenAudience.cs
new file mode 100644
index 0000000..d15c6d0
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/Parameters/TokenAudience.cs
@@ -0,0 +1,29 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using Org.Apache.REEF.Tang.Annotations;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake.Parameters
+{
+    /// <summary>
+    /// The ADL TokenAudience Uri to be used to authenticate with Data Lake 
Store
+    /// </summary>
+    [NamedParameter("The ADL TokenAudience Uri to be used to authenticate with 
Data Lake Store", defaultValue: "https://datalake.azure.net/";)]
+    internal sealed class TokenAudience : Name<string>
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/SecretKeyAdlsCredentials.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/SecretKeyAdlsCredentials.cs
 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/SecretKeyAdlsCredentials.cs
new file mode 100644
index 0000000..1f75319
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/AzureDataLake/SecretKeyAdlsCredentials.cs
@@ -0,0 +1,45 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+// 
+//   http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using System.Threading;
+using Microsoft.Rest;
+using Org.Apache.REEF.Tang.Annotations;
+using Microsoft.Rest.Azure.Authentication;
+using Org.Apache.REEF.IO.FileSystem.AzureDataLake.Parameters;
+
+namespace Org.Apache.REEF.IO.FileSystem.AzureDataLake
+{
+    internal sealed class SecretKeyAdlsCredentials : IAdlsCredentials
+    {
+        public ServiceClientCredentials Credentials { get; }
+
+        [Inject]
+        private SecretKeyAdlsCredentials([Parameter(typeof(Tenant))] string 
tenant,
+            [Parameter(typeof(TokenAudience))] string tokenAudience,
+            [Parameter(typeof(ClientId))] string clientId,
+            [Parameter(typeof(SecretKey))] string secretKey)
+        {
+            SynchronizationContext.SetSynchronizationContext(new 
SynchronizationContext());
+
+            var serviceSettings = ActiveDirectoryServiceSettings.Azure;
+            serviceSettings.TokenAudience = new Uri(tokenAudience);
+
+            Credentials = ApplicationTokenProvider.LoginSilentAsync(tenant, 
clientId, secretKey, serviceSettings).Result;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/FileSystem/Hadoop/Parameters/CommandTimeOut.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.IO/FileSystem/Hadoop/Parameters/CommandTimeOut.cs 
b/lang/cs/Org.Apache.REEF.IO/FileSystem/Hadoop/Parameters/CommandTimeOut.cs
index 315d5eb..75bb476 100644
--- a/lang/cs/Org.Apache.REEF.IO/FileSystem/Hadoop/Parameters/CommandTimeOut.cs
+++ b/lang/cs/Org.Apache.REEF.IO/FileSystem/Hadoop/Parameters/CommandTimeOut.cs
@@ -22,7 +22,7 @@ namespace Org.Apache.REEF.IO.FileSystem.Hadoop.Parameters
     /// <summary>
     /// The timeout (in milliseconds) for HDFS commands. Defaults to 300000 (5 
minutes).
     /// </summary>
-    [NamedParameter("he timeout (in milliseconds) for HDFS commands.", 
defaultValue: "300000")]
+    [NamedParameter("The timeout (in milliseconds) for HDFS commands.", 
defaultValue: "300000")]
     internal sealed class CommandTimeOut : Name<int>
     {
     }

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj 
b/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj
index 97a6565..055c139 100644
--- a/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj
+++ b/lang/cs/Org.Apache.REEF.IO/Org.Apache.REEF.IO.csproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -33,10 +33,17 @@ under the License.
   <Import Project="$(SolutionDir)\.nuget\NuGet.targets" 
Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
   <Import 
Project="$(PackagesDir)\StyleCop.MSBuild.$(StyleCopVersion)\build\StyleCop.MSBuild.Targets"
 
Condition="Exists('$(PackagesDir)\StyleCop.MSBuild.$(StyleCopVersion)\build\StyleCop.MSBuild.Targets')"
 />
   <ItemGroup>
+    <Reference Include="Microsoft.Azure.DataLake.Store, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.Azure.DataLake.Store.1.0.4\lib\net452\Microsoft.Azure.DataLake.Store.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="Microsoft.Azure.KeyVault.Core, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       
<HintPath>$(PackagesDir)\Microsoft.Azure.KeyVault.Core.1.0.0\lib\net40\Microsoft.Azure.KeyVault.Core.dll</HintPath>
       <Private>True</Private>
     </Reference>
+    <Reference Include="Microsoft.Azure.Management.DataLake.Store, 
Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, 
processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.Azure.Management.DataLake.Store.2.2.1\lib\net452\Microsoft.Azure.Management.DataLake.Store.dll</HintPath>
+    </Reference>
     <Reference Include="Microsoft.Data.Edm, Version=5.6.4.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       
<HintPath>$(PackagesDir)\Microsoft.Data.Edm.5.6.4\lib\net40\Microsoft.Data.Edm.dll</HintPath>
       <Private>True</Private>
@@ -49,16 +56,38 @@ under the License.
       
<HintPath>$(PackagesDir)\Microsoft.Data.Services.Client.5.6.4\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
       <Private>True</Private>
     </Reference>
+    <Reference Include="Microsoft.Rest.ClientRuntime, Version=2.0.0.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.Rest.ClientRuntime.2.3.10\lib\net452\Microsoft.Rest.ClientRuntime.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="Microsoft.Rest.ClientRuntime.Azure, Version=3.0.0.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.Rest.ClientRuntime.Azure.3.3.7\lib\net452\Microsoft.Rest.ClientRuntime.Azure.dll</HintPath>
+    </Reference>
     <Reference Include="Microsoft.WindowsAzure.Storage, Version=6.1.0.0, 
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       
<HintPath>$(PackagesDir)\WindowsAzure.Storage.6.1.0\lib\net40\Microsoft.WindowsAzure.Storage.dll</HintPath>
       <Private>True</Private>
     </Reference>
+    <Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory, 
Version=2.28.3.860, Culture=neutral, PublicKeyToken=31bf3856ad364e35, 
processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.IdentityModel.Clients.ActiveDirectory.2.28.3\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll</HintPath>
+    </Reference>
+    <Reference 
Include="Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms, 
Version=2.28.3.860, Culture=neutral, PublicKeyToken=31bf3856ad364e35, 
processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.IdentityModel.Clients.ActiveDirectory.2.28.3\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Rest.ClientRuntime.Azure.Authentication, 
Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, 
processorArchitecture=MSIL">
+      
<HintPath>$(PackagesDir)\Microsoft.Rest.ClientRuntime.Azure.Authentication.2.3.1\lib\net452\Microsoft.Rest.ClientRuntime.Azure.Authentication.dll</HintPath>
+    </Reference>
     <Reference Include="Newtonsoft.Json">
       
<HintPath>$(PackagesDir)\Newtonsoft.Json.$(NewtonsoftJsonVersion)\lib\net45\Newtonsoft.Json.dll</HintPath>
       <Private>True</Private>
     </Reference>
+    <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
+      <HintPath>$(PackagesDir)\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Net.Http" />
     <Reference Include="System.Spatial, Version=5.6.4.0, Culture=neutral, 
PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       
<HintPath>$(PackagesDir)\System.Spatial.5.6.4\lib\net40\System.Spatial.dll</HintPath>
       <Private>True</Private>
@@ -86,6 +115,18 @@ under the License.
     <Compile Include="FileSystem\AzureBlob\ICloudBlobClient.cs" />
     <Compile Include="FileSystem\AzureBlob\AzureCloudBlobContainer.cs" />
     <Compile 
Include="FileSystem\AzureBlob\Parameters\AzureStorageConnectionString.cs" />
+    <Compile Include="FileSystem\AzureDataLake\IDataLakeStoreClient.cs" />
+    <Compile Include="FileSystem\AzureDataLake\AzureDataLakeStoreClient.cs" />
+    <Compile Include="FileSystem\AzureDataLake\AzureDataLakeFileSystem.cs" />
+    <Compile 
Include="FileSystem\AzureDataLake\AzureDataLakeFileSystemConfiguration.cs" />
+    <Compile 
Include="FileSystem\AzureDataLake\AzureDataLakeFileSystemConfigurationProvider.cs"
 />
+    <Compile Include="FileSystem\AzureDataLake\IAdlsCredentials.cs" />
+    <Compile Include="FileSystem\AzureDataLake\SecretKeyAdlsCredentials.cs" />
+    <Compile 
Include="FileSystem\AzureDataLake\Parameters\DataLakeStorageAccountName.cs" />
+    <Compile Include="FileSystem\AzureDataLake\Parameters\Tenant.cs" />
+    <Compile Include="FileSystem\AzureDataLake\Parameters\TokenAudience.cs" />
+    <Compile Include="FileSystem\AzureDataLake\Parameters\ClientId.cs" />
+    <Compile Include="FileSystem\AzureDataLake\Parameters\SecretKey.cs" />
     <Compile Include="FileSystem\FileStatus.cs" />
     <Compile Include="FileSystem\Hadoop\CommandResult.cs" />
     <Compile 
Include="FileSystem\Hadoop\HDFSConfigurationWithoutDriverBinding.cs" />

http://git-wip-us.apache.org/repos/asf/reef/blob/b759764c/lang/cs/Org.Apache.REEF.IO/packages.config
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.IO/packages.config 
b/lang/cs/Org.Apache.REEF.IO/packages.config
index 4e1a691..b401637 100644
--- a/lang/cs/Org.Apache.REEF.IO/packages.config
+++ b/lang/cs/Org.Apache.REEF.IO/packages.config
@@ -18,11 +18,18 @@ specific language governing permissions and limitations
 under the License.
 -->
 <packages>
+  <package id="Microsoft.Azure.DataLake.Store" version="1.0.4" 
targetFramework="net452" />
   <package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" 
targetFramework="net45" />
+  <package id="Microsoft.Azure.Management.DataLake.Store" version="2.2.1" 
targetFramework="net452" />
   <package id="Microsoft.Data.Edm" version="5.6.4" targetFramework="net45" />
   <package id="Microsoft.Data.OData" version="5.6.4" targetFramework="net45" />
   <package id="Microsoft.Data.Services.Client" version="5.6.4" 
targetFramework="net45" />
+  <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" 
version="2.28.3" targetFramework="net452" />
+  <package id="Microsoft.Rest.ClientRuntime" version="2.3.10" 
targetFramework="net452" />
+  <package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.7" 
targetFramework="net452" />
+  <package id="Microsoft.Rest.ClientRuntime.Azure.Authentication" 
version="2.3.2" targetFramework="net452" />
   <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net451" />
+  <package id="NLog" version="4.4.12" targetFramework="net452" />
   <package id="StyleCop.MSBuild" version="5.0.0" targetFramework="net45" 
developmentDependency="true" />
   <package id="System.Spatial" version="5.6.4" targetFramework="net45" />
   <package id="WindowsAzure.Storage" version="6.1.0" targetFramework="net45" />

Reply via email to