Table of Contents

如何合理的利用 HDInsight 并节省费用

HDInsight 集群是当前 Azure 中最流行的大数据分析平台,因为其一键配置,便于管理与监控深受用户的欢迎。

不过其昂贵的价格也让不少用户对于 HDInsight 的使用踌躇不定甚至望而却步。

注意

下面是集群中使用节点最少的 spark 集群 ,3 工作节点的官方价格。

01

本文旨在介绍一种关于如何合理减少 HDInsight 集群费用的入门方法,读者可以结合自己的应用场景来选择使用。

HDInsight 属于一种 PaaS 服务,与其他 PaaS 服务如 SQL DB 或 MySQL 相比较之下,它的计费是按分钟计算的。所以,每少用一分钟,就可以节省一分钟的使用费用。而对于部分用户的大数据计算业务来说,可能我只需要 4 个小时就可以跑完我一天的计算任务,并将计算结果导入到 SQL DB 中供用户查询。这样一来,我就可以删除掉 HDInsight 集群来节省需要的费用。

以下介绍如何自动创建和删除 HDInsight 集群。

按照下图所示,找到 HDInsight, ADD,自定义配置。

02

输入用户所需要的配置内容即可。 此处请务必配置好需要的存储,因为 HDInsight 在删除时不会删除存储上的内容,也是本文的根基所在。

Container 的名字是 HDInsight 存放数据的根目录,最好是手动命名。

03

创建完成之后,点击下文红圈处,download template and paramters.

04

虽然也可以从已经创建好的集群导出模板,但是为了方便用户,还是建议在一开始的时候就这样做。

在导出模板并解压缩后,目录结构如下:

05 此时用户需要修改,deploy,parameters.jason,template.jason 3 个文件。

提示

Deploy 文件中用户需要修改相应参数。
Mandatory 需要改为 false。手动填写需要 deploy 的 subid,resource group name,deployment name。

param(
 [Parameter(Mandatory=$False)]
 [string]
 $subscriptionId="a9dc7515-7692-4316-9ad4-xxxxxxx0",

 [Parameter(Mandatory=$False)]
 [string]
 $resourceGroupName="storm",

 [string]
 $resourceGroupLocation,

 [Parameter(Mandatory=$False)]
 [string]
 $deploymentName="hditest",

接下来,在替换 deploy 文件中的 Azure 登录配置之前,我们需要进行免交互登录配置。

首先为登录 Azure 门户的密码生成一个加密的字符串。

提示

替换 deploy 文件中的密码文件路径和 password。

#从加密文件载入密码登录
$pwd = Get-Content C:\secretfile.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PSCredential("xxxx@xxx.partner.onmschina.cn",”password”)
Login-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $cred

生成加密后的密码之后,我们需要对 deploy 文件的 sign in 部分进行如下替换:

默认为:

# sign in
Write-Host "Logging in...";
Login-AzureRmAccount

替换后的内容为

# sign in
Write-Host "Logging in...";
$pwd = Get-Content C:\secretfile.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PSCredential("xxxx@mcpod.partner.onmschina.cn",$pwd)
Login-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $cred

至此 deploy 文件的替换内容已经结束。

接下来进行 parameter.json 的替换。

这部分内容相对比较简单,只需要对登陆的密码和用户名进行替换。

06

最后是需要替换 template.json 文件中的 script action,也就是用户需要执行定时任务的脚本路径。
只需要替换 ComputeProfile 中的 scriptactions 属性即可。

07

在本例中,url 我们使用 Azure 存储中的文件,步骤如下:

  1. 打开 Azure Storage Explorer,选中文件,右键点击 Get Shared Access Signature...

    08

  2. 生成一个存活时间足够长的共享访问签名:

    09

  3. 生成访问 url,并替换掉 deploy template 中的 url:

    提示

    建议在替换之前先尝试该 URL 是否可以在浏览器中打开,确认自己生成正确。

    10

至此一个完整的 HDInsight 创建模板已经完成了。

用户需要做的只是通过定时任务(如 Windows scheduler)调用该 PowerShell 对 HDInsight 进行创建即可。

提示

本文只是一个初步的使用方法,用户可以根据自己的实际需要情况去调整更多内容。