一,引言

  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的更多相关文章

  1. Azure Service Bus(二)在NET Core 控制台中如何操作 Service Bus Queue

    一,引言 上一篇讲到关于 Azure ServiceBus 的一些概念,讲到 Azure Service Bus(服务总线),其实也叫 "云消息服务",是微软在Azure 上提供的 ...

  2. 在.NET Core控制台中使用依赖注入

    本文介绍如何在控制台应用程序中使用微软提供的依赖注入功能,掌握控制台中的用法后,可以扩展到构建windows服务中. 创建控制台应用程序 添加DependencyInjection的引用 Instal ...

  3. 在控制台中操作MYSQL数据库步骤以及一些小问题

    一直用Navicat来对MySQL数据库进行操作,今天突然想试试用DOS控制台来操作,特记录自己第一次使用经历,若有错误之处,还望大佬们指点. 首先打开控制台,win+R键,输入cmd,确定 输入my ...

  4. Multithreading C++ Out of Core Sotring for Massive Data|多线程C++的大规模数据外部排序

    先说一下,这个其实是我为实现PantaRay或者是类似Dreamworks的Out of Core点云GI的技术储备,为大规模点云光线跟踪所准备的第一步.在实际的应用中,int类型会被64bit的ui ...

  5. .NET CORE 怎么样从控制台中读取输入流

    .NET CORE 怎么样从控制台中读取输入流 从Console.ReadList/Read 的源码中,可学习到.NET CORE 是怎么样来读取输入流. 也可以学习到是如何使用P/Invoke来调用 ...

  6. .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中

    目录 .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中 前言 笔者最近在开发和维护一个.NET Core项目,其中使用几个非常有意思的.NET Core相关的扩展,在 ...

  7. Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类

    本文目录 1.  前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...

  8. .NET Core 使用Dapper 操作MySQL

    MySQL官方驱动:http://www.cnblogs.com/linezero/p/5806814.html .NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使 ...

  9. 利用跨域请求来隐藏firbug控制台中的Ajax请求

    本文链接:http://www.orlion.ml/63/ 普通jquery的Ajax请求在控制台中是可见的,如下: 而在利用jsonp(json with padding)进行Ajax跨域时,发现A ...

随机推荐

  1. 假期对html,css,前端的再学习

    1.观看了相关教学视频40分钟. 2.学习内容: 一 HTML 介绍 1. 什么是 HTML? 超文本标记语言: 超文本:比普通文本功能更加强大 标记语言:使用一组标签对内容进行描述的一门语言,它不是 ...

  2. HTML 基本标签2

    HTML标题通过<h1>-<h6>标签定义(<h1>定义最大的标题,<h6>定义最小的标题) <html>用于定义HTML文档 HTML段落 ...

  3. above, abrupt

    above 近义词: over, beyond, exceeding反义词: below, beneath, under, underneath 有从右往左写的文字,没有从下往上的.above-men ...

  4. day06 视图层

    day06 视图层 今日内容 视图层 小白必会三板斧 JsonResponse form表单发送文件 FBV与CBV FBV基于函数的视图 CBV基于类的视图 模板层 模板语法的传值 模板语法之过滤器 ...

  5. k8s StatefulSet控制器-独立存储

    k8s-StatefulSet控制器-独立存储 1. StatefulSet控制器-独立存储 独享存储:StatefulSet的存储卷使用VolumeClaimTemplate创建,称为卷申请模板,当 ...

  6. 一条查询SQL查询语句的执行原理

    先熟悉一下浅而易懂SQL执行的流程图SQL查询过程七步曲 1.查询SQL发送请求 客户端将查询sql按照mysql通信协议传输到服务端.服务端接受到请求后,服务端单起一个线程执行sql 2.判断是否为 ...

  7. mysql报错max_connections错误

    SELECT @@MAX_CONNECTIONS AS 'Max Connections';set GLOBAL max_connections=10000; show status like '%t ...

  8. Oracle中分割逗号函数REGEXP_SUBSTR

    最近优化FORM中的查询条件遇到某个字段可以选取多个值的问题,思路当然就是选取时将多个值通过某个符号拼接起来,查询数据的时候将拼接后的字符串按照符号分割开,在分割逗号的时候用到了一个新的方法REGEX ...

  9. Template Metaprogramming in C++

    说实话,学习C++以来,第一次听说"Metaprogramming"这个名词. Predict the output of following C++ program. 1 #in ...

  10. Redis数据类型内部编码规则及优化方式

    Redis的每个键值都是使用一个redisObject结构体保存的,redisObject的定义如下: typedef struct redisObject { unsigned type:4; un ...