Apache Hadoop on Windows Azure CTPのアカウントを申込すれば、この情報を使用して新しいクラスタを作成することができます。もしHdoop on Azure CTPについて詳細を知りたい場合は、このBlog記事を参照してください。
コンテンツ
- 新しいHadoop ジョブ用のWindows Azureクラスタの作成
- サンプルの展開(Pi Estimator Hadoopジョブの作成)
- Word Count Hdoopジョブ作成と注意点
- MapReduceジョブとHDFS管理のためHadoopノードへリモートログイン
新しいHadoop ジョブ用のWindows Azureクラスタの作成
Hadoop on Azure CTPに接続し、Windows Liveアカウントでhttp://www.hadooponazure.comにログインします。
次の情報を入力する必要があります。
- Step1 DNS名 
- Step2 クラスタサイズの選択 
- Step3 クラスタにログインするためのユーザ名とパスワードの入力 
- Step4 クラスタの要求 

上記情報を入力し送信すると、クラスタとノードの作成が次の図のように始まります。

4つのクラスタを持つスモールサイズのクラスタを選択したので、(4ワーカーノードと1つのヘッドノードで)合計5ノードになります。ノードの作成状況は、次のように表示されます。

さらに・・・

クラスタは新しいHadoopジョブを作成する準備が整うと、次のような表示になります。

サンプルの展開(Pi Estimator Hadoopジョブの作成)
Windows Azure上にクラスタを作成すると、いくつかのサンプルがあらかじめ用意されています。サンプルを使用するために、「Sample」を選択します。

Hadoopサンプルで、「Pi Estimator」を選択します。

「Pi Estimator」のサンプル詳細が表示されます。詳細と説明を読んだ後、ボタンをクリックして、クラスタにジョブをデプロイすることができます。

新しいジョブウィンドウが開き、Hdoopジョブで使用するパラメータの追加と確認をします。パラメータを確認したら、「Execute Job」をクリックします。

Hadoopジョブが開始され、次のような通知が表示されます。

ジョブが完了すると、次のように結果が表示されます。
  Pi Example      
•••••       
Job Info       
       
Status: Completed Sucessfully        
Type: jar         
Start time: 12/29/2011 6:21:49 AM         
End time: 12/29/2011 6:22:56 AM         
Exit code: 0       
Command       
call hadoop.cmd jar hadoop-examples-0.20.203.1-SNAPSHOT.jar pi 16 10000000       
Output (stdout)       
Number of Maps = 16       
Samples per Map = 10000000       
Wrote input for Map #0       
Wrote input for Map #1       
Wrote input for Map #2       
Wrote input for Map #3       
Wrote input for Map #4       
Wrote input for Map #5       
Wrote input for Map #6       
Wrote input for Map #7       
Wrote input for Map #8       
Wrote input for Map #9       
Wrote input for Map #10       
Wrote input for Map #11       
Wrote input for Map #12       
Wrote input for Map #13       
Wrote input for Map #14       
Wrote input for Map #15       
Starting Job       
Job Finished in 63.639 seconds        
Estimated value of Pi is 3.14159155000000000000         
      
Errors (stderr)       
11/12/29 06:21:53 INFO mapred.JobClient: Running job: job_201112290558_0001       
11/12/29 06:21:54 INFO mapred.JobClient: map 0% reduce 0%       
11/12/29 06:22:20 INFO mapred.JobClient: map 12% reduce 0%       
11/12/29 06:22:23 INFO mapred.JobClient: map 50% reduce 0%       
11/12/29 06:22:32 INFO mapred.JobClient: map 62% reduce 0%       
11/12/29 06:22:35 INFO mapred.JobClient: map 100% reduce 0%       
11/12/29 06:22:38 INFO mapred.JobClient: map 100% reduce 16%       
11/12/29 06:22:44 INFO mapred.JobClient: map 100% reduce 100%       
11/12/29 06:22:55 INFO mapred.JobClient: Job complete: job_201112290558_0001       
11/12/29 06:22:55 INFO mapred.JobClient: Counters: 27       
11/12/29 06:22:55 INFO mapred.JobClient: Job Counters       
11/12/29 06:22:55 INFO mapred.JobClient: Launched reduce tasks=1       
11/12/29 06:22:55 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=189402       
11/12/29 06:22:55 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0       
11/12/29 06:22:55 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0       
11/12/29 06:22:55 INFO mapred.JobClient: Rack-local map tasks=1       
11/12/29 06:22:55 INFO mapred.JobClient: Launched map tasks=16       
11/12/29 06:22:55 INFO mapred.JobClient: Data-local map tasks=15       
11/12/29 06:22:55 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=22906       
11/12/29 06:22:55 INFO mapred.JobClient: File Input Format Counters       
11/12/29 06:22:55 INFO mapred.JobClient: Bytes Read=1888       
11/12/29 06:22:55 INFO mapred.JobClient: File Output Format Counters       
11/12/29 06:22:55 INFO mapred.JobClient: Bytes Written=97       
11/12/29 06:22:55 INFO mapred.JobClient: FileSystemCounters       
11/12/29 06:22:55 INFO mapred.JobClient: FILE_BYTES_READ=2958       
11/12/29 06:22:55 INFO mapred.JobClient: HDFS_BYTES_READ=3910       
11/12/29 06:22:55 INFO mapred.JobClient: FILE_BYTES_WRITTEN=371261       
11/12/29 06:22:55 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=215       
11/12/29 06:22:55 INFO mapred.JobClient: Map-Reduce Framework       
11/12/29 06:22:55 INFO mapred.JobClient: Map output materialized bytes=448       
11/12/29 06:22:55 INFO mapred.JobClient: Map input records=16       
11/12/29 06:22:55 INFO mapred.JobClient: Reduce shuffle bytes=448       
11/12/29 06:22:55 INFO mapred.JobClient: Spilled Records=64       
11/12/29 06:22:55 INFO mapred.JobClient: Map output bytes=288       
11/12/29 06:22:55 INFO mapred.JobClient: Map input bytes=384       
11/12/29 06:22:55 INFO mapred.JobClient: Combine input records=0       
11/12/29 06:22:55 INFO mapred.JobClient: SPLIT_RAW_BYTES=2022       
11/12/29 06:22:55 INFO mapred.JobClient: Reduce input records=32       
11/12/29 06:22:55 INFO mapred.JobClient: Reduce input groups=32       
11/12/29 06:22:55 INFO mapred.JobClient: Combine output records=0       
11/12/29 06:22:55 INFO mapred.JobClient: Reduce output records=0       
11/12/29 06:22:55 INFO mapred.JobClient: Map output records=32
戻るために矢印ボタンをクリックし、次のようにジョブ数と履歴が表示されます。

Word Count Hdoopジョブ作成と注意点
この例では、理解しやすさを優先するため、いくつかの意図的なエラーを残しつつ新しいHadoopジョブを開始します。Sampleにアクセスし、Wordcountサンプルジョブをクラスタにデプロイします。全てのパラメーターを確認し、次のようにジョブを開始します。

補足:次の二つの理由でエラーになります
- まだクラスタにdavinci.txtをアップロードしていない 
- 誤ったパラメーターを設定している 
ジョブが開始すると、すぐにこのエラーが発生します。

次のようなクラス名を見ることができ、このクラス名が誤っているためエラーになります。正しいパラメーター「wordcount」に修正して、ジョブを再起動します。    
すると、次のような別のエラーが発生します。

この問題を解決するために、クラスタにファイル名「davinci.txt」のテキストファイルをアップロードします(この手順についての詳細な情報は、Wordcountサンプルページを参照してください)。
ファイルをアップロードするため、対話形式のJavaScriptコンソールを使用します。

対話形式のJavaScriptコンソールが開いたら、ローカルマシーンからテキストファイルを選択するために、fs.put()コマンドを使用し、クラスタのHDFSファイルシステムのフォルダーにアップロードできます。

ファイルアップロードが完了したら、次のような結果メッセージが返ってきます。

再度、ジョブを実行すると、おそらく次のような結果が表示されます。この問題を解決するために、2つ目のパラメータで、新しいアウトプットディレクトリ名を通す必要があります。
WordCount Example        
Job Info         
Status: Completed Successfully         
Type: jar         
Start time: 12/29/2011 5:33:00 PM         
End time: 12/29/2011 5:33:58 PM         
Exit code: 0       
Command       
call hadoop.cmd jar hadoop-examples-0.20.203.1-SNAPSHOT.jar wordcount /example/data/davinci.txt DaVinciAllTopWords       
Output (stdout)       
Errors (stderr)       
11/12/29 17:33:02 INFO input.FileInputFormat: Total input paths to process : 1       
11/12/29 17:33:03 INFO mapred.JobClient: Running job: job_201112290558_0003       
11/12/29 17:33:04 INFO mapred.JobClient: map 0% reduce 0%       
11/12/29 17:33:29 INFO mapred.JobClient: map 100% reduce 0%       
11/12/29 17:33:47 INFO mapred.JobClient: map 100% reduce 100%       
11/12/29 17:33:58 INFO mapred.JobClient: Job complete: job_201112290558_0003       
11/12/29 17:33:58 INFO mapred.JobClient: Counters: 25       
11/12/29 17:33:58 INFO mapred.JobClient: Job Counters       
11/12/29 17:33:58 INFO mapred.JobClient: Launched reduce tasks=1       
11/12/29 17:33:58 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=29185       
11/12/29 17:33:58 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0       
11/12/29 17:33:58 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0       
11/12/29 17:33:58 INFO mapred.JobClient: Rack-local map tasks=1       
11/12/29 17:33:58 INFO mapred.JobClient: Launched map tasks=1       
11/12/29 17:33:58 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=15671       
11/12/29 17:33:58 INFO mapred.JobClient: File Output Format Counters       
11/12/29 17:33:58 INFO mapred.JobClient: Bytes Written=337623       
11/12/29 17:33:58 INFO mapred.JobClient: FileSystemCounters       
11/12/29 17:33:58 INFO mapred.JobClient: FILE_BYTES_READ=467151       
11/12/29 17:33:58 INFO mapred.JobClient: HDFS_BYTES_READ=1427899       
11/12/29 17:33:58 INFO mapred.JobClient: FILE_BYTES_WRITTEN=977063       
11/12/29 17:33:58 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=337623       
11/12/29 17:33:58 INFO mapred.JobClient: File Input Format Counters       
11/12/29 17:33:58 INFO mapred.JobClient: Bytes Read=1427785       
11/12/29 17:33:58 INFO mapred.JobClient: Map-Reduce Framework       
11/12/29 17:33:58 INFO mapred.JobClient: Reduce input groups=32956       
11/12/29 17:33:58 INFO mapred.JobClient: Map output materialized bytes=466761       
11/12/29 17:33:58 INFO mapred.JobClient: Combine output records=32956       
11/12/29 17:33:58 INFO mapred.JobClient: Map input records=32118       
11/12/29 17:33:58 INFO mapred.JobClient: Reduce shuffle bytes=466761       
11/12/29 17:33:58 INFO mapred.JobClient: Reduce output records=32956       
11/12/29 17:33:58 INFO mapred.JobClient: Spilled Records=65912       
11/12/29 17:33:58 INFO mapred.JobClient: Map output bytes=2387798       
11/12/29 17:33:58 INFO mapred.JobClient: Combine input records=251357       
11/12/29 17:33:58 INFO mapred.JobClient: Map output records=251357       
11/12/29 17:33:58 INFO mapred.JobClient: SPLIT_RAW_BYTES=114       
11/12/29 17:33:58 INFO mapred.JobClient: Reduce input records=32956
再度、同じジョブを実行すると次のような結果が表示されます。
WordCount Example          
•••••       
Job Info       
Status: Failed       
Type: jar       
Start time: 12/29/2011 5:46:11 PM       
End time: 12/29/2011 5:46:13 PM       
Exit code: –1       
Command       
call hadoop.cmd jar hadoop-examples-0.20.203.1-SNAPSHOT.jar wordcount /example/data/davinci.txt DaVinciAllTopWords       
Output (stdout)       
Errors (stderr)       
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory DaVinciAllTopWords already exists       
at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:134)       
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:830)       
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:791)       
at java.security.AccessController.doPrivileged(Native Method)       
at javax.security.auth.Subject.doAs(Subject.java:415)       
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)       
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:791)       
at org.apache.hadoop.mapreduce.Job.submit(Job.java:465)       
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:494)       
at org.apache.hadoop.examples.WordCount.main(WordCount.java:67)       
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)       
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)       
at java.lang.reflect.Method.invoke(Method.java:601)       
at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68)       
at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139)       
at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:64)       
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)       
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)       
at java.lang.reflect.Method.invoke(Method.java:601)       
at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
MapReduceジョブとHDFS管理のためHadoopノードへリモートログイン
Windows AzureでApache Hdoopを起動させれば、メインノード(仮想マシーン)にリモート接続でき、次のような通常タスクを実行することができます。
- Hadoop Map/Reduce ジョブ管理 
- HDFS管理 
- 普通のネームノード管理タスク 
クラスタ管理画面で、ログインするために「Remote Desktop」ボタンを選択します。

クラスタ作成時に選択したのと同じユーザ名とパスワードを使用します。クラスタメインノードVMにログインしたら、最初にすることは、マシンのIPアドレスを確認することです。そして、タスクを実行するためにwebブラウザを開き、IPアドレスと管理ポートを指定して接続します。
- Map/Reduceジョブ用の管理ポートは50030です。 
- HDFS管理用ポートは50070です。 
Hadoop Map/Reduceジョブ管理を使用するために、http://<ローカルマシーンのIPアドレス>:50030/を使用します。

Hadoopネームノードの詳細は、http://<ローカルマシーンのIPアドレス>:50070/を使用します。

HDFSでファイルを開くために、「Browse File System Link」を選択します。

元情報