Amazon EMR
Amazon EMR リリースガイド

以前の Amazon EMR の AMI バージョンの Spark アプリケーションの仕様。

Spark のインタラクティブな使用またはバッチモードでの使用

Amazon EMR では、Spark アプリケーションを次の 2 つのモードで実行できます。

  • インタラクティブ

  • バッチ

コンソールまたは AWS CLI を使用して長時間稼働クラスターを起動する場合、マスターノードに Hadoop ユーザーとして SSH 接続し、Spark シェルを使用して Spark アプリケーションをインタラクティブに開発したり実行したりすることができます。Spark をインタラクティブに使用すると、Spark アプリケーションのプロトタイプ作成やテストをバッチ環境より簡単に行うことができます。Spark アプリケーションをインタラクティブモードで正常に変更したら、そのアプリケーションの JAR または Python プログラムを、Amazon S3 上のクラスターのマスターノードに対してローカルにあるファイルシステムに配置できます。その後、アプリケーションをバッチワークフローとして送信できます。

バッチモードで、Spark スクリプトを Amazon S3 またはローカルマスターノードファイルシステムにアップロードした後、作業をクラスターにステップとして送信します。Spark ステップは、長時間稼働クラスターまたは一時的なクラスターに送信できます。

Spark がインストールされたクラスターの作成

コンソールを使用し、Spark がインストールされた状態でクラスターを起動するには

  1. Amazon EMR コンソール (https://console.aws.amazon.com/elasticmapreduce/) を開きます。

  2. [Create cluster] を選択します。

  3. [Software Configuration] (ソフトウェア設定) で、必要な AMI リリースバージョンを選択します。

  4. [Applications to be installed] で、リストから [Spark] を選択してから、[Configure and add] を選択します。

  5. 必要に応じて引数を追加して Spark 設定を変更します。詳細については、「Spark の設定」を参照してください。[Add] を選択します。

  6. 必要に応じて他のオプションを選択し、[Create cluster (クラスターの作成)] を選択します。

次の例は、Java を使用した Spark のあるクラスターを作成する方法を示します。

AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); SupportedProductConfig sparkConfig = new SupportedProductConfig() .withName("Spark"); RunJobFlowRequest request = new RunJobFlowRequest() .withName("Spark Cluster") .withAmiVersion("3.11.0") .withNewSupportedProducts(sparkConfig) .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyName") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge") ); RunJobFlowResult result = emr.runJobFlow(request);

Spark の設定

Github の awslabs/emr-bootstrap-actions/spark リポジトリにあるブートストラップアクションを実行してクラスターを作成するときに、Spark を設定します。ブートストラップアクションが受け入れる引数については、そのリポジトリの README を参照してください。ブートストラップアクションは $SPARK_CONF_DIR/spark-defaults.conf ファイルのプロパティを設定します。設定の詳細については、Spark ドキュメントで、Spark 設定トピックを参照してください。http://spark.apache.org/docs/latest/configuration.html の「latest」をインストールする Spark のバージョン番号 (2.2.0 など) に置き換えることができます。

各アプリケーションの送信時に、Spark を動的に設定することもできます。spark 設定ファイルを使用して、エグゼキュータのリソース割り当てを自動的に最大化する設定が使用できます。詳細については、「Spark のデフォルト設定の上書き」を参照してください。

Spark のデフォルト設定の変更

次の例は、AWS CLI で spark.executor.memory を 2G に設定してクラスターを作成する方法を示します。

注記

読みやすくするため、Linux の行連結文字 (\) を含めています。Linux コマンドでは、これらの文字は削除することも、使用することもできます。Windows の場合は、削除するか、キャレット (^) で置き換えます。

aws emr create-cluster --name "Spark cluster" --ami-version 3.11.0 \ --applications Name=Spark, Args=[-d,spark.executor.memory=2G] --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 --use-default-roles

Spark への作業の送信

作業をクラスターに送信するには、ステップを使用して EMR クラスターで spark-submit スクリプトを実行します。AmazonElasticMapReduceClientaddJobFlowSteps メソッドを使用してステップを追加します。

AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); StepFactory stepFactory = new StepFactory(); AddJobFlowStepsRequest req = new AddJobFlowStepsRequest(); req.withJobFlowId("j-1K48XXXXXXHCB"); List<StepConfig> stepConfigs = new ArrayList<StepConfig>(); StepConfig sparkStep = new StepConfig() .withName("Spark Step") .withActionOnFailure("CONTINUE") .withHadoopJarStep(stepFactory.newScriptRunnerStep("/home/hadoop/spark/bin/spark-submit","--class","org.apache.spark.examples.SparkPi","/home/hadoop/spark/lib/spark-examples-1.3.1-hadoop2.4.0.jar","10")); stepConfigs.add(sparkStep); req.withSteps(stepConfigs); AddJobFlowStepsResult result = emr.addJobFlowSteps(req);

Spark のデフォルト設定の上書き

Spark のデフォルト設定値をアプリケーションごとに上書きすることができます。これは、ステップを使用してアプリケーションを送信するとき (原則としてオプションが spark-submit に渡されます) に行うことができます。たとえば、spark.executor.memory を変更することで、実行プログラムのプロセスに割り当てられたメモリを変更することができます。次のような引数を含む --executor-memory スイッチを指定できます。

/home/hadoop/spark/bin/spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10

同様に、--executor-cores--driver-memory を調整できます。ステップでは、次の引数をステップに指定できます。

--executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10

さらに、--conf オプションを使用して、組み込みスイッチがない設定を調整することもできます。調整可能な他の設定の詳細については、Apache Spark ドキュメントの「Spark プロパティの動的なロード」を参照してください。