Spark 2.0の回帰分析アプリをScalaのSBTで実装し、EMRで実行:Amazon EMRで構築するApache Spark超入門(2)(3/3 ページ)
本連載では、Sparkの概要や、ローカル環境でのSparkのクラスタの構築、Sparkの基本的な概念やプログラミングの方法を説明していきます。今回は、簡単な機械学習のSparkアプリケーションを作成し、Amazon EMRで実行するまでを説明します。
コード実行の前にSparkでS3のファイル読み書きができるように設定
ローカルで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です。
jarファイルの作成とローカルでの実行
それでは、記述したコードを実行したいと思います。
まず、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でクラスターを構築し、Sparkアプリケーションを実行
ローカルでの起動に成功したら、今度はEMR上でも実行します。
まず、下記、EMRのAWSコンソールヘ移動します(リージョンはTokyoで行います)。
「クラスターを作成」というボタンを押してください。
「クラスターの作成 - クイックオプション」というタイトルのページが表示されたら、下記の項目を入力してください。
- クラスター名:自分の覚えやすい名前で
- 起動モード:「ステップ実行」を選ぶ(クラスターとの違いは、アプリケーション実行後に自動終了するかしないか)
- ステップタイプ:「Spark アプリケーション」を選ぶ
- ステップの追加
- 名前:好きな名前を設定
- デプロイモード:「クラスター」を選ぶ
- Spark-submit オプション:--class SparkExampleApp
- アプリケーションの場所:作成したjarファイルをs3にアップロードして、そのパスを指定する
- 引数:「s3n://my-bucket-name/data.csv s3n://my-bucket-name/output.csv」のような感じで、先ほどローカルで行ったときのように指定する
- 失敗時の操作:「クラスターを終了」を選ぶ
- リリース:執筆時点で最新の「emr-5.0.0」を選ぶ
- アプリケーション:「Spark: Spark 2.0.0 on Hadoop 2.7.2 YARN with Ganglia 3.7.2 and Zeppelin 0.6.1」を選ぶ
- インスタンスタイプ:適当なものを選ぶ
- インスタンス数:適当な数を設定する。今回は計算が簡単なので多くなくてよい
- EC2 キーペア:「作成済みの鍵」を選ぶ。WebUIにアクセスする際にポートフォワーディングを行うときに必要になる
- アクセス権限:「デフォルト」を選ぶ
最後に画面下部の「クラスターを作成」ボタンを押します。
すると、下記の流れでアプリケーションが実行されます。
- EC2インスタンスの起動
インスタンスタイプとインスタンス数に応じて起動する - yarnクラスターの構築
EMRはyarnクラスター上でSparkを実行する - Sparkの設定(yarnクラスターの設定や、awssdkなどの設定)
Sparkアプリケーションを実行するのに必要なファイルなどを配置してくれる - jarファイル(Sparkアプリケーション)の実行
spark-submitコマンドがdriverのインスタンス上で実行される
S3の指定の場所にcsvが生成されていれば、成功です。
EMRにおけるSparkの設定
EMRはspark-defaults.confの設定を自動的に行ってくれます。例えばドライバのメモリや、executorの数、awssdkの依存設定などです。そのため、ローカルで行ったような設定は基本的には必要ありません。
必要な際は、クラスター立ち上げ時に詳細オプションで「ソフトウェア設定の編集」という項目で必要に応じて設定を追加することも可能です。とても便利ですね。
次回は、さらにEMRでのSparkの実践的な使い方
以上、駆け足になりましたが、今回は簡単なアプリケーションをEMR上で動かすところまで説明しました。今回はアプリケーションを動かすことにフォーカスしましたが、次回はより実践的な部分に踏み込んでみたいと思いますので、お楽しみに。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 知らないと大損する、Apache Sparkの基礎知識と3つのメリット
社会一般から大きな注目を集めているIoT(Internet of Things)。だが、その具体像はまだ浸透しているとはいえない。今回は、IoTやビッグデータのキーテクノロジとして注目されている「Apache Spark」について、Sparkを製品に取り込んでいる日本IBMの土屋敦氏と、数多くの企業のデータ分析を担うブレインパッドの下田倫大氏に話をうかがった。 - Sparkのエンタープライズ対応が「成熟」――Clouderaが宣言
HadoopディストリビューターもあらためてSparkへの注力をアピール。既に800ノード超のSparkクラスターを運用するユーザーも存在するという。 - Sparkは“誰”に例えられる?──多様化と進化を続ける「Hadoop」、人気急上昇「Spark」
先日、日本Hadoopユーザー会主催のイベントが開催されました。データベースと関係性が深いデータ分散処理プラットフォームである「Hadoop」と「Spark」の最近事情に迫ります。