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
Um metastore do Hive é um local centralizado que armazena informações estruturais sobre suas 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 você precisa de um metastore persistente ou compartilhado por diferentes aplicativos, serviços 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.
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.
-
Certifique-se de que um administrador ou outra identidade autorizada
AccountB
anexe uma política de recursos ao Catálogo de Dados emAccountB
. Essa política concede permissõesAccountA
específicas entre contas para realizar operações em recursos noAccountB
catálogo.{ "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"] } ] } -
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"] } ] } -
Comece sua execução de trabalhos. Essa etapa é um pouco diferente dependendo
AccountA
do tipo de aplicativo EMR sem servidor.
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.
Usando uma metastore externa do Hive
Você pode configurar suas tarefas EMR Serverless Spark e Hive para se conectarem a um metastore externo do Hive, como Amazon Aurora ou Amazon for My. RDS SQL Esta seção descreve como configurar um metastore Amazon RDS Hive, configurar seus trabalhos sem servidor e configurar seus VPC trabalhos EMR sem servidor para usar um metastore externo.
Crie uma metastore externa do Hive
-
Crie uma Amazon Virtual Private Cloud (AmazonVPC) com sub-redes privadas seguindo as instruções em Criar uma. VPC
-
Crie seu aplicativo EMR Serverless com sua nova Amazon VPC e sub-redes privadas. Quando você configura seu aplicativo EMR Serverless com umVPC, ele primeiro provisiona uma interface de rede elástica para cada sub-rede especificada. Em seguida, ele anexa o grupo de segurança especificado a essa interface de rede. Isso dá controle de acesso ao seu aplicativo. Para obter mais detalhes sobre como configurar seuVPC, consulteConfigurando o acesso VPC.
-
Crie um SQL banco de dados My SQL ou Aurora Postgre em uma sub-rede privada na sua Amazon. VPC Para obter informações sobre como criar um RDS banco de dados da Amazon, consulte Criação de uma RDS instância de banco de dados da Amazon.
-
Modifique o grupo de segurança do seu banco de dados My SQL ou Aurora para permitir JDBC conexões do seu grupo de segurança EMR sem servidor seguindo as etapas em Modificar uma instância de banco de dados Amazon. RDS Adicione uma regra para tráfego de entrada para o grupo de RDS segurança de um dos seus grupos de segurança EMR sem servidor.
Tipo Protocolo Intervalo de portas Origem Tudo TCP
TCP
3306
emr-serverless-security-group
Configurar as opções do Spark
Usando JDBC
Para configurar seu aplicativo EMR Serverless Spark para se conectar a um metastore Hive baseado em uma instância Amazon for RDS My ou SQL Amazon Aurora My, use uma conexão. SQL JDBC Passe o mariadb-connector-java.jar
with --jars
nos spark-submit
parâmetros da execução do seu trabalho.
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/spark-jdbc.py", "sparkSubmitParameters": "--jars s3://amzn-s3-demo-bucket
/mariadb-connector-java.jar --conf spark.hadoop.javax.jdo.option.ConnectionDriverName=org.mariadb.jdbc.Driver --conf spark.hadoop.javax.jdo.option.ConnectionUserName=<connection-user-name> --conf spark.hadoop.javax.jdo.option.ConnectionPassword=<connection-password> --conf spark.hadoop.javax.jdo.option.ConnectionURL=<JDBC-Connection-string> --conf spark.driver.cores=2 --conf spark.executor.memory=10G --conf spark.driver.memory=6G --conf spark.executor.cores=4" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket
/spark/logs/" } } }'
O exemplo de código a seguir é um script de ponto de entrada do Spark que interage com uma metastore do Hive na Amazon. RDS
from os.path import expanduser, join, abspath from pyspark.sql import SparkSession from pyspark.sql import Row # warehouse_location points to the default location for managed databases and tables warehouse_location = abspath('spark-warehouse') spark = SparkSession \ .builder \ .config("spark.sql.warehouse.dir", warehouse_location) \ .enableHiveSupport() \ .getOrCreate() spark.sql("SHOW DATABASES").show() spark.sql("CREATE EXTERNAL TABLE `sampledb`.`sparknyctaxi`(`dispatching_base_num` string, `pickup_datetime` string, `dropoff_datetime` string, `pulocationid` bigint, `dolocationid` bigint, `sr_flag` bigint) STORED AS PARQUET LOCATION 's3://<s3 prefix>/nyctaxi_parquet/'") spark.sql("SELECT count(*) FROM sampledb.sparknyctaxi").show() spark.stop()
Usando o serviço de economia
Você pode configurar seu aplicativo EMR Serverless Hive para se conectar a um metastore do Hive com base em uma instância Amazon for RDS My ou SQL Amazon Aurora My. SQL Para fazer isso, execute um servidor econômico no nó principal de um EMR cluster existente da Amazon. Essa opção é ideal se você já tem um EMR cluster da Amazon com um servidor econômico que deseja usar para simplificar suas configurações de trabalho EMR sem servidor.
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
/thriftscript.py", "sparkSubmitParameters": "--jars s3://amzn-s3-demo-bucket
/mariadb-connector-java.jar --conf spark.driver.cores=2 --conf spark.executor.memory=10G --conf spark.driver.memory=6G --conf spark.executor.cores=4" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket
/spark/logs/" } } }'
O exemplo de código a seguir é um script de ponto de entrada (thriftscript.py
) que usa o protocolo Thrift para se conectar a uma metastore do Hive. Observe que a hive.metastore.uris
propriedade precisa ser configurada para ser lida em um metastore externo do Hive.
from os.path import expanduser, join, abspath from pyspark.sql import SparkSession from pyspark.sql import Row # warehouse_location points to the default location for managed databases and tables warehouse_location = abspath('spark-warehouse') spark = SparkSession \ .builder \ .config("spark.sql.warehouse.dir", warehouse_location) \ .config("hive.metastore.uris","thrift://
thrift-server-host
:thift-server-port
") \ .enableHiveSupport() \ .getOrCreate() spark.sql("SHOW DATABASES").show() spark.sql("CREATE EXTERNAL TABLE sampledb.`sparknyctaxi`( `dispatching_base_num` string, `pickup_datetime` string, `dropoff_datetime` string, `pulocationid` bigint, `dolocationid` bigint, `sr_flag` bigint) STORED AS PARQUET LOCATION 's3://<s3 prefix>/nyctaxi_parquet/'") spark.sql("SELECT * FROM sampledb.sparknyctaxi").show() spark.stop()
Configurar as opções do Hive
Usando JDBC
Se você quiser especificar a localização de um banco de dados externo do Hive em uma instância do Amazon RDS My SQL ou do Amazon Aurora, você pode substituir a configuração padrão do metastore.
nota
No Hive, você pode realizar várias gravações em tabelas do metastore ao mesmo tempo. Se você compartilhar informações de metastore entre dois trabalhos, certifique-se de não gravar na mesma tabela de metastore simultaneamente, a menos que grave em partições diferentes da mesma tabela de metastore.
Defina as seguintes configurações na hive-site
classificação para ativar o metastore externo do Hive.
{ "classification": "hive-site", "properties": { "hive.metastore.client.factory.class": "org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory", "javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver", "javax.jdo.option.ConnectionURL": "jdbc:mysql://
db-host
:db-port
/db-name
", "javax.jdo.option.ConnectionUserName": "username
", "javax.jdo.option.ConnectionPassword": "password
" } }
Usando um servidor econômico
Você pode configurar seu aplicativo EMR Serverless Hive para se conectar a um metastore do Hive baseado em um Amazon for RDS My ou SQL Amazon Aurora M. ySQLinstance Para fazer isso, execute um servidor econômico no nó principal de um EMR cluster existente da Amazon. Essa opção é ideal se você já tem um EMR cluster da Amazon que executa um servidor econômico e deseja usar suas configurações de trabalho EMR sem servidor.
Defina as seguintes configurações na hive-site
classificação para que o EMR Serverless possa acessar o metastore remoto do Thrift. Observe que você deve definir a hive.metastore.uris
propriedade para ser lida em um metastore externo do Hive.
{ "classification": "hive-site", "properties": { "hive.metastore.client.factory.class": "org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory", "hive.metastore.uris": "thrift://
thrift-server-host
:thirft-server-port
" } }
Considerações ao usar um metastore externo
-
Você pode configurar bancos de dados compatíveis com o MariaDB como sua JDBC metastore. Exemplos desses bancos de dados são RDS para MariaDB, SQL My e Amazon Aurora.
-
As metástores não são inicializadas automaticamente. Se sua metastore não for inicializada com um esquema para sua versão do Hive, use a Hive Schema Tool.
-
EMRO Serverless não oferece suporte à autenticação Kerberos. Você não pode usar um servidor de metastore econômico com autenticação Kerberos com tarefas EMR Serverless Spark ou Hive.