エンドツーエンド Amazon EMR Java ソースコード例 - Amazon EMR

エンドツーエンド Amazon EMR Java ソースコード例

開発者は、カスタム Java コードを使用して Amazon EMR API を呼び出し、Amazon EMR コンソールまたは CLI で可能なことと同じことを実行できます。このセクションでは、AWS Toolkit for Eclipse をインストールし、Amazon EMR クラスターにステップを追加する完全な機能を持つ Java ソースコード例を実行するために必要な、エンドツーエンドのステップを説明します。

注記

この例では Java に焦点を当てますが、Amazon EMR も Amazon EMR SDK のコレクションにより複数のプログラミング言語をサポートします。詳細については、「SDK を使用して Amazon EMR API を呼び出す」を参照してください。

この Java ソースコード例は、Amazon EMR API を使用して以下のタスクを実行する方法を示しています。

  • AWS 認証情報を取得し、API コールを行うために Amazon EMR に送信する

  • 新しいカスタムステップと事前定義されたステップを設定する

  • 既存の Amazon EMR クラスターに新しいステップを追加する

  • 実行中のクラスターからクラスターステップ ID を取得する

注記

このサンプルは、既存のクラスターにステップを追加する方法を示すので、アカウントにアクティブなクラスターがある必要があります。

開始する前に、コンピューターのプラットフォームに適合するバージョンの Eclipse IDE for Java EE Developers をインストールします。詳細については、「Eclipse のダウンロード」を参照してください。

次に、Eclipse 用 Database Development プラグインをインストールします。

Database Development Eclipse プラグインをインストールする
  1. Eclipse IDE を開きます。

  2. [Help (ヘルプ)] を選択し、[Install New Software (新しいソフトウェアのインストール)] をクリックします。

  3. [Work with: (使用場所:)] フィールドに「http://download.eclipse.org/releases/kepler」または Eclipse IDE のバージョン番号と一致するパスを入力します。

  4. 項目リストで、[Database Development (データベースの開発)] を選択し、[Finish (完了)] をクリックします。

  5. 指示が表示されたら、Eclipse を再起動します。

次に、Toolkit for Eclipse をインストールして、役立つように事前設定されたソースコードプロジェクトテンプレートを利用できるようにします。

Toolkit for Eclipse をインストールする
  1. Eclipse IDE を開きます。

  2. [Help (ヘルプ)] を選択し、[Install New Software (新しいソフトウェアのインストール)] をクリックします。

  3. [Work with:] フィールドに「https://aws.amazon.com/eclipse」と入力します。

  4. アイテムリストで、[AWS Toolkit for Eclipse] を選択し、[完了] を選択します。

  5. 指示が表示されたら、Eclipse を再起動します。

次に、新しい AWS Java プロジェクトを作成し、サンプル Java ソースコードを実行します。

新しい AWS Java プロジェクトを作成する
  1. Eclipse IDE を開きます。

  2. [File (ファイル)]、[New (新規)]、[Other (その他)] の順に選択します。

  3. [ウィザードの選択] ダイアログで、[AWS Java プロジェクト] を選択し、[次へ] をクリックします。

  4. [新しい AWS Java プロジェクト] ダイアログの [Project name:] フィールドに、新しいプロジェクトの名前を入力します (例: EMR-sample-code)。

  5. [AWS アカウントの設定…] を選択して、パブリックアクセスキーおよびプライベートアクセスキーを入力し、[完了] をクリックします。アクセスキーの作成の詳細については、「Amazon Web Services 全般のリファレンスガイド」の「セキュリティ認証情報の取得方法」を参照してください。

    注記

    コードに直接アクセスキーを埋め込むことはできません。Amazon EMR SDK では、既知のロケーションにアクセスキーを配置できるため、コードで保持する必要はありません。

  6. 新しい Java プロジェクトで、src フォルダを右クリックし、[New (新規)]、[Class (クラス)] の順にクリックします。

  7. [Java Class (Java クラス)] ダイアログの [Name (名前)] フィールドに新しいクラスの名前を入力します (例: main)。

  8. [Which method stubs would you like to create? (どのメソッドスタブを作成しますか?)] セクションで、[public static void main(String[]args)] を選択し、[Finish (完了)] をクリックします。

  9. 新しいクラス内に Java ソースコードを入力し、サンプルのクラスと方法に適切な import ステートメントを追加します。参考までに、完全なソースコードのリストを下に示します。

    注記

    下のサンプルコードでは、例として示されているクラスター ID (JobFlowId) j-xxxxxxxxxxxx を、アカウント内の有効なクラスター ID に置き換えてください。この値は、AWS Management Console または次の AWS CLI コマンドを使用して確認できます。

    aws emr list-clusters --active | grep "Id"

    また、例の Amazon S3 パス (s3://path/to/my/jarfolder) を JAR への有効なパスで置き換えます。最後に、例のクラス名 (com.my.Main1) を JAR にあるクラスの正しい名前で置き換えます (該当する場合)。

    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()); } }
  10. [Run (実行)]、[Run As (実行)]、[Java Application (Java アプリケーション)] の順にクリックします。

  11. サンプルが正しく実行される場合、新しいステップの ID のリストが Eclipse IDE コンソールウィンドウに表示されます。正しい出力は次の例のようになります。

    [s-39BLQZRJB2E5E, s-1L6A4ZU2SAURC]