Spark Application Specifics With Earlier AMI Versions of Amazon EMR - Amazon EMR

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Spark Application Specifics With Earlier AMI Versions of Amazon EMR

Use Spark Interactively or in Batch Mode

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

  • Interactive

  • Batch

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

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

Creating a Cluster with Spark Installed

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

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

  2. [クラスターの作成] を選択します。

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

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

  5. 必要に応じて引数を追加して Spark 設定を変更します。詳細については、「Configure 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);

Configure 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 設定ファイルを使用して、エグゼキュータのリソース割り当てを自動的に最大化する設定が使用できます。詳細については、「Overriding Spark Default Configuration Settings」を参照してください。

Changing Spark Default Settings

次の例は、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

Submit Work to 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);

Overriding Spark Default Configuration Settings

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 プロパティの動的なロード」を参照してください。