HDInsightを知る~ビッグデータ×クラウド

第2回 HDInsightを体験する

この記事を読むのに必要な時間:およそ 6 分

ネームノードにログオンしてみる

Azure HDInsightは,PowerShellなどを使ってリモートから操作することが多いのですが,ネームノードに直接ログオンしてhadoopコマンドを実行したりすることも可能です。その設定をしてみましょう。これはAzure管理ポータルから行ってみます。

Azure管理ポータルで,できあがったばかりのHDInsightクラスタをクリックし,⁠構成」タブに切り替えてから黒帯の「リモートを有効にする」をクリックします。

リモートを有効にする

リモートを有効にする

すると「リモートデスクトップの構成」ダイアログがでてきます。ユーザー名とパスワード,有効期限を設定します。

各種設定

各種設定

リモート接続が有効になると「接続」ボタンが出現しますので,クリックするとリモートデスクトップ接続ファイル(.rdpファイル)がダウンロードできます。

リモートデスクトップ接続ファイル

リモートデスクトップ接続ファイル

これを開くと,ログオンすることができます。ご覧の通り,HDInsightはWindows Server 2008 R2上で動いているのでした。

HDInsightの実行の様子

HDInsightの実行の様子

ここで,デスクトップにあるショートカットからMapReduceやHDFSの管理画面にアクセスしたり,コマンドプロンプトを開いてhadoopコマンドなどを実行することもできますし。ただし,注意していただきたいのは,HDInsightクラスタを構成するノードは,すべてAzureの「Workerロール」のインスタンスだということです。

Workerロールは,Azureの「仮想マシン」機能で提供されるインスタンス(PersistentVMRole)と違い,永続的なストレージを持ちません。土台になっている物理マシン側のメンテナンスなど,何らかのタイミングでインスタンスが再作成されることがあり,その場合ディスクの内容もすべて初期状態に戻ってしまいます(今はやりのImmutable Infrastructureなのです⁠⁠。

また,ネームノードへログオンするユーザーは管理者権限を持っていません。これらのことから,⁠ネームノードにログオンして,さまざまなツールを導入しクラスタ管理作業を行う」といった使い方は適切ではありません。

というわけで,ネームノードにログオンせずに,HDInsightクラスタを利用する方法を紹介していきましょう。まずは,ファイルシステム操作からです。

HDInsightのファイルシステムにアクセス

HDInsightがAzureのBLOBストレージをデフォルトのファイルシステムとして利用するということは,つまりBLOBストレージ用の既存ツールを,Hadoopのファイルシステム操作に利用できるということです。

ここでは,広く利用されているCloudXplorerを使って,クラスタ作成直後のファイルシステムを覗いてみましょう。クラスタ作成時に指定したコンテナ(下図では⁠hdinsight⁠⁠)の中に,いくつものフォルダやファイルが作成されていることがわかります。

実は,BLOBストレージには「フォルダ」という概念はなく,コンテナの下にフラットにファイルが並ぶだけなのですが,フォルダ名まで含めた「フルパス形式」のファイル名を付けることで,擬似的に階層ディレクトリ構造を表現しています。CloudXplorerをはじめ,さまざまなツールがこの方式に対応しています。

CloudXplorer

CloudXplorer

たとえば,上の図で/example/jars配下に⁠hadoop-example.jar⁠ファイルがありますが,実際には⁠example/jars/hadoop-examples.jar⁠という名前のファイルがコンテナ直下に置かれているのです。

MapReduceプログラムの実行

ファイルシステムの扱い方がわかったところで,いよいよMapReduceプログラムを実行してみましょう。ちょうど先ほど,サンプルプログラムがたくさん詰まったhadoop-example.jarを見つけたばかりですから,これに含まれるプログラムを何か実行してみましょう。

となればやはり,⁠MapReduce界のHelloWorld」たるWordCountプログラムにしましょうか。これは,指定されたファイルの中のテキストを単語に分割し,個々の単語の出現回数を数え上げる,というシンプルなプログラムです。

HDInsightのファイルシステムには,/example/data/gutenbergにWordCountの練習用テキストファイルが置いてあります。これをカウント対象にして,結果は/out/wordcount に書き出すようにしましょう。

通常のHadoop環境であれば,hadoopコマンドを次のように実行するところです(HDInsightでも,ネームノードにログオンしてこのコマンドを実行することができます⁠⁠。

hadoop jar /example/jars/hadoop-examples.jar wordcount \
/example/data/gutenberg /out/wordcount

Windows Azure PowerShellでは次のようになります。

New-AzureHDInsightMapReduceJobDefinition `
-JarFile "/example/jars/hadoop-examples.jar" `
-ClassName "wordcount" `
-Arguments "/example/data/gutenberg", "/out/wordcount" `
| Start-AzureHDInsightJob -Cluster クラスタ名
※PowerShellでは継続行記号は`(バッククォート)です。

New-AzureHDInsightMapReduceJobDefinitionでジョブを定義し,それをStart-AzureHDInsightJobへ流し込むという形になります。クラスタ名のところは適宜置き換えてください。

コマンドラインで上記コマンドを実行し,無事にジョブが投入されると,このように各種情報が出力されます。

Cluster         : sasahdi2014
ExitCode        :
Name            : wordcount
PercentComplete :
Query           :
State           : Initializing
StatusDirectory : 3987390e-175c-41b9-a1f9-0a8a5e20d122
SubmissionTime  : 3/24/2014 3:34:31 PM
JobId           : job_201403241248_0001

ジョブの状態を問い合わせるには,クラスタ名とジョブIDを指定して,次のコマンドを実行します。

Get-AzureHDInsightJob -Cluster sasahdi2014 -JobId job_201403241248_0001

どうやら,ジョブはすでに終わっていたようです。

Cluster         : sasahdi2014
ExitCode        : 0
Name            : wordcount
PercentComplete : map 100% reduce 100%
Query           :
State           : Completed
StatusDirectory : 3987390e-175c-41b9-a1f9-0a8a5e20d122
SubmissionTime  : 3/24/2014 3:34:31 PM
JobId           : job_201403241248_0001

結果を確認してみましょう。やはり,CloudXplorerなどのツールでBLOBを見るのが便利です。⁠part-r-00000⁠が出力ファイルです。

結果の確認はCloudXplorerで

結果の確認はCloudXplorerで

開いてみると,単語とその出現回数が淡々と記録されていることがわかります。

結果のデータ

結果のデータ

著者プロフィール

佐々木邦暢(ささきくにのぶ)

日本マイクロソフト株式会社 ビジネスプラットフォーム統括本部 インキュベーション・セールス部

Twitter:@ksasakims

バックナンバー

HDInsightを知る~ビッグデータ×クラウド