SQL Azure

若干、感じが悪いかなと思いつつ投稿。

VS2008では、.edmxファイルをSQL Azureから生成することはできませんが、VS2010であれば生成することができます。

以下は、VS2008への注意事項をMSDNライブラリから転載。

Visual Studio 2008 で実行している場合、Entity Framework は、.edmx ファイルおよび関連するクライアント クラスを SQL Azure データベースから作成できません。モデルおよびマッピング ファイルを生成するには、SQL Server のローカル インスタンスに接続する必要があります。ただし、モデル ファイルとマッピング ファイルが作成されれば、Entity Framework は SQL Azure データベースに接続するようになります。

VS2010で、作成時のスクリーンショット

SNAGHTMLac4325e

SNAGHTMLac475b4

SNAGHTMLac57518

SNAGHTMLac5b987

SNAGHTMLac67bfb

参照情報

Windows Azure

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」を選択します。

元情報

SQL Azure

SQL Azure Labsの新しいサービスとして、既存のSQL ServerデータベースをSQL Azureに移行する際に、互換性問題が無いかをチェックしてくれる「SQL Azure互換性確認サービス」の提供が始まりました。

  • SQL Server Data Tools (SSDT) CTP4を使用して、データベースから.dacpacファイルを出力します。SqlPackage.exeを使用するか、データべーうをSSDTプロジェクトにインポートしビルドすることで、.dacpacファイルを作成できます。SQL Server 2005、2008、2008 R2、2012(CTPまたはRC0)をサポートしています。
  • SQL Azure互換性確認サービスに.dacpacをアップロードすると、互換性レポートを受け取ることができます。互換性レポートには、SQL Azureでサポートしていないオブジェクトや移行する前に修正する必要のあるスキーマオブジェクト一覧が掲載されます。

参考

MVP

おかげさまで2012年もMicrosoft MVP(Most Valuable Professional)を受賞することができました。

Microsoft MVP

昨年に続き2回目の受賞となります。
受賞カテゴリは引き続きSQL Azureです。
これもひとえに皆様方の温かいご支援、ご協力のおかげと深く感謝しております。

引き続き、SQL Azure、SQL Serverを中心に情報展開していきたいと思います。
まだまだ至らない点ばかりですが、今後ともご指導・ご鞭撻のほど、よろしくお願いいたします。

2011年度(2010/10~2011/9)活動内容