本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
開發人員能夠使用自訂 Java 程式碼來呼叫 Amazon EMR API,然後透過 Amazon EMR 主控台或 CLI 執行相同的操作。本節提供安裝 AWS Toolkit for Eclipse 和執行全功能 Java 原始程式碼範例所需的end-to-end步驟,這些範例會將步驟新增至 Amazon EMR 叢集。
注意
此範例雖著重於 Java,但 Amazon EMR 也推出了一系列的 Amazon EMR 軟體開發套件來支援多種程式語言。如需詳細資訊,請參閱使用軟體開發套件呼叫 Amazon EMR API。
此 Java 原始程式碼範例示範如何使用 Amazon EMR API 執行以下任務:
-
擷取 AWS 憑證並將其傳送至 Amazon EMR 以進行 API 呼叫
-
設定新的自訂步驟與新的預先定義步驟
-
在現有 Amazon EMR 叢集新增步驟
-
從執行中的叢集擷取叢集步驟 ID
注意
此範例將示範如何在現有叢集新增步驟,因此要求您在帳戶中擁有作用中的叢集。
在開始之前,請先安裝符合電腦平台的 Eclipse IDE for Java EE Developers (Eclipse IDE for Java EE Developers) 版本。如需詳細資訊,請前往 Eclipse 下載專區
接著,安裝適用於 Eclipse 的資料庫開發外掛程式。
安裝資料庫開發 Eclipse 外掛程式
-
開啟 Eclipse IDE。
-
選擇 Help (說明),接著選擇 Install New Software (安裝新軟體)。
-
在 Work with: (使用以下路徑:) 欄位中,輸入
http://download.eclipse.org/releases/kepler
或符合 Eclipse IDE 版本編號的路徑。 -
在項目清單中,請選擇 Database Development (資料庫開發),並按一下 Finish (完成)。
-
在提示時重新啟動 Eclipse。
接著安裝 Toolkit for Eclipse,讓有用且預先設定的原始程式碼專案範本可以使用。
若要安裝 Toolkit for Eclipse
-
開啟 Eclipse IDE。
-
選擇 Help (說明),接著選擇 Install New Software (安裝新軟體)。
-
在 Work with: (使用:) 欄位中,輸入
https://aws.amazon.com/eclipse
。 -
在項目清單中,選擇 AWS Toolkit for Eclipse 和完成。
-
在提示時重新啟動 Eclipse。
接著,建立新的 AWS Java 專案並執行範例 Java 原始程式碼。
建立新的 AWS Java 專案
-
開啟 Eclipse IDE。
-
依序選擇 File (檔案)、New (新增),接著選擇 Other (其他)。
-
在選取精靈對話方塊中,選擇 AWS Java 專案,並按一下下一步。
-
在新 AWS Java 專案對話方塊中的
Project name:
欄位中,輸入新專案的名稱,例如EMR-sample-code
。 -
選擇設定 AWS 帳戶...,輸入您的公有和私有存取金鑰,然後選擇完成。如需有關建立存取金鑰的詳細資訊,請參閱 Amazon Web Services 一般參考中的如何取得安全憑證?。
注意
請勿直接在程式碼內嵌存取金鑰。Amazon EMR 軟體開發套件可讓您將存取金鑰放入已知位置,如此一來,就不必將其留在程式碼中。
-
在新的 Java 專案中按一下滑鼠右鍵並選取 src (src) 資料夾,然後選擇 New (新增),再選擇 Class (類別)。
-
在 Java Class (Java 類別) 對話方塊的 Name (名稱) 欄位中,輸入新類別的名稱,例如
main
。 -
在 Which method stubs would you like to create? (您希望建立哪些 Stub 方法?) 區段中,選擇 public static void main(String[] args) (public static void main(String[] args)),然後按一下 Finish (完成)。
-
在新的類別中輸入 Java 來源碼,並為範例內的類別和方法新增適當的 import (匯入) 陳述式。為方便起見,完整的原始程式碼列表如下所示。
注意
在下列範例程式碼中,將範例叢集 ID (JobFlowId) 取代為帳戶中的有效叢集 ID
,可在 中找到, AWS Management Console 或使用下列 AWS CLI 命令:j-xxxxxxxxxxxx
aws emr list-clusters --active | grep "Id"
除此之外,您還需要將範例 Amazon S3 路徑 (
) 替換成 JAR 的有效路徑。最後,將範例類別名稱 (s3://path/to/my/jarfolder
),更換為您 JAR 中正確的類別名稱 (如果適用)。com.my.Main1
import com.amazonaws.AmazonClientException; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduce; import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClientBuilder; import com.amazonaws.services.elasticmapreduce.model.*; import com.amazonaws.services.elasticmapreduce.util.StepFactory; public class Main { public static void main(String[] args) { AWSCredentials credentials_profile = null; try { credentials_profile = new ProfileCredentialsProvider("default").getCredentials(); } catch (Exception e) { throw new AmazonClientException( "Cannot load credentials from .aws/credentials file. " + "Make sure that the credentials file exists and the profile name is specified within it.", e); } AmazonElasticMapReduce emr = AmazonElasticMapReduceClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(credentials_profile)) .withRegion(Regions.US_WEST_1) .build(); // Run a bash script using a predefined step in the StepFactory helper class StepFactory stepFactory = new StepFactory(); StepConfig runBashScript = new StepConfig() .withName("Run a bash script") .withHadoopJarStep(stepFactory.newScriptRunnerStep("s3://jeffgoll/emr-scripts/create_users.sh")) .withActionOnFailure("CONTINUE"); // Run a custom jar file as a step HadoopJarStepConfig hadoopConfig1 = new HadoopJarStepConfig() .withJar("s3://path/to/my/jarfolder") // replace with the location of the jar to run as a step .withMainClass("com.my.Main1") // optional main class, this can be omitted if jar above has a manifest .withArgs("--verbose"); // optional list of arguments to pass to the jar StepConfig myCustomJarStep = new StepConfig("RunHadoopJar", hadoopConfig1); AddJobFlowStepsResult result = emr.addJobFlowSteps(new AddJobFlowStepsRequest() .withJobFlowId("j-xxxxxxxxxxxx") // replace with cluster id to run the steps .withSteps(runBashScript, myCustomJarStep)); System.out.println(result.getStepIds()); } }
-
選擇 Run (執行),然後選擇 Run As (依此執行),最後選取 Java Application (Java 應用程式)。
-
如果該範例正確執行,一份新步驟的 ID 清單會顯示在 Eclipse IDE 主控台視窗。正確輸出類似如下:
[s-39BLQZRJB2E5E, s-1L6A4ZU2SAURC]