C#码农的大数据之路 - 使用Azure Management API创建HDInsight集群
2017-05-31 14:39
736 查看
Azure平台提供了几乎全线产品的API,可以使用第三方工具来进行管理。对于.NET更是提供封装好了的库方便使用C#等语言实现Azure的管理。
我们使用创建HDInsight集群为例来介绍使用C#管理Azure。
由于HDInsight是按照集群存在的小时收费,所以对于集群的使用都是使用时创建,使用完成立马删除。删除比较好说,Azure Portal点一下按钮并确认就可以了。而创建就需要我们一步步的进行选择。如果我们需要定制集群的属性较多,一步步的选择不但麻烦还容易出错。而使用Azure Management API以自动化的方式创建集群就非常必要。
首先我们通过Azure Portal中向导的方式创建集群,但是在最后一步创建前保存一个模板,这样才可以通过代码使用保存的模板快速创建集群。如图:
下载后得到一个名为
在VS中创建一个.NET Console App,命名为
两个模板中,
创建集群时名字尽量固定,这样方便ssh连接等一系列操作。
这其中
而SubscriptionId,TentId等,可以通过之前介绍的Azure PowerShell命令
deploymentName这个字段可以随便设置,只作为部署的一个标识,而不会影响集群本身的属性。
resourceGroupName是资源组的名称,这个在Portal中一眼就可以看到。如图:
如果要新建资源组这个属性可以添加新资源组的名称,但是这时候就需要指定
所有属性里最麻烦的是
点击左侧菜单中的
选择应用注册子菜单,在弹出窗口中点击新应用程序注册按钮。
在新建注册窗口中输入一些基本信息:
注册完成后,记下应用程序ID,这将作为
然后点击所有设置,弹出窗口中,选择密钥,然后添加一个密钥。
注意,这里输入的密钥值(我们自行使用密钥生成工具生成一个)还不是
保存这个密钥后将弹出一个确认框。记下其中的密钥值,其将作为
注意,这个密钥仅在这个窗口显示一次,无法再次查询,如果遗忘了这个密钥,只能再来这里创建新的密钥。
注册完新的应用后,还需要给其分配权限。
在Portal左侧菜单中找到图标为钥匙的订阅菜单。进入订阅管理窗口。
点击我们当前的订阅,弹出的子菜单中选择“访问控制(标识和访问管理)”,在弹出的窗口中点击添加。
弹出窗口中首先选择角色。
注意:角色至少选择“参与者”,“读者”是没有创建集群的权限。
然后添加用户中,选择刚才注册的应用程序。(默认列表中是没有,输入注册的应用程序名称会进行查找,并显示列表)
完成后点击保存,当看到下图中出现注册的应用程序说明权限已分配好。这样就可以使用之前保存的
上面这些窗口和菜单的名称经常在变动(我们都知道微软有个神奇的改名部门),请根据最新版本灵活的调整。
设置好
代码准备完毕,运行上面的代码需要还需要安装如下几个NuGet包:
Microsoft.Azure.Management.Authorization
Microsoft.Azure.Management.ResourceManager //需要选中包括预发行版
Microsoft.Rest.ClientRuntime.Azure.Authentication
这样就可以运行程序来创建HDInsight集群了。
等待10来分钟,会看到集群创建成功的提示。
创建HDInsight集群的方法就是这样了。按照同样的方法可以通过API对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中的
clusterLoginPassword和
sshPassword两个项的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";
这其中
pathToTemplateFile和
pathToParameterFile分别指向上面提到的两个json文件的路径。在上面的配置中,它们和应用程序在同一个目录中,所以直接写文件名即可。
而SubscriptionId,TentId等,可以通过之前介绍的Azure PowerShell命令
Login-AzureRmAccount快速获取。可以见此文。
deploymentName这个字段可以随便设置,只作为部署的一个标识,而不会影响集群本身的属性。
resourceGroupName是资源组的名称,这个在Portal中一眼就可以看到。如图:
如果要新建资源组这个属性可以添加新资源组的名称,但是这时候就需要指定
resourceGroupLocation的名称。(在使用现有资源组的情况下,
resourceGroupLocation的可以省略不写)。
所有属性里最麻烦的是
clientId和
clientSecret。这对值要以如下方式新建(官方文档见此,注意,官方文档中分配的是读者权限,而我们创建集群需要至少参与者权限):
点击左侧菜单中的
Azure Active Directory按钮进入Azure Active Directory配置界面:
选择应用注册子菜单,在弹出窗口中点击新应用程序注册按钮。
在新建注册窗口中输入一些基本信息:
注册完成后,记下应用程序ID,这将作为
clientId。
然后点击所有设置,弹出窗口中,选择密钥,然后添加一个密钥。
注意,这里输入的密钥值(我们自行使用密钥生成工具生成一个)还不是
clientSecret。
保存这个密钥后将弹出一个确认框。记下其中的密钥值,其将作为
clientSecret。
注意,这个密钥仅在这个窗口显示一次,无法再次查询,如果遗忘了这个密钥,只能再来这里创建新的密钥。
注册完新的应用后,还需要给其分配权限。
在Portal左侧菜单中找到图标为钥匙的订阅菜单。进入订阅管理窗口。
点击我们当前的订阅,弹出的子菜单中选择“访问控制(标识和访问管理)”,在弹出的窗口中点击添加。
弹出窗口中首先选择角色。
注意:角色至少选择“参与者”,“读者”是没有创建集群的权限。
然后添加用户中,选择刚才注册的应用程序。(默认列表中是没有,输入注册的应用程序名称会进行查找,并显示列表)
完成后点击保存,当看到下图中出现注册的应用程序说明权限已分配好。这样就可以使用之前保存的
clientId和
clientSecret来创建集群了。
上面这些窗口和菜单的名称经常在变动(我们都知道微软有个神奇的改名部门),请根据最新版本灵活的调整。
设置好
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#码农的大数据之路 - 使用C#编写MR作业
- C#码农的大数据之路 - 使用C#编写MR作业
- 在Azure HDInsight HBase集群中使用Thrift接口
- 在Azure HDInsight HBase集群中使用Thrift接口
- C#码农的大数据之路 - 使用Ambari自动化安装HDP2.6(基于Ubuntu16.04)并运行.NET Core编写的MR作业
- 在Azure HDInsight HBase集群中使用Thrift接口
- 在Azure HDInsight HBase集群中使用Thrift接口
- 在Azure HDInsight中创建R服务器,并利用Spark集群进行分布式R分析
- [2]项目创建-使用C#.NET开发基于本地数据缓存的PC客户端
- Azure 认知服务 (5) 计算机视觉API - 使用C#代码实现读取图片中的文字(OCR)功能
- 建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们
- 使用Hive Rest API 连接HDInsight
- C#中使用SQLDMO的StoredProcedure对象(存储过程)创建数据表
- Excel中 如何使用不连贯的数据来创建图表(C#)
- 使用Azure REST API创建虚拟机
- [.Net码农]C#动态创建和动态使用程序集、类、方法、字段等(一)
- [New Portal]Windows Azure Web Site (2) 使用Windows Azure Management Portal创建Web Site (下)
- HDInsight如何创建Hadoop集群
- ELK研究(一):elasticsearch java api接口操作ES集群 ---TransportClient的使用介绍 bulk批量提交数据
- C#码农的大数据之路 - HDP SandBox配置及VS连接.md