

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

# Configuração da metastore para EMR Sem Servidor
<a name="metastore-config"></a>

Uma *metastore do Hive* é um local centralizado que armazena informações estruturais sobre tabelas, incluindo esquemas, nomes de partições e tipos de dados. Com o EMR Sem Servidor, você pode manter esses metadados da tabela em um metastore que tenha acesso aos seus trabalhos.

Você tem duas opções para uma metastore do Hive:
+ Catálogo de dados do AWS Glue
+ Uma metastore externa do Apache Hive

## Usando o AWS Glue Data Catalog como metastore
<a name="glue-metastore"></a>

Você pode configurar suas tarefas do Spark e do Hive para usar o AWS Glue Data Catalog como seu metastore. Recomendamos essa configuração quando precisar de uma metastore persistente ou de uma metastore compartilhada por diferentes aplicações, serviços, aplicações ou Contas da AWS. Para obter mais informações sobre o Catálogo de Dados, consulte [Preenchendo o Catálogo de Dados do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html). Para obter informações sobre os preços do AWS Glue, consulte os [preços do AWS Glue](https://aws.amazon.com/glue/pricing).

Você pode configurar sua tarefa do EMR Serverless para usar o AWS Glue Data Catalog no Conta da AWS mesmo aplicativo ou em um diferente. Conta da AWS

### Configurar o catálogo de dados AWS Glue
<a name="glue-metastore-configure"></a>

Para configurar o Data Catalog, escolha o tipo de aplicação do EMR Sem Servidor que você deseja usar.

------
#### [ Spark ]

Quando você usa o EMR Studio para executar seus trabalhos com aplicativos EMR Serverless Spark, o AWS Glue Data Catalog é o metastore padrão.

Ao usar SDKs ou AWS CLI, defina a `spark.hadoop.hive.metastore.client.factory.class` configuração `com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory` nos `sparkSubmit` parâmetros da execução do seu trabalho. O exemplo a seguir mostra como configurar o Data Catalog com a AWS CLI.

```
aws emr-serverless start-job-run \
    --application-id application-id \
    --execution-role-arn job-role-arn \
    --job-driver '{
        "sparkSubmit": {
            "entryPoint": "s3://amzn-s3-demo-bucket/code/pyspark/extreme_weather.py",
            "sparkSubmitParameters": "--conf spark.hadoop.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory --conf spark.driver.cores=1 --conf spark.driver.memory=3g --conf spark.executor.cores=4 --conf spark.executor.memory=3g"
        }
    }'
```

Como alternativa, você pode definir essa configuração ao criar uma `SparkSession` no código do Spark.

```
from pyspark.sql import SparkSession

spark = (
    SparkSession.builder.appName("SparkSQL")
    .config(
        "spark.hadoop.hive.metastore.client.factory.class",
        "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
    )
    .enableHiveSupport()
    .getOrCreate()
)

# we can query tables with SparkSQL
spark.sql("SHOW TABLES").show()

# we can also them with native Spark
print(spark.catalog.listTables())
```

------
#### [ Hive ]

Para aplicações do Hive no EMR Sem Servidor, o Data Catalog é a metastore padrão. Ou seja, quando você executa trabalhos em um aplicativo EMR Serverless Hive, o Hive registra as informações do metastore no Catálogo de Dados da mesma forma que seu aplicativo. Conta da AWS Você não precisa de uma nuvem privada virtual (VPC) para usar o Data Catalog como metastore.

Para acessar as tabelas do metastore do Hive, adicione as políticas necessárias do AWS Glue descritas em [Como configurar permissões](https://docs.aws.amazon.com/glue/latest/dg/getting-started-access.html) do IAM para o Glue. AWS 

------

### Configure o acesso entre contas para o EMR Serverless AWS e o Glue Data Catalog
<a name="glue-metastore-cross-account"></a>

Para configurar o acesso entre contas para o EMR Serverless, primeiro faça login no seguinte: Contas da AWS
+ `AccountA`— E Conta da AWS onde você criou um aplicativo EMR Serverless.
+ `AccountB`— Um Conta da AWS que contém um catálogo de dados do AWS Glue que você deseja que suas execuções do EMR Serverless acessem. 

1. Certifique-se de que um administrador ou outra identidade autorizada em `AccountB` anexe uma política de recursos ao Data Catalog em `AccountB`. Essa política concede permissões específicas do `AccountA` entre contas para realizar operações em recursos no catálogo do `AccountB`.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:GetDatabase",
           "glue:CreateDatabase",
           "glue:GetDataBases",
           "glue:CreateTable",
           "glue:GetTable",
           "glue:UpdateTable",
           "glue:DeleteTable",
           "glue:GetTables",
           "glue:GetPartition",
           "glue:GetPartitions",
           "glue:CreatePartition",
           "glue:BatchCreatePartition",
           "glue:GetUserDefinedFunctions"
         ],
         "Resource": [
           "arn:aws:glue:*:123456789012:catalog"
         ],
         "Sid": "AllowGLUEGetdatabase"
       }
     ]
   }
   ```

------

1. Adicione uma política do IAM ao perfil de runtime de trabalhos do EMR Sem Servidor em `AccountA` para que esse perfil possa acessar os recursos do Data Catalog em `AccountB`.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "glue:GetDatabase",
           "glue:CreateDatabase",
           "glue:GetDataBases",
           "glue:CreateTable",
           "glue:GetTable",
           "glue:UpdateTable",
           "glue:DeleteTable",
           "glue:GetTables",
           "glue:GetPartition",
           "glue:GetPartitions",
           "glue:CreatePartition",
           "glue:BatchCreatePartition",
           "glue:GetUserDefinedFunctions"
         ],
         "Resource": [
           "arn:aws:glue:*:123456789012:catalog"
         ],
         "Sid": "AllowGLUEGetdatabase"
       }
     ]
   }
   ```

------

1.  Inicie a execução do trabalho. Essa etapa é um pouco diferente dependendo do tipo de aplicação do EMR Sem Servidor do `AccountA`. 

------
#### [ Spark ]

   Passe a propriedade `spark.hadoop.hive.metastore.glue.catalogid` no `sparkSubmitParameters` conforme mostrado no exemplo a seguir. Substitua *`AccountB-catalog-id`* pelo ID do Data Catalog em `AccountB`.

   ```
   aws emr-serverless start-job-run \
   --application-id "application-id" \
   --execution-role-arn "job-role-arn" \
   --job-driver '{
       "sparkSubmit": {
           "entryPoint": "s3://amzn-s3-demo-bucket/scripts/test.py",
            "sparkSubmitParameters": "--conf spark.hadoop.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory --conf spark.hadoop.hive.metastore.glue.catalogid=AccountB-catalog-id --conf spark.executor.cores=1 --conf spark.executor.memory=1g --conf spark.driver.cores=1 --conf spark.driver.memory=1g --conf spark.executor.instances=1"
       }
     }' \
   --configuration-overrides '{
       "monitoringConfiguration": {
       "s3MonitoringConfiguration": {
       "logUri": "s3://amzn-s3-demo-bucket/logs/"
       }
     }
   }'
   ```

------
#### [ Hive ]

   Defina a propriedade `hive.metastore.glue.catalogid` na classificação `hive-site` conforme mostrado no exemplo a seguir. Substitua *`AccountB-catalog-id`* pelo ID do Data Catalog em `AccountB`.

   ```
   aws emr-serverless start-job-run \
   --application-id "application-id" \
   --execution-role-arn "job-role-arn" \
   --job-driver '{
       "hive": {
       "query": "s3://amzn-s3-demo-bucket/hive/scripts/create_table.sql",
       "parameters": "--hiveconf hive.exec.scratchdir=s3://amzn-s3-demo-bucket/hive/scratch --hiveconf hive.metastore.warehouse.dir=s3://amzn-s3-demo-bucket/hive/warehouse"
       }
   }' \
   --configuration-overrides '{
       "applicationConfiguration": [{
           "classification": "hive-site",
           "properties": {
               "hive.metastore.glue.catalogid": "AccountB-catalog-id"
           }
       }]
   }'
   ```

------

### Considerações ao usar o AWS Glue Data Catalog
<a name="glue-metastore-considerations"></a>

Você pode adicionar auxiliares JARs `ADD JAR` em seus scripts do Hive. Para considerações adicionais, consulte Considerações ao usar o [AWS Glue Data Catalog](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-metastore-glue.html#emr-hive-glue-considerations-hive). 