Exemplo completo de código-fonte Java para o Amazon EMR
Os desenvolvedores podem chamar a API do Amazon EMR usando código Java personalizado para fazer as mesmas coisas que fariam com o console ou com a CLI do Amazon EMR. Esta seção fornece as etapas completas necessárias para a instalação do AWS Toolkit for Eclipse e para a execução de um exemplo de código-fonte Java totalmente funcional que adiciona etapas a um cluster do Amazon EMR.
nota
Este exemplo se concentra em Java, mas o Amazon EMR também oferece suporte a diversas linguagens de programação com uma coleção de SDKs do Amazon EMR. Para obter mais informações, consulte Uso de SDKs para chamar APIs do Amazon EMR.
Este exemplo de código-fonte Java demonstra como executar as seguintes tarefas usando a API do Amazon EMR:
-
Recuperar credenciais da AWS e enviá-las ao Amazon EMR para fazer chamadas de API
-
Configurar uma nova etapa personalizada e uma nova etapa predefinida
-
Adicionar novas etapas a um cluster existente do Amazon EMR
-
Recuperar os IDs das etapas de um cluster em execução
nota
Este exemplo demonstra como adicionar etapas a um cluster existente e, portanto, requer um cluster ativo na sua conta.
Antes de começar, instale a versão do Eclipse IDE for Java EE Developers (Eclipse IDE para desenvolvedores de Java EE) que corresponda a sua plataforma do computador. Para obter mais informações, acesse a página de downloads do Eclipse
Em seguida, instale o plug-in de desenvolvimento de banco de dados para o Eclipse.
Instalar o plug-in de desenvolvimento de banco de dados para o Eclipse
-
Abra o Eclipse IDE.
-
Escolha Help (Ajuda) e Install New Software (Instalar novo software).
-
No campo Work with: (Trabalhar com:), digite
http://download.eclipse.org/releases/kepler
ou o caminho que corresponda ao número da versão do seu Eclipse IDE. -
Na lista de itens, escolha Database Development (Desenvolvimento de banco de dados) e Finish (Concluir).
-
Reinicie o Eclipse quando solicitado.
Em seguida, instale o kit de ferramentas para Eclipse a fim de disponibilizar os modelos de projeto de código-fonte úteis e configurados previamente.
Instalar o kit de ferramentas para Eclipse
-
Abra o Eclipse IDE.
-
Escolha Help (Ajuda) e Install New Software (Instalar novo software).
-
No campo Work with: (Trabalhar com:), digite
https://aws.amazon.com/eclipse
. -
Na lista de itens, escolha AWS Toolkit for Eclipse e Finish.
-
Reinicie o Eclipse quando solicitado.
Em seguida, crie um novo projeto da AWS em Java e execute o código-fonte Java de exemplo.
Criar um novo projeto da AWS em Java
-
Abra o Eclipse IDE.
-
Escolha File (Arquivo), New (Novo) e Other (Outros).
-
Na caixa de diálogo Select a wizard, escolha AWS Java Project e Next.
-
Na caixa de diálogo New AWS Java Project, no campo
Project name:
, insira o nome do seu novo projeto, por exemplo,EMR-sample-code
. -
Escolha Configure AWS accounts…, insira suas chaves de acesso públicas e privadas e clique em Finish. Para obter mais informações sobre a criação de chaves de acesso, consulte How do I get security credentials? na Referência geral da Amazon Web Services.
nota
Você não deve incorporar chaves de acesso diretamente no código. O SDK do Amazon EMR permite colocar as chaves de acesso em locais conhecidos para que você não precise mantê-las em código.
-
No novo projeto Java, clique com o botão direito do mouse na pasta src e, em seguida, escolha New (Novo) e Class (Classe).
-
Na caixa de diálogo Java Class (Classe Java), no campo Name (Nome), insira um nome para sua nova classe, por exemplo,
main
. -
Na seção Which method stubs would you like to create? (Quais stubs de método você gostaria de criar?) escolha public static void main (String [] args) e Finish (Concluir).
-
Insira o código-fonte em Java dentro de sua nova classe e adicione as declarações adequadas de import (importação)para as classes e métodos no exemplo. Para sua conveniência, a listagem do código-fonte completo é mostrada abaixo.
nota
No código de exemplo a seguir, substitua o ID do cluster de exemplo (JobFlowId),
, por um ID do cluster válido em sua conta, que é encontrado no AWS Management Console ou ao usar o seguinte comando da AWS CLI:j-xxxxxxxxxxxx
aws emr list-clusters --active | grep "Id"
Além disso, substitua o caminho de exemplo do Amazon S3,
, pelo caminho válido para o seu JAR. Por fim, substitua o nome da classe do exemplo,s3://path/to/my/jarfolder
, pelo nome correto da classe em seu JAR, se aplicável.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()); } }
-
Escolha Run (Executar), Run As (Executar como) e Java Application (Aplicativo Java).
-
Se o exemplo for executado corretamente, uma lista de IDs para as novas etapas aparece na janela do console do Eclipse IDE. A saída correta é semelhante à seguinte:
[s-39BLQZRJB2E5E, s-1L6A4ZU2SAURC]