Configuração do Metastore para Serverless EMR - Amazon EMR

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 do Metastore para Serverless EMR

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 Serverless, 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

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. Para obter informações sobre os preços do AWS Glue, consulte Preços do AWS Glue.

Você pode configurar sua tarefa EMR sem servidor 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

Para configurar o Catálogo de Dados, escolha o tipo de aplicativo EMR sem servidor que você deseja usar.

Spark

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

Ao usar SDKs ou AWS CLI, você pode definir 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 aplicativos EMR Serverless Hive, o Catálogo de Dados é o 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 Catálogo de Dados como seu metastore.

Para acessar as tabelas do metastore do Hive, adicione as políticas necessárias do AWS Glue descritas em Configurando permissões IAM para o Glue. AWS

Configure o acesso entre contas para EMR Serverless e Glue Data Catalog AWS

Para configurar o acesso entre contas para o EMR Serverless, você deve primeiro fazer login no seguinte: Contas da AWS

  • AccountA— E Conta da AWS onde você criou um aplicativo EMR sem servidor.

  • AccountB— Um Conta da AWS que contém um AWS Glue Data Catalog que você deseja que suas execuções EMR sem servidor 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.

    { "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal": { "AWS": [ "arn:aws:iam::accountA:role/job-runtime-role-A" ]}, "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:region:AccountB:catalog"] } ] }
  2. Adicione uma IAM política à função de tempo de execução do trabalho EMR sem servidor AccountA para que essa função possa acessar os recursos do Catálogo de Dados em. AccountB

    { "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:region:AccountB:catalog"] } ] }
  3. Inicie a execução do trabalho. Essa etapa é um pouco diferente, dependendo AccountA do tipo de aplicativo EMR sem servidor.

    Spark

    Defina a propriedade spark.hadoop.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 '{ "sparkSubmit": { "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": { "spark.hadoop.hive.metastore.glue.catalogid": "AccountB-catalog-id" } }] }'
    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

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.