Azure Data Lake(一) 在NET Core 控制台中操作 Data Lake Storage
一,引言
Azure Data Lake Storage Gen2 是一组专用于大数据分析的功能,基于 Azure Blob Storage 构建的。Data Lake Storage Gen2 包含了 Gen1 和 Blob Storage 的存储功能。但是在实际项目中如何使用,如何读取数据?如何操作数据?我们可以先从官方概念中先了解什么是 Azure Data Lake
以下引用于官方的术语--------------------
Data Lake Storage Gen2 使 Azure 存储成为在 Azure 上构建企业 Data Lake 的基础。 Data Lake Storage Gen2 从一开始就设计为存储数千万亿字节的信息,同时保持数百千兆位的吞吐量,允许你轻松管理大量数据。
Data Lake Storage Gen2 在 Blob 存储的基础上构建,并通过以下方式增强了性能、管理和安全性:
优化了性能,因为你不需要将复制或转换数据作为分析的先决条件。 与 Blob 存储上的平面命名空间相比,分层命名空间极大地提高了目录管理操作的性能,从而提高了整体作业性能。
管理更为容易,因为你可以通过目录和子目录来组织和操作文件。
安全性是可以强制实施的,因为可以在目录或单个文件上定义 POSIX 权限。
巴拉巴拉说了一大堆,我们该如何使用呢,接下来我们就通过实践(代码操作)的方式进一步了解Azure Data Lake
二,正文
1,创建 Azure Data Lake Gen2
Azure Portal 点击 “Create a resource”, 选择 “Storage account",并点击 “Create”

输入以下相关参数
Resource group:“Web_Test_AC_RG”
Storage account name:“cnbatedatalake”
Region:“East Asia”
Performance:“Standard”
Redundancy:“Locally-redundant storage(LRS)”
点击 “Next:Advanced >” 进行下一步操作

是否启用“分层命名空间”,可以在下图圈中的部分进行设置,并点击 “Review + create”

预校验完成后,点击 “Create” 进行创建

2,通过控制台代码操作 Azure Data Lake
2.1 创建新的NET Core 控制台程序,添加 Azure Data Lake Storage 的 Nuget 程序包

也可以使用程序包管理器控制台进行安装
Install-Package Azure.Storage.Files.DataLake -Version 12.8.0
访问 Azure Data Lake 得通过授权,需要安装 “Azure.Identity”

使用程序包管理器进行安装
Install-Package Azure.Identity -Version 1.5.0
代码部分 Program.cs
重点:接下来,需要将之前在Azure上注册的服务主体的 AZURE_CLIENT_ID(应用程序ID),AZURE_CLIENT_SECRET(客户端密码),AZURE_TENANT_ID(租户ID)配置到代码变量中去。
该代码的主要目的在 storage account 的 container(如果没有 "cdl" 容器,则创建) 下创建文件目录 父目录=》"my-directory",子目录=》"my-subdirectory"
1 class Program
2 {
3 static async Task Main(string[] args)
4 {
5 var accountName = "cnbatedatalake";
6 var clientID = "xxxxxxxxx-xxx-xxxx-xxxx-xxxxxxxxx";
7 var clientSecret = "JJxxxxxxxxxxxxxxbB6gIrxxxxxxxxNnI";
8 var tenantID = "9bda686c-xxxx-xxxxx-xxxxx-xxxx-xxxx";
9
10 var fileSystemName = "cdl";
11
12 DataLakeServiceClient dataLakeServiceClient = null;
13 GetDataLakeServiceClient(ref dataLakeServiceClient, accountName, clientID, clientSecret, tenantID);
14 15 16
17
18 var filedirClient= await CreateDirectory(dataLakeServiceClient, fileSystemName);
19
20 Console.ReadLine();
21 }
22
23 public static async Task<DataLakeDirectoryClient> CreateDirectory
24 (DataLakeServiceClient serviceClient, string fileSystemName)
25 {
26
27 DataLakeFileSystemClient fileSystemClient =
28 serviceClient.GetFileSystemClient(fileSystemName);
29 if (!await fileSystemClient.ExistsAsync())
30 {
31 await serviceClient.CreateFileSystemAsync(fileSystemName);
32 }
33
34 DataLakeDirectoryClient directoryClient =
35 await fileSystemClient.CreateDirectoryAsync("my-directory");
36
37 return await directoryClient.CreateSubDirectoryAsync("my-subdirectory");
38 }
39
40 public static void GetDataLakeServiceClient(ref DataLakeServiceClient dataLakeServiceClient,
41 String accountName, String clientID, string clientSecret, string tenantID)
42 {
43
44 TokenCredential credential = new ClientSecretCredential(tenantID, clientID, clientSecret);
45
46 string dfsUri = "https://" + accountName + ".dfs.core.windows.net/";
47
48 //dataLakeServiceClient = new DataLakeServiceClient(new Uri(dfsUri), credential: new DefaultAzureCredential());
49
50 dataLakeServiceClient = new DataLakeServiceClient(new Uri(dfsUri), credential);
51 }
52 }
接下啦,我们直接运行代码,并在 cnbatedatalake 这个 Azure Data Lake 中查看是否创建容器以及文件目录

父目录 “my-directory”

子目录 “my-subdirectory”

OK,成功。这里我就不在演示文件/文件目录的添加,删除等操作了,稍后我会重新补充一下代码,供大家参考。
*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。
三,结尾
ok,今天所演示的就是通过代码 service principal 的权限创建Azure Data Lake 的容器,然后在该容器中创建文件目录。在实际项目中,我们其实是需要将不同的数据写入到 Azure Data Lake 中。同时也要避免掉把一些重要的机密信息通过硬编码的方式保留在系统中。
作者:Allen
参考链接:Azure Data Lake Storage Gen2 简介
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
Azure Data Lake(一) 在NET Core 控制台中操作 Data Lake Storage的更多相关文章
- Azure Service Bus(二)在NET Core 控制台中如何操作 Service Bus Queue
一,引言 上一篇讲到关于 Azure ServiceBus 的一些概念,讲到 Azure Service Bus(服务总线),其实也叫 "云消息服务",是微软在Azure 上提供的 ...
- 在.NET Core控制台中使用依赖注入
本文介绍如何在控制台应用程序中使用微软提供的依赖注入功能,掌握控制台中的用法后,可以扩展到构建windows服务中. 创建控制台应用程序 添加DependencyInjection的引用 Instal ...
- 在控制台中操作MYSQL数据库步骤以及一些小问题
一直用Navicat来对MySQL数据库进行操作,今天突然想试试用DOS控制台来操作,特记录自己第一次使用经历,若有错误之处,还望大佬们指点. 首先打开控制台,win+R键,输入cmd,确定 输入my ...
- Multithreading C++ Out of Core Sotring for Massive Data|多线程C++的大规模数据外部排序
先说一下,这个其实是我为实现PantaRay或者是类似Dreamworks的Out of Core点云GI的技术储备,为大规模点云光线跟踪所准备的第一步.在实际的应用中,int类型会被64bit的ui ...
- .NET CORE 怎么样从控制台中读取输入流
.NET CORE 怎么样从控制台中读取输入流 从Console.ReadList/Read 的源码中,可学习到.NET CORE 是怎么样来读取输入流. 也可以学习到是如何使用P/Invoke来调用 ...
- .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中
目录 .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中 前言 笔者最近在开发和维护一个.NET Core项目,其中使用几个非常有意思的.NET Core相关的扩展,在 ...
- Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类
本文目录 1. 前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...
- .NET Core 使用Dapper 操作MySQL
MySQL官方驱动:http://www.cnblogs.com/linezero/p/5806814.html .NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使 ...
- 利用跨域请求来隐藏firbug控制台中的Ajax请求
本文链接:http://www.orlion.ml/63/ 普通jquery的Ajax请求在控制台中是可见的,如下: 而在利用jsonp(json with padding)进行Ajax跨域时,发现A ...
随机推荐
- ICCV2021 | TOOD:任务对齐的单阶段目标检测
前言 单阶段目标检测通常通过优化目标分类和定位两个子任务来实现,使用具有两个平行分支的头部,这可能会导致两个任务之间的预测出现一定程度的空间错位.本文提出了一种任务对齐的一阶段目标检测(TOOD) ...
- 《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)
1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...
- adjust, administer
adjust to just, exact. In measurement technology and metrology [度量衡学], calibration [校准] is the compa ...
- 【编程思想】【设计模式】【其他模式】graph_search
Python版 https://github.com/faif/python-patterns/blob/master/other/graph_search.py #!/usr/bin/env pyt ...
- Linux基础命令---put上传ftp文件
put 使用lftp登录ftp服务器之后,可以使用put指令将文件上传到服务器. 1.语法 put [-E] [-a] [-c] [-O base] lfile [-o rfi ...
- 使用 ACE 库框架在 UNIX 中开发高性能并发应用
使用 ACE 库框架在 UNIX 中开发高性能并发应用来源:developerWorks 中国 作者:Arpan Sen ACE 开放源码工具包可以帮助开发人员创建健壮的可移植多线程应用程序.本文讨论 ...
- 【力扣】122. 买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...
- 【C/C++】最长公共子序列(LCS)/动态规划
晴神这个的最巧妙之处,在于用dp[i][0] = dp[0][j] = 0的边界条件 这样从1的下标开始填数组的时候,递推公式dp[i-1][j-1]之类的不会报错 #include <iost ...
- 关于finally中的语句和try中的return之间的执行顺序
首先是第一种情况: 我们这里由于程序只是单一的,所以后面的代码只有主题部分: Public class test{ Public static void main(String[] args){ Sy ...
- 计算机网络 Raw_Socket编程 Ping C语言
计算机网络做了一个附加题,用C语言Raw_Socket实现ping指令. 通过本部的Mooc学习了一下Socket编程,然后成功写了出来orz 先放一下代码: #include <stdio.h ...