Azure HDInsightクラスタをPSで作成する | あいうえお

あいうえお

  if (Count($misstake) > 0) then GOTO Error_Comment

前に、「Visual Studio で、 Hadoop 」という記事で、Visual StudioからAzureのHDinsightを操作することができると記述しました。


この中で、Azure管理ポータルからHDInsightクラスタを作成する手順を書いたのですが、

今回は、Power Shellを使って作成する方法を記載したいと思います。


1.HDInsightクラスタを作成するスクリプト


まずは、作成する場合のスクリプトです。

ストレージアカウントは事前に作成されていることを前提としています。

作成には、管理ポータルで作成するのと同じくらいの時間がかかりますので、

最低でも20分程度を考えておいた方がいいです。


[HDInsightクラスタを作成するスクリプト]


$subscriptionName = "[サブスクリプション名]"
$storageAccountName = "[ストレージアカウント名]"
$containerName = "[BLOBストレージのコンテナ名]"


$clusterName = "[HDクラスタ名]"
$location = "[HDクラスタを作成するデータセンター]"
$clusterNodes = [ノード数]


# Get the storage primary key based on the account name
Select-AzureSubscription $subscriptionName
$storageAccountKey = Get-AzureStorageKey $storageAccountName | %{ $_.Primary }


# Credential情報の作成
$password = ConvertTo-SecureString "[HDクラスタの管理用アカウントのパスワード]" -asplaintext -force
$cred = New-Object System.Management.Automation.PsCredential "[HDクラスタの管理用アカウント名]",$password


# Create a new HDInsight cluster
New-AzureHDInsightCluster -Name $clusterName -Location $location -DefaultStorageAccountName "$storageAccountName.blob.core.windows.net" -DefaultStorageAccountKey $storageAccountKey -DefaultStorageContainerName $containerName -ClusterSizeInNodes $clusterNodes -Credential $cred



2.HDInsightクラスタを削除するスクリプト


作成するスクリプトがあったら、削除するスクリプトも欲しいですよね。

この処理はすぐに終わります。


[HDInsightクラスタを削除するスクリプト]

Remove-AzureHDInsightCluster -Name "[HDクラスタ名]"



3.HDInsightを使ったサービスのこれからの考察



なんで、Power Shellで作成したいと思ったのかというのがポイントです。


オンプレミスでHadoopを使う場合、

・大容量データを、複数のサーバで分散して現実的な時間の中で処理を終わらせる

という目的があると思います。


ですので、サーバ台数がそれなりに必要になったり、1台のサーバのスペックも

それなりにないとなかなかメリットが出せないので、導入コストが高かったと思います。


ですので、個人でこの辺を利用することは、コスト的に厳しかったと思います。



これが、パブリッククラウドでできるようになり、

・使いたいときだけ使って、使い終わったら削除する

という方法を用いることで、コストの課金を利用時間中のみにとどめることができ、

これまでと比べるとコストを抑えることができます。



また、Hadoopの処理特性としても、ずーっと何かを処理しているわけではなくて、

ある程度たまったデータを、バッチ処理的にコマンド発行を受けてから処理を行うため、

そのクラスタがずっと動き続けている必要もないと思います。


このように考えて、シェルでHDInsightを自動生成したくなったんです。

本当に自動化するのであれば、Azure BATCH SERVICESかオートメーションで

スケジュール実行までしたいですね。



Azureであれば、Blobストレージにデータをためておいて、

1日1回、HDInsightクラスタを作成し、処理を行ったら削除する

なんて、一つの大容量データ分析サービスみたいな使い方できるような気がします。


だけど、「大容量データなんて扱わないもん」って方もいると思います。

でも、インターネット上には膨大なデータがあります。

このコンテンツも、インターネット上の膨大なデータの一つで、

実は大容量データは、すぐ目の前にも広がっている状況です。


ただ、どう使うのかっていうのは、自分にもイメージがわいているわけではないですが。。。


Azure HDInsightのドキュメントに、

HDInsight での Hadoop を使用した Twitter データの分析 」というのがあります。

この辺も、ヒントになるんだと思います。


コストを抑えてインターネット上のデータを分析して、

それをMachine Learningにつなげていく。

こんな構成も面白そうな気がしますね。