

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á.

# Melhore os grãos com magia comandos no EMR Studio
<a name="emr-studio-magics"></a>

## Visão geral do
<a name="overview-magics"></a>

O EMR Studio e os Cadernos do EMR oferecem suporte para comandos magic. Comandos *Magic*, ou *magics*, são aprimoramentos fornecidos pelo kernel do IPython para ajudar na execução e na análise dos dados. O IPython é um ambiente de shell interativo desenvolvido com Python.

O Amazon EMR também oferece suporte Sparkmagic a um pacote que fornece Spark-related kernels (kernels PySpark SparkR e Scala) com magic comandos específicos e que usa o Livy no cluster para enviar trabalhos do Spark.

Você pode usar comandos magic, desde que tenha um kernel do Python em seu Caderno do EMR. Da mesma forma, qualquer Spark-related kernel suporta Sparkmagic comandos.

Os comandos Magic, também chamados de * magics*, têm duas variedades:
+ **Linhas magics**: esses comandos magic são indicados por um prefixo `%` único e operam em uma única linha de código.
+ **Células magics**: esses comandos magic são indicados por um prefixo `%%` duplo e operam em várias linhas de código.

Para saber todos os magics disponíveis, consulte [Lista magia and Sparkmagic Comandos da do](#accessing-all-magic-commands).

## Considerações e limitações
<a name="considerations-limitations-magics"></a>
+ O EMR Serverless não oferece suporte `%%sh` para execução de `spark-submit`. Ele não é compatível com os magics de Cadernos EMR.
+ Os clusters do Amazon EMR no EKS não oferecem suporte a comandos Sparkmagicpara o EMR Studio. Isso ocorre porque os kernels Spark que você usa com endpoints gerenciados são integrados ao Kubernetes e não são suportados pelo Sparkmagic e pelo Livy. Você pode definir a configuração do Spark diretamente no SparkContext objeto como uma solução alternativa, conforme demonstra o exemplo a seguir.

  ```
  spark.conf.set("spark.driver.maxResultSize", '6g') 
  ```
+ Os seguintes magic comandos e ações são proibidos porAWS:
  + `%alias`
  + `%alias_magic`
  + `%automagic`
  + `%macro`
  + Modificar `proxy_user` com `%configure`
  + Modificar `KERNEL_USERNAME` com `%env` ou `%set_env`

## Lista magia and Sparkmagic Comandos da do
<a name="accessing-all-magic-commands"></a>

Use os seguintes comandos para listar os comandos magic disponíveis:
+ `%lsmagic` lista todas as funções magic disponíveis no momento.
+ `%%help`lista as Spark-related magic funções atualmente disponíveis fornecidas pelo pacote. Sparkmagic

## Use `%%configure para configurar o` Spark
<a name="using-configure-sparkmagic"></a>

Um dos comandos mais úteis do Sparkmagic é o comando `%%configure`, que configura os parâmetros de criação da sessão. Ao usar as configurações `conf`, você pode definir qualquer configuração do Spark mencionada na [documentação de configuração do Apache Spark](https://spark.apache.org/docs/latest/configuration.html).

**Example Adição de arquivo em JAR externo aos Cadernos do EMR do repositório do Maven ou do Amazon S3**  
Você pode usar a abordagem a seguir para adicionar uma dependência externa do arquivo JAR a qualquer Spark-related kernel compatível com. Sparkmagic  

```
%%configure -f
{"conf": {
    "spark.jars.packages": "com.jsuereth:scala-arm_2.11:2.0,ml.combust.bundle:bundle-ml_2.11:0.13.0,com.databricks:dbutils-api_2.11:0.0.3",
    "spark.jars": "s3://{{amzn-s3-demo-bucket}}/my-jar.jar"
    }
}
```

**Example : Configuração do Hudi**  
Você pode usar o editor de caderno para configurar seu Caderno do EMR para usar o Hudi.  

```
%%configure
{ "conf": {
     "spark.jars": "hdfs://apps/hudi/lib/hudi-spark-bundle.jar,hdfs:///apps/hudi/lib/spark-spark-avro.jar", 
     "spark.serializer": "org.apache.spark.serializer.KryoSerializer",
     "spark.sql.hive.convertMetastoreParquet":"false"
     }
}
```

## `Use %%sh para executar spark-submit`
<a name="using-sh-sparkmagic"></a>

A `%%sh` magic executa comandos de shell em um subprocesso em uma instância do cluster anexado. Normalmente, você usaria um dos Spark-related kernels para executar aplicativos Spark em seu cluster conectado. No entanto, se desejar usar um kernel do Python para enviar uma aplicação do Spark, você pode usar a magic apresentada a seguir, substituindo o nome do bucket pelo nome do seu bucket em letras minúsculas.

```
%%sh
spark-submit --master yarn --deploy-mode cluster s3://{{amzn-s3-demo-bucket}}/test.py
```

Neste exemplo, o cluster precisa de acesso ao local `s3://{{amzn-s3-demo-bucket}}/test.py` ou o comando falhará.

Você pode usar qualquer comando do Linux com a `%%sh` magic. Se você desejar executar qualquer comando do Spark ou do YARN, use uma das seguintes opções para criar um usuário do Hadoop `emr-notebook` e conceder permissões ao usuário para executar os comandos:
+ Você pode criar explicitamente um novo usuário ao executar os comandos a seguir.

  ```
  hadoop fs -mkdir /user/emr-notebook
  hadoop fs -chown emr-notebook /user/emr-notebook
  ```
+ Você pode ativar a representação do usuário no Livy, que cria o usuário automaticamente. Consulte [Habilitação da representação do usuário para monitorar a atividade de usuários e trabalhos do Spark](emr-managed-notebooks-spark-monitor.md) para obter mais informações.

## Use `%%display` para visualizar os dataframes do Spark
<a name="using-display-sparkmagic"></a>

Você pode usar o `%%display` magic para visualizar um dataframe do Spark. Para usar essa magic, execute o comando apresentado a seguir. 

```
%%display df
```

Escolha visualizar os resultados em formato de tabela, como mostra a imagem a seguir.

![Saída do uso da magic %%display que mostra os resultados em formato de tabela.](http://docs.aws.amazon.com/pt_br/emr/latest/ManagementGuide/images/magic-display-table.png)


Você também pode optar por visualizar os dados com cinco tipos de gráficos. Suas opções incluem gráficos circular, de dispersão, de linha, de área e de barras.

![Saída do uso da magic %%display que mostra os resultados em formato de gráfico.](http://docs.aws.amazon.com/pt_br/emr/latest/ManagementGuide/images/magic-display-chart.png)


## Use Notebooks EMR magias
<a name="emr-magics"></a>

O Amazon EMR fornece os seguintes notebooks EMR que você pode usar com magic Python3 e kernels: Spark-based 
+ `%mount_workspace_dir`: monta seu diretório do Workspace em seu cluster para que você possa importar e executar códigos de outras aplicações em seu Workspace.
**nota**  
Com `%mount_workspace_dir`, somente o kernel do Python 3 pode acessar seus sistemas de arquivos locais. Os executores do Spark não terão acesso ao diretório montado com este kernel.
+ `%umount_workspace_dir`: desmonta seu diretório do Workspace do seu cluster.
+ `%generate_s3_download_url`: gera um link de download temporário na saída do seu caderno para um objeto do Amazon S3. 

### Pré-requisitos
<a name="emr-magics-prereqs"></a>

Antes de instalar as magics dos Cadernos do EMR, conclua as seguintes tarefas:
+ Certifique-se de que seu [Perfil de serviço para instâncias do EC2 do cluster (perfil de instância do EC2)](emr-iam-role-for-ec2.md) tenha acesso de leitura para o Amazon S3. O `EMR_EC2_DefaultRole` com a política gerenciada `AmazonElasticMapReduceforEC2Role` atende a esse requisito. Se você usar uma política ou um perfil personalizado, certifique-se de que ele tenha as permissões do S3 necessárias.
**nota**  
As magics dos Cadernos do EMR é executada em um cluster como o usuário do caderno e usa o perfil de instância do EC2 para interagir com o Amazon S3. Quando você monta um diretório do Workspace em um cluster do EMR, todos os Workspaces e Cadernos do EMR com permissão para serem anexados a esse cluster podem acessar o diretório montado.  
Por padrão, os diretórios são montados somente para leitura. Embora `s3fs-fuse` e `goofys` permitam montagens de leitura e de gravação, recomendamos fortemente que você não modifique os parâmetros de montagem para montar diretórios no modo de leitura e de gravação. Se você permitir o acesso de gravação, todas as alterações realizadas no diretório serão gravadas no bucket do S3. Para evitar a exclusão ou a substituição acidentais, você pode habilitar o versionamento para seu bucket do S3. Para saber mais, consulte [Usando o versionamento em buckets do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html).
+ Execute um dos scripts apresentados a seguir em seu cluster para instalar as dependências para as magics dos Cadernos do EMR. Para executar um script, é possível [Usar ações de bootstrap personalizadas](emr-plan-bootstrap.md#bootstrapCustom) ou seguir as instruções em [Run commands and scripts on an Amazon EMR cluster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-commandrunner.html) quando já tiver um cluster em execução.

  Você pode escolher qual dependência instalar. Tanto o [s3fs-fuse](https://github.com/s3fs-fuse/s3fs-fuse) quanto o [goofys](https://github.com/kahing/goofys) são ferramentas do FUSE (Filesystem in Userspace) que permitem montar um bucket do Amazon S3 como um sistema de arquivos local em um cluster. A ferramenta `s3fs` oferece uma experiência semelhante à POSIX. A `goofys` ferramenta é uma boa opção quando você prefere desempenho em vez de um sistema de POSIX-compliant arquivos.

  A série Amazon EMR 7.x usa o Amazon Linux 2023, que não é compatível com repositórios EPEL. Se você estiver executando o Amazon EMR 7.x, siga as instruções do [ GitHubs3fs-fuse](https://github.com/s3fs-fuse/s3fs-fuse/blob/master/COMPILATION.md) para instalar. `s3fs-fuse` Caso use as séries 5.x ou 6.x, use os comandos a seguir para instalar `s3fs-fuse`.

  ```
  #!/bin/sh
  
  # Install the s3fs dependency for EMR Notebooks magics 
  sudo amazon-linux-extras install epel -y
  sudo yum install s3fs-fuse -y
  ```

  **OU**

  ```
  #!/bin/sh
  
  # Install the goofys dependency for EMR Notebooks magics 
  sudo wget https://github.com/kahing/goofys/releases/latest/download/goofys -P /usr/bin/
  sudo chmod ugo+x /usr/bin/goofys
  ```

### Instale os Notebooks EMR magias
<a name="emr-magics-install"></a>

**nota**  
Com as versões 6.0 a 6.9.0 e 5.0 a 5.36.0 do Amazon EMR, somente as versões 0.2.0 e superiores do pacote `emr-notebooks-magics` oferecem suporte à magic do `%mount_workspace_dir`.

Conclua as etapas a seguir para instalar as magics dos Cadernos do EMR.

1. Em seu caderno, execute os comandos apresentados a seguir para instalar o pacote [`emr-notebooks-magics`](https://pypi.org/project/emr-notebooks-magics/).

   ```
   %pip install boto3 --upgrade
   %pip install botocore --upgrade
   %pip install emr-notebooks-magics --upgrade
   ```

1. Reinicie o kernel para carregar as magics dos Cadernos do EMR.

1. Verifique a instalação com o comando a seguir, que deve exibir o texto de ajuda de saída para `%mount_workspace_dir`.

   ```
   %mount_workspace_dir?
   ```

### `Monte um diretório do Workspace com %mount_workspace_dir`
<a name="emr-magics-mount-workspace"></a>

A magic do `%mount_workspace_dir` permite montar o diretório do Workspace em seu cluster do EMR para que você possa importar e executar outros arquivos, módulos ou pacotes armazenados no diretório.

O exemplo apresentado a seguir monta todo o diretório do Workspace em um cluster e especifica o argumento opcional {{`<--fuse-type>`}} para usar goofys para a montagem do diretório.

```
%mount_workspace_dir . {{<--fuse-type goofys>}}
```

Para verificar se o diretório do Workspace está montado, use o exemplo a seguir para exibir o diretório de trabalho atual com o comando `ls`. A saída deve exibir todos os arquivos em seu Workspace.

```
%%sh
ls
```

Quando você terminar de fazer as alterações no Workspace, poderá desmontar o diretório do Workspace com o seguinte comando:

**nota**  
O diretório do Workspace permanece montado em seu cluster mesmo quando o Workspace é interrompido ou desanexado. Você deve desmontar explicitamente o diretório do Workspace.

```
%umount_workspace_dir
```

### `Baixe um objeto Amazon S3 com %generate_s3_download_url`
<a name="emr-magics-generate-s3-download-url"></a>

O comando `generate_s3_download_url` cria um URL assinado previamente para um objeto armazenado no Amazon S3. Você pode usar o URL assinado previamente para fazer download do objeto em sua máquina local. Por exemplo, você pode executar `generate_s3_download_url` para fazer download do resultado de uma consulta SQL que seu código grava no Amazon S3.

Por padrão, o URL assinado previamente é válido por 60 minutos. Você pode alterar o tempo de expiração ao especificar um número de segundos para o sinalizador `--expires-in`. Por exemplo, `--expires-in 1800` cria um URL válido por 30 minutos.

O exemplo apresentado a seguir gera um link de download para um objeto ao especificar o caminho completo do Amazon S3: `{{s3://EXAMPLE-DOC-BUCKET/path/to/my/object}}`.

```
%generate_s3_download_url {{s3://EXAMPLE-DOC-BUCKET/path/to/my/object}}
```

Para saber mais sobre como usar `generate_s3_download_url`, execute o comando a seguir para exibir o texto de ajuda.

```
%generate_s3_download_url?
```

### `Execute um notebook no modo headless com %execute_notebook`
<a name="headless-execution"></a>

Com a magic do `%execute_notebook`, você pode executar outro caderno no modo descentralizado e visualizar a saída de cada célula executada. Essa magic requer permissões adicionais para o perfil de instância que o Amazon EMR e o Amazon EC2 compartilham. Para obter mais detalhes sobre como conceder permissões adicionais, execute o comando `%execute_notebook?`.

Durante um trabalho de execução prolongada, seu sistema pode entrar em repouso devido à inatividade ou pode perder temporariamente a conectividade com a Internet. Isso pode interromper a conexão entre o seu navegador e o servidor Jupyter. Nesse caso, você poderá perder a saída das células que executou e enviou usando o servidor Jupyter.

Se você executar o caderno no modo descentralizado com a magic do `%execute_notebook`, os Cadernos do EMR capturarão a saída das células que foram executadas, mesmo se a rede local sofrer interrupções. Os Cadernos do EMR salvam a saída de forma incremental em um novo caderno com o mesmo nome do caderno que você executou. Em seguida, os Cadernos do EMR colocam o caderno em uma nova pasta no Workspace. As execuções descentralizadas ocorrem no mesmo cluster e usam o perfil de serviço `EMR_Notebook_DefaultRole`, mas argumentos adicionais podem alterar os valores padrão.

Para executar um caderno no modo descentralizado, use o seguinte comando:

```
%execute_notebook {{<relative-file-path>}}
```

Para especificar um ID de cluster e um perfil de serviço para uma execução descentralizada, use o seguinte comando:

```
%execute_notebook {{<notebook_name>}}.ipynb --cluster-id <emr-cluster-id> --service-role <emr-notebook-service-role>
```

Quando o Amazon EMR e o Amazon EC2 compartilham um perfil de instância, o perfil requer as seguintes permissões adicionais:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:StartNotebookExecution",
        "elasticmapreduce:DescribeNotebookExecution",
        "ec2:DescribeInstances"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowELASTICMAPREDUCEStartnotebookexecution"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/EMR_Notebooks_DefaultRole"
      ],
      "Sid": "AllowIAMPassrole"
    }
  ]
}
```

------

**nota**  
Para usar a magic do `%execute_notebook`, instale a versão 0.2.3 ou superior do pacote `emr-notebooks-magics`.