ローカルでSparkのアプリケーションを実行する場合は、S3のファイルの読み書きができるように設定が必要です。
まず、前回ダウンロードした「spark2.0.0」のディレクトリに移動します。
confディレクトリ内に、「spark-defaults.conf」というファイルを作成します。下記のように編集してください。
spark.jars.packages com.amazonaws:aws-java-sdk:1.7.4,org.apache.hadoop:hadoop-aws:2.7.1 # この行を追加してください。
これでSparkの設定はOKです。
それでは、記述したコードを実行したいと思います。
まず、sbtのプロジェクト(SparkExampleApp)のルートディレクトリに移動して、下記のコマンドでjarファイルを作成します。
sbt package
jarファイルはプロジェクト内の「target/scala-2.11/」以下に作成されるはずです。
続けて、前回ダウンロードしたsparkのディレクトリに移動して、下記のコマンドでアプリケーションをローカルで実行します。
./bin/spark-submit --class SparkExampleApp --master local {自分の作成したjarファイルのpath} {S3に配置したdata.csvのパス) {S3の保存先のパス}
例えば下記のようなコマンドになるはずです。
./bin/spark-submit --class SparkExampleApp --master local ~/Desktop/SparkExampleApp/target/scala-2.11/spark-sample-project_2.11-1.0.jar s3n://my-bucket-name/data.csv s3n://my-bucket-name/output.csv
出力されたcsvファイルをプロットしてみると、下記のようになると思います。
ローカルでの起動に成功したら、今度はEMR上でも実行します。
まず、下記、EMRのAWSコンソールヘ移動します(リージョンはTokyoで行います)。
「クラスターを作成」というボタンを押してください。
「クラスターの作成 - クイックオプション」というタイトルのページが表示されたら、下記の項目を入力してください。
最後に画面下部の「クラスターを作成」ボタンを押します。
すると、下記の流れでアプリケーションが実行されます。
S3の指定の場所にcsvが生成されていれば、成功です。
EMRはspark-defaults.confの設定を自動的に行ってくれます。例えばドライバのメモリや、executorの数、awssdkの依存設定などです。そのため、ローカルで行ったような設定は基本的には必要ありません。
必要な際は、クラスター立ち上げ時に詳細オプションで「ソフトウェア設定の編集」という項目で必要に応じて設定を追加することも可能です。とても便利ですね。
以上、駆け足になりましたが、今回は簡単なアプリケーションをEMR上で動かすところまで説明しました。今回はアプリケーションを動かすことにフォーカスしましたが、次回はより実践的な部分に踏み込んでみたいと思いますので、お楽しみに。
Copyright © ITmedia, Inc. All Rights Reserved.