在建立叢集時設定應用程式
在建立叢集時,您可以使用 Amazon EMR 主控台、AWS Command Line Interface (AWS CLI) 或 AWS SDK 覆寫應用程式的預設組態。
若要覆寫應用程式的預設組態,請在組態分類中指定自訂值。組態分類會對應至應用程式的組態 XML 檔案,例如 hive-site.xml
。
組態分類隨 Amazon EMR 發行版本而有所不同。如需特定發行版本中可用的組態分類清單,請參閱版本詳細資訊頁面。例如,Amazon EMR 6.4.0 版。
在建立叢集時於主控台中提供組態
若要提供組態,可前往 Create cluster (建立叢集) 頁面,並選擇 Edit software settings (編輯軟體設定)。接著,您可以使用 JSON 或陰影文字中示範的速記語法,直接在主控台中輸入組態。否則,您可以使用 JSON Configurations
物件來提供檔案的 Amazon S3 URI。
若要提供執行個體群組的組態,可前往 Hardware Configuration (硬體組態) 頁面。在節點類型資料表中的執行個體類型資料欄下,選擇編輯每個執行個體群組的應用程式的組態。
在建立叢集時使用 AWS CLI 提供組態
如需提供 create-cluster 的組態,請輸入儲存在本機或 Amazon S3 中的 JSON 檔案路徑。下列範例假設您使用 Amazon EMR 的預設角色,且角色已建立。如果您需要建立角色,請先執行 aws emr create-default-roles
。
如果您的組態位於本機目錄中,可以使用下列範例命令。
aws emr create-cluster --use-default-roles --release-label
emr-5.36.1
--applications Name=Hive \ --instance-type m5.xlarge --instance-count 3 --configurations file://./configurations.json
如果您的組態在 Amazon S3 路徑中,您需要先設定下列解決方法,然後才能將 Amazon S3 路徑傳遞至 create-cluster
命令。
#!/bin/sh # Assume the ConfigurationS3Path is not public, and its present in the same AWS account as the EMR cluster ConfigurationS3Path="s3://my-bucket/config.json" # Get a presigned HTTP URL for the s3Path ConfigurationURL=`aws s3 presign $ConfigurationS3Path --expires-in 300` # Fetch the presigned URL, and minify the JSON so that it spans only a single line Configurations=`curl $ConfigurationURL | jq -c .` aws emr create-cluster --use-default-roles --release-label emr-5.34.0 --instance-type m5.xlarge --instance-count 2 --applications Name=Hadoop Name=Spark --configurations $Configurations
在建立叢集時使用 Java SDK 提供組態
下列程式摘錄顯示如何使用 AWS SDK for Java 提供組態。
Application hive = new Application().withName("Hive"); Map<String,String> hiveProperties = new HashMap<String,String>(); hiveProperties.put("hive.join.emit.interval","1000"); hiveProperties.put("hive.merge.mapfiles","true"); Configuration myHiveConfig = new Configuration() .withClassification("hive-site") .withProperties(hiveProperties); RunJobFlowRequest request = new RunJobFlowRequest() .withName("Create cluster with ReleaseLabel") .withReleaseLabel("emr-5.20.0") .withApplications(hive) .withConfigurations(myHiveConfig) .withServiceRole("EMR_DefaultRole") .withJobFlowRole("EMR_EC2_DefaultRole") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myEc2Key") .withInstanceCount(3) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m4.large") .withSlaveInstanceType("m4.large") );