使用早期AMI版本的 Amazon Spark 應用程式細節 EMR - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用早期AMI版本的 Amazon Spark 應用程式細節 EMR

以互動方式或以批次模式使用 Spark

Amazon EMR 使您能夠以兩種模式運行 Spark 應用程序:

  • 互動性

  • 批次

當您使用主控台或啟動長時間執行叢集時 AWS CLI,您可以使用 Hadoop 使用者身分連線SSH到主節點,並使用 Spark 殼層以互動方式開發和執行您的 Spark 應用程式。以互動方式使用 Spark 可讓您以較在批次環境中更輕鬆的方式來原型或測試 Spark 應用程式。在互動模式中成功修訂 Spark 應用程式後,您可以將該應用程式JAR或 Python 程式置於 Amazon S3 上叢集主節點的本機檔案系統中。然後,您可以批次工作流程的方式提交應用程式。

在批次模式中,您會將 Spark 指令碼上傳至 Amazon S3 或本機主節點檔案系統,然後將工作提交到叢集作為一步驟。您可以將 Spark 步驟提交到長時間執行的叢集或暫時性叢集。

使用安裝的 Spark 建立叢集

使用主控台並透過安裝好的 Spark 來啟動叢集
  1. 導覽至新的 Amazon EMR 主控台,然後從側邊導覽選取「切換至舊主控台」。如需有關切換至舊主控台時預期情況的詳細資訊,請參閱使用舊主控台

  2. 選擇建立叢集

  3. 對於「軟體組態」,請選擇您需要的AMI發行版本。

  4. 對於 Applications to be installed (要安裝的應用程式),從清單中選擇 Spark (Spark),然後選擇 Configure and add (設定和新增)

  5. 新增引數來視需要變更 Spark 組態。如需詳細資訊,請參閱設定 Spark。選擇新增

  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 組態主題。您可以將下列URL中的「latest」取代為您要安裝的 Spark 版本號碼,例如,2.2.0http://spark.apache.org/docs/latest/configuration.html

您也可以在每個應用程式提交時動態設定 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指令碼。使用以下addJobFlowSteps方法新增步驟 AmazonElasticMapReduceClient

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 屬性主題。