本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用早期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 來啟動叢集
以下範例說明如何使用 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$SPARK_CONF_DIR/spark-defaults.conf
檔案中設定屬性。如需設定的詳細資訊,請參閱 Spark 文件中的 Spark 組態主題。您可以將下列URL中的「latest」取代為您要安裝的 Spark 版本號碼,例如,2.2.0
http://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 屬性