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 ...
随机推荐
- Hadoop运行jar包报错java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException: 1
错误信息: java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException: 1 at org.apache.hadoop.mapre ...
- Hibernate 错误的问题
配了好几次的Hibernate,老是在create BeanFactory的时候fail.我是用MyEclipse自带的HIbernate,直接加进去的. private static final T ...
- Java操作csv文件
以前就一直很想搞懂一个问题就是java如何读取和写入csv文件,现在要花时间总结一波. 主要使用的javaCSV.jar javaCSV API:http://javacsv.sourceforge. ...
- 【Java】【设计模式】单例设计模式
思想: 为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象 为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象 为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式 代码体 ...
- Hystrix断路器中的服务熔断与服务降级
一.Hystrix断路器 微服务架构特点就是多服务,多数据源,支撑系统应用.这样导致微服务之间存在依赖关系.如果其中一个服务故障,可能导致系统宕机,这就是所谓的雪崩效应. 1.为什么需要断路器 服务雪 ...
- Linux(CentOS 7)使用gcc编译c,c++代码
安装gcc: 1.使用 yum -list gcc* 查询 centos 官方gcc的所有包: 可安装的软件包 gcc.x86_64 gcc-c++.x86_64 gcc-gfortran.x86_6 ...
- 【C/C++】链表
#include <bits/stdc++.h> using namespace std; struct node { int data; // 数据 node* next; // 指针 ...
- Unity——WegGL打包问题
Rendering设置 Gamma和Linear颜色空间,两者有色差,Gamma有个2.25左右的修正值: WebGL2.0可用的情况,只支持Deferred Render延迟渲染,且只支持Linea ...
- 内存泄漏避雷!你真的了解重写equals()和hashcode()方法的原因吗?
基本概念 要比较两个对象是否相等时需要调用对象的equals() 方法: 判断对象引用所指向的对象地址是否相等 对象地址相等时, 那么对象相关的数据也相等,包括: 对象句柄 对象头 对象实例数据 对象 ...
- 时间同步——TSN协议802.1AS介绍
前言之前的主题TSN的发展历史和协议族现状介绍了TSN技术的缘起,最近一期的主题TSN协议导读从定时与同步.延时.可靠性.资源管理四个方面,帮助大家了解TSN协议族包含哪些子协议,以及这些子协议的作用 ...