Amazon Elastic MapReduceの使い方─Hadoopより手軽にはじめる大規模計算

第6回 bootstrapを設定するには

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

Amazon Elastic MapReduce Ruby Clientでbootstrapを設定するには

次はAmazon Elastic MapReduce Ruby Clientを使ってbootstrapを設定する方法です。本連載の第3回もあわせて確認してみてください。

設定には以下のようにelastic-mapreduceコマンドを使います。

$ ./elastic-mapreduce --create \
 --name exsample \
 --master-instance-type m2.xlarge \
 --slave-instance-type m2.xlarge \
 --num-instance 20 \
 --jar s3://emrjar/examplejar \
 --args wordCount,s3://input/,s3://output
 --enable-debugging \
 --log-uri s3://emr-log/ \
 --bootstrap-name "Configure Hadoop"
 --bootstrap-action "s3n://elasticmapreduce/bootstrap-actions/configure-hadoop"
 --arg "--site-key-value io.file.buffer.size=65536" \

ポイントは以下の3点を指定することです。

--bootstrap-action
→WebコンソールでのAmazon S3 Locationを指定します。
--arg
→WebコンソールでのOptional Argumentsを指定します。
複数のパラメータを使用する場合は,以下のいずれかで設定します。
  • --argを複数設定する
  • --argsを使って「,」(カンマ区切り)で設定する
--bootstrap-name
→WebコンソールでのNameを指定します。

Java SDKでbootstrapを設定するには

最後はJava SDKでbootstrapを設定する方法です。やり方はかんたんで,いつものRunJobFlowRequestに渡すパラメータとして,bootstrap用のコンフィグを定義するだけです。

RunJobFlowRequest runJobFlowRequest =
    new RunJobFlowRequest()
        .withBootstrapActions(
            new BootstrapActionConfig().withName("Configure Hadoop")
                .withScriptBootstrapAction(
                    new ScriptBootstrapActionConfig()
                        .withPath("s3n://elasticmapreduce/bootstrap-actions/configure-hadoop")
                        .withArgs("--site-key-value io.file.buffer.size=65536")))
        .withName("EMR Job")
        .withSteps(enableDebugging, stepConfig)
        .withLogUri("s3://emr-log/")
        .withInstances(new JobFlowInstancesConfig()
               .withEc2KeyName("cluster-key")
               .withHadoopVersion("0.20")
               .withInstanceCount(10)
               .withKeepJobFlowAliveWhenNoSteps(true)
               .withMasterInstanceType("m1.large")
               .withSlaveInstanceType("m1.large")
               .withPlacement(new PlacementType()
                    .withAvailabilityZone("us-east-1a")));

ポイントは以下の5点を指定することです。

RunJobFlowRequest#withBootstrapActions
→BootstrapActionConfigを設定します。
BootstrapActionConfig#withName
→WebコンソールでのNameを指定します。
BootstrapActionConfig#withScriptBootstrapAction
→ScriptBootstrapActionConfigを設定します。
ScriptBootstrapActionConfig#withPath
→WebコンソールでのAmazon S3 Locationを指定します。
ScriptBootstrapActionConfig#withArgs
→WebコンソールでのOptional Argumentsを指定します。

その他のbootstrap

実は,Webコンソールでデフォルトで登録されているもの以外にも,デフォルトで登録されているbootstrapが2つ存在します。

download.sh

bootstrapの動きを確認するためのサンプルです。中身を確認していただけるとわかると思いますが,以下からファイルをダウンロードしてfile.tar.gzを展開するだけの簡単なスクリプトです。

memory-intensive

EMRで指定したインスタンスタイプに合わせて,各Javaプロセスのヒープ設定を最適な値にしてくれます。こちらも中身を確認していただけるとわかると思いますが,Rubyで書かれています。最高のパフォーマンスを引き出すためにもぜひ設定したいbootstrapです。

shutdown actionsで終了時にも処理できる

ここまで起動時の処理について説明してきましたが,実は終了時にも処理を行うよう設定できます。それがshutdown actionsです。shutdown actionsはJobが終了してterminateが実行される前に,以下のディレクトリに配置されているものがすべて実行されます。

  • /mnt/var/lib/instance-controller/public/shutdown-actions/

終了時に処理を行いたい場合は,このディレクトリにbootstrapでスクリプトを配置するようにしましょう。

なお,shutdown actionsはインスタンスがエラーで終了する場合,動作が保証されていません。その点だけは注意しましょう。


以上がbootstrapの基本です。EMRはMapReduce処理を簡単に実行できますが,最適に使うためにはぜひbootstrapを設定してください。

次回はbootstrapとも絡みがあるパフォーマンスについて説明します。通常のHadoop同様,細かいパフォーマンスチューニングができますし,じつはデフォルトでもチューニング設定がされています。このあたりはぜひ押さえておきたいところです。お楽しみに。

著者プロフィール

小林隆(こばやしりゅう)

クラウド,Hadoopを使ったMapReduce,NoSQL(主にCassandra)を使った開発を行っている。CassndraのGUIをオープンソースで公開。

bloghttp://beter-max.blogspot.com/

URLhttp://twitter.com/ryu_kobayashi/

コメント

コメントの記入