

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Criar ou executar uma aplicação Hadoop
<a name="emr-hadoop-application"></a>

**Topics**
+ [Criar binários usando o Amazon EMR](emr-build-binaries.md)
+ [Processamento de dados com streaming](UseCase_Streaming.md)
+ [Processar dados com um JAR personalizado](UseCase_CustomJar.md)

# Criar binários usando o Amazon EMR
<a name="emr-build-binaries"></a>

Você pode usar o Amazon EMR como um ambiente de criação para compilar programas que serão usados no cluster. Os programas que você usa com o Amazon EMR devem ser compilados em um sistema que executa a mesma versão do Linux usada pelo Amazon EMR. Para uma versão de 32 bits, você deve compilar em uma máquina de 32 bits ou em uma máquina com as opções de compilação cruzada de 32 bits ativadas. Para uma versão de 64 bits, você deve compilar em uma máquina de 64 bits ou em uma máquina com as opções de compilação cruzada de 64 bits ativadas. Para obter mais informações sobre versões de instâncias do EC2, consulte [Planejar e configurar instâncias do EC2](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-ec2-instances.html) no *Guia de gerenciamento do Amazon EMR*. As linguagens de programação compatíveis incluem C\$1\$1, Python e C\$1. 

A tabela a seguir descreve as etapas envolvidas na criação e no teste da sua aplicação usando o Amazon EMR.


**Processo para a criação de um módulo**  

|  |  | 
| --- |--- |
|  1 |  Conecte-se ao nó principal do seu cluster. | 
|  2  |  Copie os arquivos de código-fonte para o nó principal. | 
|  3  |  Crie os arquivos binários com as otimizações necessárias. | 
|  4 |  Copie os arquivos binários do nó principal para o Amazon S3. | 

Os detalhes de cada uma dessas etapas são abordados nas seções a seguir. 

**Para se conectar ao nó principal do cluster**
+ Siga as instruções em [Conectar-se ao nó principal usando SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) no *Guia de gerenciamento do Amazon EMR*.

**Para copiar os arquivos de código-fonte para o nó principal**

1. Coloque os arquivos de origem em um bucket do Amazon S3. Para aprender como criar buckets e como transferir dados para o Amazon S3, consulte o [Guia do usuário do Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/).

1. Crie uma pasta no cluster do Hadoop para seus arquivos de código-fonte digitando um comando semelhante ao seguinte:

   ```
   mkdir SourceFiles
   ```

1. Copie os arquivos de origem do Amazon S3 para o nó principal digitando um comando semelhante ao seguinte:

   ```
   hadoop fs -get s3://amzn-s3-demo-bucket/SourceFiles SourceFiles
   ```

**Crie os arquivos binários com as otimizações necessárias**  
Como você cria seus arquivos binários depende de vários fatores. Siga as instruções específicas das suas ferramentas de criação para instalar e configurar seu ambiente. Você pode usar os comandos de especificação do sistema do Hadoop para obter as informações do cluster que vão determinar como instalar o seu ambiente de criação.

**Para identificar as especificações do sistema**
+ Use os comandos a seguir para verificar a arquitetura que você está usando para criar seus arquivos binários.

  1. Para visualizar a versão do Debian, insira o seguinte comando:

     ```
     master$ cat /etc/issue
     ```

     A saída será semelhante à seguinte.

     ```
     Debian GNU/Linux 5.0
     ```

  1. Para visualizar o nome DNS público e o tamanho do processador, insira o seguinte comando:

     ```
     master$ uname -a
     ```

     A saída será semelhante à seguinte.

     ```
     Linux domU-12-31-39-17-29-39.compute-1.internal 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:34:28 EST 2008 x86_64 GNU/Linux
     ```

  1. Para visualizar a velocidade do processador, insira o seguinte comando:

     ```
     master$ cat /proc/cpuinfo
     ```

     A saída será semelhante à seguinte.

     ```
     processor : 0
     vendor_id : GenuineIntel
     model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz
     flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr cda lahf_lm
     ...
     ```

Após a criação dos binários, você pode copiar os arquivos para o Amazon S3.

**Copiar os binários do nó principal para o Amazon S3**
+ Digite o comando a seguir para copiar os binários para o bucket do Amazon S3:

  ```
  hadoop fs -put BinaryFiles s3://amzn-s3-demo-bucket/BinaryDestination
  ```

# Processamento de dados com streaming
<a name="UseCase_Streaming"></a>

O streaming do Hadoop é um utilitário que vem com o Hadoop que permite desenvolver MapReduce executáveis em linguagens diferentes de Java. O Streaming é implementado como um arquivo JAR para que você possa executá-lo a na API do Amazon EMR ou na linha de comando, da mesma forma que executa um arquivo JAR padrão. 

Esta seção descreve como usar streaming com o Amazon EMR. 

**nota**  
O Apache Hadoop Streaming é uma ferramenta independente. Assim sendo, não descreveremos suas funções e parâmetros aqui. [Para obter mais informações sobre o streaming do Hadoop, acesse http://hadoop.apache. org/docs/stable/hadoop-streaming/HadoopStreaming.html](http://hadoop.apache.org/docs/stable/hadoop-streaming/HadoopStreaming.html).

## Utilização do utilitário Hadoop Streaming
<a name="HadoopStreamCommands"></a>

Esta seção descreve como usar o utilitário Hadoop Streaming.


**Processo do Hadoop**  

|  |  | 
| --- |--- |
| 1 |  Escreva os programas executáveis do mapeador e do reducer na linguagem de programação de sua escolha. Siga as instruções na documentação do Hadoop para escrever seus executáveis de streaming. Os programas devem ler os dados de entrada de uma entrada padrão e escrever os dados de saída em uma saída padrão. Por padrão, cada linha de entrada/saída representa um registro e o primeiro caractere de tabulação em cada linha é usado como um separador entre a chave e o valor.  | 
| 2 |  Teste os executáveis localmente e carregue-os para o Amazon S3.  | 
| 3 |  Use a interface da linha de comando do Amazon EMR ou o console do Amazon EMR para executar a aplicação.  | 

Um script de mapeador é executado como um processo separado no cluster. Um executável do reducer transforma a saída de um executável do mapeador em uma saída de dados do fluxo de trabalho.

Os parâmetros `input`, `output`, `mapper` e `reducer` são necessários na maioria das aplicações de streaming. A tabela a seguir descreve esses e outros parâmetros opcionais.


| Parâmetro | Description | Obrigatório | 
| --- | --- | --- | 
| -input |  Local dos dados de entrada no Amazon S3. Tipo: string Padrão: nenhum Restrição: URI. Se não há protocolo especificado, ele usa o sistema de arquivos padrão do cluster.   | Sim | 
| -output |  Local onde o Amazon EMR carrega os dados processados no Amazon S3. Tipo: string Padrão: nenhum Restrição: URI Padrão: se não há um local especificado, o Amazon EMR carrega os dados no local especificado pela `input`.  | Sim | 
| -mapper |  Nome do executável do mapeador. Tipo: string Padrão: nenhum  | Sim | 
| -reducer |  Nome do executável do reducer. Tipo: string Padrão: nenhum  | Sim | 
| -cacheFile |  Um local no Amazon S3 que contém os arquivos que o Hadoop vai copiar para o diretório de trabalho local (com o objetivo principal de melhorar a performance). Tipo: string Padrão: nenhum Restrições: [URI]\$1[nome do symlink a ser criado no diretório de trabalho]   | Não | 
| -cacheArchive |  Arquivo JAR a ser extraído e colocado no diretório de trabalho Tipo: string Padrão: nenhum Restrições: [URI]\$1[nome do diretório do symlink a ser criado no diretório de trabalho]   | Não | 
| -combiner |  Combina os resultados Tipo: string Padrão: nenhum Restrições: nome da classe Java  | Não | 

O código de exemplo a seguir é um executável do mapeador escrito em Python. Esse script faz parte do aplicativo WordCount de amostra.

```
 1. #!/usr/bin/python
 2. import sys
 3. 
 4. def main(argv):
 5.   line = sys.stdin.readline()
 6.   try:
 7.     while line:
 8.       line = line.rstrip()
 9.       words = line.split()
10.       for word in words:
11.         print "LongValueSum:" + word + "\t" + "1"
12.       line = sys.stdin.readline()
13.   except "end of file":
14.     return None
15. if __name__ == "__main__":
16.   main(sys.argv)
```

# Enviar uma etapa de streaming
<a name="CLI_CreateStreaming"></a>

Esta seção aborda os conceitos básicos do envio de uma etapa de streaming para um cluster. Uma aplicação de streaming lê os dados de entrada de uma entrada padrão e, em seguida, executa um script ou executável (denominado mapeador) para cada entrada. Os resultados obtidos de cada entrada são salvos localmente, normalmente em uma partição do Hadoop Distributed File System (HDFS). Depois que todas as entradas são processadas pelo mapeador, um segundo script ou programa executável (chamado de reducer) processa os resultados do mapeador. Os resultados do reducer são enviados para a saída padrão. Você pode encadear uma série de etapas de streaming, em que a saída de uma etapa se torna a entrada de outra etapa. 

O mapeador e o reducer podem ser referenciados como arquivos ou você pode fornecer uma classe Java. Você pode implementar o mapeador e o reducer em qualquer uma das linguagens compatíveis, incluindo Ruby, Perl, Python, PHP ou Bash.

## Enviar uma etapa de streaming usando o console
<a name="emr-dev-create-stream-console"></a>

Este exemplo descreve como usar o console do Amazon EMR para enviar uma etapa de streaming para um cluster em execução.

**Enviar uma etapa de streaming**

1. [Abra o console do Amazon EMR em https://console.aws.amazon.com /emr.](https://console.aws.amazon.com/emr/)

1. Em **Cluster List (Lista de clusters)**, selecione o nome do cluster.

1. Role até a seção **Steps (Etapas)** e expanda-a. Em seguida, escolha **Add step (Adicionar etapa)**.

1. Na caixa de diálogo **Add Step (Adicionar etapa)**:
   + Em **Step type (Tipo de etapa)**, escolha **Streaming program (Programa de streaming)**.
   + Em **Name (Nome)**, aceite o nome padrão (programa Streaming) ou digite um novo nome.
   + Em **Mapper**, digite ou navegue até o local da classe do mapeador no Hadoop ou de um bucket do S3, onde se encontra o executável do mapeador como, por exemplo um programa Python. O valor do caminho deve estar no formato*BucketName*/*path*/*MapperExecutable*.
   + Em **Reducer (Redutor)**, digite ou navegue até o local da classe do reducer no Hadoop ou de um bucket do S3 onde se encontra o executável do reducer, por exemplo um programa Python. O valor do caminho deve estar no formato*BucketName*/*path*/*MapperExecutable*. O Amazon EMR é compatível com a palavra-chave especial *aggregate*. Para obter mais informações, acesse a biblioteca Aggregate fornecida pelo Hadoop.
   + Em **Input S3 location (Localização do S3 de entrada)**, digite ou navegue até o local dos dados de entrada. 
   + Em **Local de saída do S3**, digite ou navegue até o nome do bucket de saída do Amazon S3.
   + Para **Arguments (Argumentos)**, deixe o campo em branco.
   + Para **Action on failure (Ação na falha)**, aceite a opção padrão **Continue (Continuar)**.

1. Escolha **Adicionar**. A etapa é exibida no console com o status Pendente. 

1. O status da etapa muda de Pending (Pendente) para Running (Em execução) e depois para Completed (Concluído) conforme ela é executada. Para atualizar o status, escolha o ícone **Refresh (Atualizar)** acima da coluna Actions (Ações). 

## AWS CLI
<a name="emr-dev-create-stream-cli"></a>

Esses exemplos demonstram como usar o AWS CLI para criar um cluster e enviar uma etapa de streaming. 

**Para criar um cluster e enviar uma etapa de streaming usando o AWS CLI**
+ Para criar um cluster e enviar uma etapa de streaming usando o AWS CLI, digite o comando a seguir e *myKey* substitua pelo nome do seu par de chaves do EC2. Observe que o argumento para `--files` deve ser o caminho do Amazon S3 para o local do script e os argumentos para `-mapper` e `-reducer` devem ser os nomes dos respectivos arquivos de script.

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
  --steps Type=STREAMING,Name="Streaming Program",ActionOnFailure=CONTINUE,Args=[--files,pathtoscripts,-mapper,mapperscript,-reducer,reducerscript,aggregate,-input,pathtoinputdata,-output,pathtooutputbucket]
  ```
**nota**  
Os caracteres de continuação de linha do Linux (\$1) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados ​​em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).

  Quando você especifica a contagem de instâncias sem usar o parâmetro `--instance-groups`, um único nó principal é executado, e as instâncias restantes são executadas como nós core. Todos os nós usam o tipo de instância especificado no comando.
**nota**  
Se você não tiver criado o perfil de serviço padrão do Amazon EMR e o perfil de instância do EC2, digite aws `emr create-default-roles` para criá-los antes de digitar o subcomando `create-cluster`.

  Para obter mais informações sobre o uso dos comandos do Amazon EMR no AWS CLI, consulte. [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)

# Processar dados com um JAR personalizado
<a name="UseCase_CustomJar"></a>

Um JAR personalizado executa um programa Java compilado que você pode carregar no Amazon S3. Você deve compilar o programa com base na versão do Hadoop que você deseja iniciar e enviar uma etapa `CUSTOM_JAR` ao cluster do Amazon EMR. Para obter mais informações sobre como compilar um arquivo JAR, consulte [Criar binários usando o Amazon EMR](emr-build-binaries.md).

Para obter mais informações sobre a criação de um MapReduce aplicativo Hadoop, consulte o [MapReduce Tutorial](http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) na documentação do Apache Hadoop.

**Topics**
+ [Enviar uma etapa de JAR personalizado](emr-launch-custom-jar-cli.md)

# Enviar uma etapa de JAR personalizado
<a name="emr-launch-custom-jar-cli"></a>

Um JAR personalizado executa um programa Java compilado que você pode carregar no Amazon S3. Você deve compilar o programa com base na versão do Hadoop que você deseja iniciar e enviar uma etapa `CUSTOM_JAR` ao cluster do Amazon EMR. Para obter mais informações sobre como compilar um arquivo JAR, consulte [Criar binários usando o Amazon EMR](emr-build-binaries.md).

Para obter mais informações sobre a criação de um MapReduce aplicativo Hadoop, consulte o [MapReduce Tutorial](http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) na documentação do Apache Hadoop.

Esta seção aborda os conceitos básicos do envio de uma etapa de JAR personalizado no Amazon EMR. O envio de uma etapa de JAR personalizado permite a gravação de um script para processar dados usando a linguagem de programação Java. 

## Enviar uma etapa de JAR personalizado usando o console
<a name="ConsoleCreatingaCustomJARJob"></a>

Este exemplo descreve como usar o console do Amazon EMR para enviar uma etapa de JAR personalizado a um cluster em execução.

**Enviar uma etapa de JAR personalizado usando o console**

1. [Abra o console do Amazon EMR em https://console.aws.amazon.com /emr.](https://console.aws.amazon.com/emr/)

1. Em **Cluster List (Lista de clusters)**, selecione o nome do cluster.

1. Role até a seção **Steps (Etapas)** e expanda-a. Em seguida, escolha **Add step (Adicionar etapa)**.

1. Na caixa de diálogo **Add Step (Adicionar etapa)**:
   + Para **Step type (Tipo de etapa)**, escolha **Custom JAR (JAR personalizado)**.
   + Para **Name (Nome)**, aceite o nome padrão (JAR Personalizado) ou digite um novo nome.
   + Para **JAR S3 location (Localização do S3 JAR)**, digite a localização do seu arquivo JAR ou navegue até ela. A localização do JAR pode ser um caminho para o S3 ou uma classe java totalmente qualificada no caminho de classe. 
   + Para **Arguments (Argumentos)**, digite argumentos necessários como strings separadas por espaços ou deixe o campo em branco.
   + Para **Action on failure (Ação na falha)**, aceite a opção padrão **Continue (Continuar)**.

1. Escolha **Adicionar**. A etapa é exibida no console com o status Pendente. 

1. O status da etapa muda de Pending (Pendente) para Running (Em execução) e depois para Completed (Concluído) conforme ela é executada. Para atualizar o status, escolha o ícone **Refresh (Atualizar)** acima da coluna Actions (Ações). 

## Iniciando um cluster e enviando uma etapa JAR personalizada com o AWS CLI
<a name="emr-dev-create-jar-cli"></a>

**Para iniciar um cluster e enviar uma etapa JAR personalizada com o AWS CLI**

Para iniciar um cluster e enviar uma etapa JAR personalizada com o AWS CLI, digite o `create-cluster` subcomando com o `--steps` parâmetro.
+ Para iniciar um cluster e enviar uma etapa JAR personalizada, digite o comando a seguir, *myKey* substitua pelo nome do seu key pair do EC2 e *amzn-s3-demo-bucket* substitua pelo nome do bucket.

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"]
  ```
**nota**  
Os caracteres de continuação de linha do Linux (\$1) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados ​​em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).

  Quando você especifica a contagem de instâncias sem usar o parâmetro `--instance-groups`, um único nó primário é iniciado e as instâncias restantes são iniciadas como nós centrais. Todos os nós usam o tipo de instância que você especifica no comando.
**nota**  
Se você não tiver criado anteriormente o perfil de serviço do Amazon EMR padrão e o perfil de instância do EC2, digite `aws emr create-default-roles` para criá-los antes de digitar o subcomando `create-cluster`.

  Para obter mais informações sobre o uso dos comandos do Amazon EMR no AWS CLI, consulte. [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)

## Dependências de terceiros
<a name="emr-custom-jar-dependency"></a>

Às vezes, pode ser necessário incluir no MapReduce classpath JARs para uso com seu programa. Existem duas opções para fazer isso:
+ Inclua o `--libjars s3://URI_to_JAR` nas opções da etapa para o procedimento em [Iniciando um cluster e enviando uma etapa JAR personalizada com o AWS CLI](#emr-dev-create-jar-cli).
+ Inicie o cluster com uma configuração `mapreduce.application.classpath` modificada em `mapred-site.xml`. Use a classificação para a configuração `mapred-site`. Para criar o cluster com a etapa usando AWS CLI, isso teria a seguinte aparência:

  ```
  aws emr create-cluster --release-label emr-7.12.0 \
  --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --instance-type m5.xlarge --instance-count 2  --ec2-attributes KeyName=myKey \
  --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"] \
  --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json
  ```

  `myConfig.json`:

  ```
  [
      {
        "Classification": "mapred-site",
        "Properties": {
          "mapreduce.application.classpath": "path1,path2"
        }
      }
    ]
  ```

  A lista separada por vírgulas de caminhos deve ser acrescentada ao classpath da JVM de cada tarefa.