Azure平台提供了几乎全线产品的API,可以使用第三方工具来进行管理。对于.NET更是提供封装好了的库方便使用C#等语言实现Azure的管理。

我们使用创建HDInsight集群为例来介绍使用C#管理Azure。

由于HDInsight是按照集群存在的小时收费,所以对于集群的使用都是使用时创建,使用完成立马删除。删除比较好说,Azure Portal点一下按钮并确认就可以了。而创建就需要我们一步步的进行选择。如果我们需要定制集群的属性较多,一步步的选择不但麻烦还容易出错。而使用Azure Management API以自动化的方式创建集群就非常必要。

首先我们通过Azure Portal中向导的方式创建集群,但是在最后一步创建前保存一个模板,这样才可以通过代码使用保存的模板快速创建集群。如图:

下载后得到一个名为template.zip的压缩包。里面有PowerShell、Shell、Ruby以及C#四种语言进行集群创建的示例脚本。这里我们关心的就是C#示例所在的DeploymentHelper.cs。而另外两个json文件,即是记录了我们在向导中选择的集群各种参数的模板文件。

在VS中创建一个.NET Console App,命名为NetCreateCluster,然后将DeploymentHelper.cs导入项目,然后将两个json模板文件也导入项目中并且设置“复制”选项为“如果较新则复制”。

代码在这里下载

两个模板中,template.json不需要进行任何修改(其中的内容就是Portal中向导一步步所选择的配置,如果不满意可以自行修改,或者使用向导生成新的模板文件),而parameters.json中的clusterLoginPasswordsshPassword两个项的value需要被替换为我们自己的密码,如图位置:

创建集群时名字尽量固定,这样方便ssh连接等一系列操作。

DeploymentHelper.cs中我们需要修改的地方集中在其成员变量:

string subscriptionId = "your-subscription-id";
string clientId = "your-service-principal-clientId";
string clientSecret = "your-service-principal-client-secret";
string resourceGroupName = "resource-group-name";
string deploymentName = "deployment-name";
string resourceGroupLocation = "resource-group-location"; // must be specified for creating a new resource group
string pathToTemplateFile = "path-to-template.json-on-disk";
string pathToParameterFile = "path-to-parameters.json-on-disk";
string tenantId = "tenant-id";

这其中pathToTemplateFilepathToParameterFile分别指向上面提到的两个json文件的路径。在上面的配置中,它们和应用程序在同一个目录中,所以直接写文件名即可。

而SubscriptionId,TentId等,可以通过之前介绍的Azure PowerShell命令Login-AzureRmAccount快速获取。可以见此文

deploymentName这个字段可以随便设置,只作为部署的一个标识,而不会影响集群本身的属性。

resourceGroupName是资源组的名称,这个在Portal中一眼就可以看到。如图:

如果要新建资源组这个属性可以添加新资源组的名称,但是这时候就需要指定resourceGroupLocation的名称。(在使用现有资源组的情况下,resourceGroupLocation的可以省略不写)。

所有属性里最麻烦的是clientIdclientSecret。这对值要以如下方式新建(官方文档见此,注意,官方文档中分配的是读者权限,而我们创建集群需要至少参与者权限):

点击左侧菜单中的Azure Active Directory按钮进入Azure Active Directory配置界面:

选择应用注册子菜单,在弹出窗口中点击新应用程序注册按钮。

在新建注册窗口中输入一些基本信息:

注册完成后,记下应用程序ID,这将作为clientId

然后点击所有设置,弹出窗口中,选择密钥,然后添加一个密钥。

注意,这里输入的密钥值(我们自行使用密钥生成工具生成一个)还不是clientSecret

保存这个密钥后将弹出一个确认框。记下其中的密钥值,其将作为clientSecret

注意,这个密钥仅在这个窗口显示一次,无法再次查询,如果遗忘了这个密钥,只能再来这里创建新的密钥。

注册完新的应用后,还需要给其分配权限。

在Portal左侧菜单中找到图标为钥匙的订阅菜单。进入订阅管理窗口。

点击我们当前的订阅,弹出的子菜单中选择“访问控制(标识和访问管理)”,在弹出的窗口中点击添加。

弹出窗口中首先选择角色。

注意:角色至少选择“参与者”,“读者”是没有创建集群的权限。

然后添加用户中,选择刚才注册的应用程序。(默认列表中是没有,输入注册的应用程序名称会进行查找,并显示列表)

完成后点击保存,当看到下图中出现注册的应用程序说明权限已分配好。这样就可以使用之前保存的clientIdclientSecret来创建集群了。

上面这些窗口和菜单的名称经常在变动(我们都知道微软有个神奇的改名部门),请根据最新版本灵活的调整。

设置好DeploymentHelper.cs中的字段后,将Main函数实现为如下即可测试使用C#进行HDInsight集群的部署:

static void Main(string[] args)
{
var helper = new DeploymentHelper();
helper.Run(); Console.ReadLine();//防止退出
}

代码准备完毕,运行上面的代码需要还需要安装如下几个NuGet包:

  • Microsoft.Azure.Management.Authorization

  • Microsoft.Azure.Management.ResourceManager //需要选中包括预发行版

  • Microsoft.Rest.ClientRuntime.Azure.Authentication

这样就可以运行程序来创建HDInsight集群了。

等待10来分钟,会看到集群创建成功的提示。

创建HDInsight集群的方法就是这样了。按照同样的方法可以通过API对Azure进行其它管理。

C#码农的大数据之路 - 使用Azure Management API创建HDInsight集群的更多相关文章

  1. C#码农的大数据之路 - 使用C#编写MR作业

    系列目录 写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般.虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势. ...

  2. C#码农的大数据之路 - 使用Ambari自动化安装HDP2.6(基于Ubuntu16.04)并运行.NET Core编写的MR作业

    准备主机 准备3台主机,名称作用如下: 昵称 Fully Qualified Domain Name IP 作用 Ubuntu-Parrot head1.parrot 192.168.9.126 Am ...

  3. C#码农的大数据之路 - HDP SandBox配置及VS连接.md

    在进行HDInsight的开发测试之前,搭建一个测试环境是很重要的. 由于微软与Hortonworks合作开发了HDInsgiht,如果不方便建立Azure账号使用Azure HDInsight进行开 ...

  4. 大数据初级笔记二:Hadoop入门之Hadoop集群搭建

    Hadoop集群搭建 把环境全部准备好,包括编程环境. JDK安装 版本要求: 强烈建议使用64位的JDK版本,这样的优势在于JVM的能够访问到的最大内存就不受限制,基于后期可能会学习到Spark技术 ...

  5. 海豚调度5月Meetup:6个月重构大数据平台,帮你避开调度升级改造/集群迁移踩过的坑

    当今许多企业都有着技术架构的DataOps程度不够.二次开发成本高.迁移成本高.集群部署混乱等情况,团队在技术选型之后发现并不适合自己的需求,但是迁移成本和难度又比较大,甚至前团队还留下了不少坑,企业 ...

  6. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  7. 新闻网大数据实时分析可视化系统项目——7、Kafka分布式集群部署

    Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cloudera.Apache Storm.Spa ...

  8. 新闻网大数据实时分析可视化系统项目——6、HBase分布式集群部署与设计

    HBase是一个高可靠.高性能.面向列.可伸缩的分布式存储系统,利用Hbase技术可在廉价PC Server上搭建 大规模结构化存储集群. HBase 是Google Bigtable 的开源实现,与 ...

  9. 新闻网大数据实时分析可视化系统项目——4、Zookeeper分布式集群部署

    ZooKeeper 是一个针对大型分布式系统的可靠协调系统:它提供的功能包括:配置维护.名字服务.分布式同步.组服务等: 它的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效.功能稳定的 ...

随机推荐

  1. 2017-4-18 ADO.NET

    1.什么是ADO.NET?     (是一种数据库访问技术) ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于在以往的Microsoft技术中访问 ...

  2. c标签和foreach循环不能加载

    需要同时导入2个包: jstl.jar和standard.jar(大多数时候只会注意到jstl包,而忽视了standard包) 代码: c标签的写法 <%@ taglib prefix=&quo ...

  3. java 并发工具类CountDownLatch & CyclicBarrier

    一起在java1.5被引入的并发工具类还有CountDownLatch.CyclicBarrier.Semaphore.ConcurrentHashMap和BlockingQueue,它们都存在于ja ...

  4. Java中的WebService服务

    一.在本地发布一个webservice服务 1.使用jdk中的 javax.xml.ws.Endpoint 类的 static Endpointpublish(Stringaddress,Object ...

  5. mui开发app之多图压缩与上传(仿qq空间说说发表)

    欲实现效果图 提出需求点: 用户可自由添加删除替换多张图片,并且显示相应缩略图,限制为8张 用户可选择压缩图或直接上传原图功能 返回提醒用户会丢失填写的信息 下面一个个实现上述需求,从简单到复杂: 需 ...

  6. css优先级之特殊性

    在前端开发的时候,css构建样式规则,这个时候我们会遇到一个问题:当我们对同一个元素做多个样式规则,其中发生了冲突的时候,css是如何选择最终呈现的样式 如下: div{ color:red; } d ...

  7. java线程(一)

    java线程基础 什么是线程? 这里引用百度百科的一句话:"线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当 ...

  8. php web开发安全之csrf攻击的简单演示和防范(一)

    csrf攻击,即cross site request forgery跨站(域名)请求伪造,这里的forgery就是伪造的意思.网上有很多关于csrf的介绍,比如一位前辈的文章浅谈CSRF攻击方式,参考 ...

  9. javascript 六种数据类型(一)

    js的数据类型和常见隐式转化逻辑. 一.六种数据类型 原始类型(基本类型):按值访问,可以操作保存在变量中实际的值.原始类型汇总中null和undefined比较特殊. 引用类型:引用类型的值是保存在 ...

  10. 微信小程序之获取当前位置经纬度以及地图显示

    最近刚开始接触微信小程序,在弄懂其结构以及相关接口之后,准备着手实现一个小程序,功能包括--获取用户当前位置的经纬度,在地图上查看位置,通过地图获取不同位置的经纬度. 微信小程序的主体部分包括: 新增 ...