AWSのEMRを利用して、Apach Spark環境を作成してみます。EMRのバージョンは、5.14.0です。
EC2キーペアの用意
EMRで作成されたEC2で利用する、EC2キーペアを用意しておきます。
EMRでクラスタ作成
advanced optionsを選択
AWSコンソールのEMRコンソールに移動して、 Create cluster
をクリック。 クラスタ作成画面にて、 Go to advanced options
をクリック。
EMRで作成するソフトウェア環境の定義
Software Configuration
で、HadoopとSparkを選択。
今回はPython3系にてPySparkを起動させたいため、software settings
にて、以下のjsonを入力しています。
[ { "Classification": "spark-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "PYSPARK_PYTHON": "/usr/bin/python3" } } ], "Properties": {} } ]
初期構築時にSparkの設定を入れるには、このプロセス時に設定ファイルであるjsonを定義しておく必要があります。
jsonのテンプレートはこちらを参考。
PySparkの場合、与えられるパラメータは下記マニュアルに記載されています。これをjson定義ファイルの Configurations
の Properties
の中に記載してあげます。今回は、Pythonバイナリファイルのパス定義として、Python3系のパスに指定しています。
Configuration - Spark 2.3.1 Documentation
Add steps
の項目では、クラスターが起動時に自動実行する(spark-submitで動かしたい)Sparkプログラムを定義できます。
EMRクラスターの設定
EMRクラスターを構成する、EC2のリソース設定をします。Spark環境の場合、Yarnクラスターマネージャとなるマスターノードと、Executor実行環境であるコアノードを作成します。作成方法は、以下2つの方法から選択できます。
以下の画面は、インスタンス・フリートにて作成している画面です。
クラスターの設定オプション
設定オプションを定義する部分です。
EMRFS consistent view
とは、EMRFSを利用する場合にs3の結果整合性の問題を回避してくれるビューらしいです。Hadoop側の更新処理とs3側のファイル更新処理の整合性を担保してくれるとのこと。Spark環境では不要ですね。
Bootstrap Action
では、クラスタ初期起動時に実行してくれるスクリプト定義できます。EC2のユーザーデータみたいなもの。
クラスターのセキュリティ設定
必要なセキュリティ設定を実施します。EMR用に作成されたEC2には、デフォルトでは以下定義のセキュリティグループが付与されます。
Amazon EMR マネージドセキュリティグループを使用する - Amazon EMR
で、処理を進めていけば、設定されたEMRクラスターであるEC2が起動してきます。
接続方法
クラスターのマスターノードに接続
実際にマスターノードに接続して、PySparkを起動してみます。マスターノードへSSH接続を行います。セキュリティグループにて、必要なポートが開放されていない場合、ちゃんと設定をしてあげます。
接続してみると、こんな感じ。ちゃんとPython3系でPySparkが起動しています。
Last login: Sat Jun 30 15:18:23 2018 __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/ 9 package(s) needed for security, out of 14 available Run "sudo yum update" to apply all updates. EEEEEEEEEEEEEEEEEEEE MMMMMMMM MMMMMMMM RRRRRRRRRRRRRRR E::::::::::::::::::E M:::::::M M:::::::M R::::::::::::::R EE:::::EEEEEEEEE:::E M::::::::M M::::::::M R:::::RRRRRR:::::R E::::E EEEEE M:::::::::M M:::::::::M RR::::R R::::R E::::E M::::::M:::M M:::M::::::M R:::R R::::R E:::::EEEEEEEEEE M:::::M M:::M M:::M M:::::M R:::RRRRRR:::::R E::::::::::::::E M:::::M M:::M:::M M:::::M R:::::::::::RR E:::::EEEEEEEEEE M:::::M M:::::M M:::::M R:::RRRRRR::::R E::::E M:::::M M:::M M:::::M R:::R R::::R E::::E EEEEE M:::::M MMM M:::::M R:::R R::::R EE:::::EEEEEEEE::::E M:::::M M:::::M R:::R R::::R E::::::::::::::::::E M:::::M M:::::M RR::::R R::::R EEEEEEEEEEEEEEEEEEEE MMMMMMM MMMMMMM RRRRRRR RRRRRR [hadoop@ip-172-31-53-151 ~]$ pyspark Python 3.4.8 (default, Apr 25 2018, 23:50:36) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux Type "help", "copyright", "credits" or "license" for more information. Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 18/06/30 15:19:50 WARN Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME. Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /__ / .__/\_,_/_/ /_/\_\ version 2.3.0 /_/ Using Python version 3.4.8 (default, Apr 25 2018 23:50:36) SparkSession available as 'spark'.
WEB管理コンソールへの接続
Hadoop側で提供している各種webコンソールも利用できます。アクセスする方法は、AWSコンソールのEMR画面より、作成したクラスター環境をたどると、リンクが表示されています。
Sparkのwebコンソールはこちら。マスターノードの18080ポートになります。必要である場合、セキュリティグループの設定変更を。
Yarnのwebコンソールはこちら。マスターノードの8088ポートになります。こちらも必要である場合、セキュリティグループの設定変更を。
各webコンソールで利用されるポート情報は下記です。
Amazon EMR クラスターでホストされているウェブサイトの表示 - Amazon EMR
お手軽ですね。