Usar o Catálogo de Dados do AWS Glue como metastore do Hive - Amazon EMR

Usar o Catálogo de Dados do AWS Glue como metastore do Hive

Usando a versão 5.8.0 ou posterior do Amazon EMR, você pode configurar o Hive para usar o Catálogo de Dados do AWS Glue como metastore dele. Recomendamos essa configuração quando você precisa de um metastore persistente ou de um metastore compartilhado por diferentes clusters, serviços e aplicativos ou contas da AWS.

O AWS Glue é um serviço de extração, transformação e carregamento (ETL) totalmente gerenciado que torna fácil e econômico categorizar os dados, limpá-los, enriquecê-los e movê-los de modo confiável entre vários armazenamentos de dados. O Catálogo de Dados do AWS Glue fornece um repositório de metadados unificado em uma grande variedade de fontes e formatos de dados, integrando-se não apenas ao Amazon EMR, mas ao Amazon RDS, ao Amazon Redshift, ao Redshift Spectrum, ao Athena e a qualquer aplicação compatível com o metastore do Apache Hive. Os crawlers do AWS Glue podem inferir automaticamente o esquema com base nos dados de origem no Amazon S3 e armazenar os metadados associados no Catálogo de Dados. Para obter mais informações sobre o Catálogo de Dados, consulte Preencher o Catálogo de Dados do AWS Glue no Guia do desenvolvedor do AWS Glue.

São feitas cobranças separadas pelo uso do AWS Glue. Existe uma taxa mensal para armazenar e acessar os metadados no Catálogo de Dados, uma taxa horária cobrada por minuto para trabalhos de extração, transformação e carregamento (ETL) do AWS Glue e runtime do crawler e uma taxa horária cobrada por minuto para cada endpoint de desenvolvimento provisionado. O Catálogo de Dados permite o armazenamento de até um milhão de objetos gratuitamente. Se você armazenar mais de um milhão de objetos, será cobrado uma taxa de USD$1 por cada 100.000 objetos em mais de um milhão. Um objeto no Catálogo de Dados é uma tabela, uma partição ou um banco de dados. Para obter mais informações, consulte Definição de preço do Glue.

Importante

Se você tiver criado tabelas usando o Amazon Athena ou o Amazon Redshift Spectrum antes de 14 de agosto de 2017, os bancos de dados e as tabelas serão armazenados em um catálogo gerenciado pelo Athena, que é separado do Catálogo de Dados do AWS Glue. Para integrar o Amazon EMR a essas tabelas, faça a atualização para o Catálogo de Dados do AWS Glue. Para obter mais informações, consulte Atualizar para o Catálogo de Dados do AWS Glue no Guia do usuário do Amazon Athena.

Especificar o Catálogo de Dados do AWS Glue como metastore

Você pode especificar o Catálogo de Dados do AWS Glue como metastore usando o AWS Management Console, a AWS CLI ou a API do Amazon EMR. Ao usar a CLI ou a API, você usa a classificação de configuração do Hive para especificar o Catálogo de Dados. Além disso, com as versões 5.16.0 e posteriores do Amazon EMR, você pode usar a classificação de configuração para especificar um Catálogo de Dados em outra Conta da AWS. Ao usar o console, você pode especificar o Catálogo de Dados usando Opções avançadas ou Opções rápidas.

Console
Para especificar o AWS Glue Data Catalog como metastore do Hive com o console
  1. Faça login no AWS Management Console e abra o console do Amazon EMR em https://console.aws.amazon.com/emr.

  2. Em EMR no EC2, no painel de navegação esquerdo, escolha Clusters e depois Criar cluster.

  3. Em Pacote de aplicações, escolha Hadoop central, HBase ou Personalizado. Se você personalizar o cluster, selecione Hive ou HCatalog como uma das suas aplicações.

  4. Em Configurações do Catálogo de Dados do AWS Glue, marque a caixa de seleção Usar para metadados de tabelas do Hive.

  5. Escolha qualquer outra opção que se aplique ao cluster.

  6. Para iniciar o cluster, escolha Criar cluster.

CLI
Especificar o Catálogo de Dados do AWS Glue como o metastore do Hive usando a AWS CLI

Para obter mais informações sobre como especificar uma classificação de configuração usando a AWS CLI e a API do EMR, consulte Configurar aplicações.

  • Especifique o valor para hive.metastore.client.factory.class usando a classificação de configuração hive-site, conforme mostrado neste exemplo:

    [ { "Classification": "hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" } } ]

    Na versão 5.28.0, 5.28.1, 5.29.0 ou 6.x do EMR, se você estiver criando um cluster usando o Catálogo de Dados do AWS Glue como metastore, defina hive.metastore.schema.verification como false. Isso impede que o Hive e o HCatalog validem o esquema de metastore no MySQL. Sem essa configuração, o grupo de instâncias principais será suspenso após a reconfiguração no Hive ou no HCatalog.

    [ { "Classification": "hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.schema.verification": "false" } } ]

    Se você já tiver um cluster na versão 5.28.0, 5.28.1 ou 5.29.0 do EMR, poderá definir o grupo de instâncias principais hive.metastore.schema.verification como false com as seguintes informações:

    Classification = hive-site Property = hive.metastore.schema.verification Value = false

    Para especificar um Catálogo de Dados em outra conta da AWS, adicione a propriedade hive.metastore.glue.catalogid conforme mostrado no exemplo a seguir. Substitua acct-id pela conta da AWS do Catálogo de Dados.

    [ { "Classification": "hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.schema.verification": "false", "hive.metastore.glue.catalogid": "acct-id" } } ]

Permissões do IAM

O perfil de instância do EC2 para um cluster deve ter permissões do IAM para ações do AWS Glue. Além disso, se você habilitar a criptografia para objetos do Catálogo de Dados do AWS Glue, o perfil também deverá ter permissão para criptografar, descriptografar e gerar a AWS KMS key usada para criptografia.

Permissões para todas as ações do AWS Glue

Se você usar o perfil de instância padrão do EC2 para o Amazon EMR, nenhuma ação será necessária. A política gerenciada AmazonElasticMapReduceforEC2Role anexada ao EMR_EC2_DefaultRole permite todas as ações necessárias do AWS Glue. No entanto, se você especificar um perfil e permissões de instância do EC2 personalizados, deverá configurar as ações apropriadas do AWS Glue. Use a política gerenciada AmazonElasticMapReduceforEC2Role como ponto de partida. Para obter mais informações, consulte Perfil de serviço para instâncias do EC2 de cluster (perfil de instância do EC2) no Guia de gerenciamento do Amazon EMR.

Permissões para criptografar e descriptografar o Catálogo de Dados do AWS Glue

O perfil de instância precisa de permissão para criptografar e descriptografar dados usando a chave. Você não precisa configurar essas permissões se as duas instruções a seguir se aplicarem:

  • Você habilita a criptografia para objetos do Catálogo de Dados do AWS Glue usando chaves gerenciadas para o AWS Glue.

  • Você usa um cluster que está na mesma Conta da AWS que o Catálogo de Dados do AWS Glue.

Caso contrário, você deverá adicionar a seguinte instrução à política de permissões anexada ao perfil de instância do EC2.

[ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:region:acct-id:key/12345678-1234-1234-1234-123456789012" } ] } ]

Para obter mais informações sobre criptografia do Catálogo de Dados do AWS Glue, consulte Criptografar seu catálogo de dados no Guia do desenvolvedor do AWS Glue.

Permissões baseadas em recursos

Se você usa o AWS Glue com o Hive, o Spark ou o Presto no Amazon EMR, o AWS Glue oferece suporte a políticas baseadas em recursos para controlar o acesso aos recursos do Catálogo de Dados. Esses recursos incluem bancos de dados, tabelas, conexões e funções definidas pelo usuário. Para obter mais informações, consulte Políticas baseadas em recursos no AWS Glue no Guia do desenvolvedor do AWS Glue.

Ao usar políticas baseadas em recursos para limitar o acesso ao AWS Glue de dentro do Amazon EMR, a entidade principal que você especifica na política de permissões deve ser o ARN do perfil associado ao perfil de instância do EC2 que é especificado quando um cluster é criado. Por exemplo, para uma política baseada em recursos anexada a um catálogo, você pode especificar o ARN do perfil para o perfil de serviço padrão de instâncias do EC2 do cluster, EMR_EC2_DefaultRole, como a Principal, usando o formato mostrado no seguinte exemplo:

arn:aws:iam::acct-id:role/EMR_EC2_DefaultRole

O acct-id pode ser diferente do ID da conta do AWS Glue. Isso possibilita o acesso de clusters do EMR em outras contas. Você pode especificar várias entidades principais, cada uma de uma conta diferente.

Considerações ao usar o Catálogo de Dados do AWS Glue

Considere os seguintes itens ao usar o Catálogo de Dados do AWS Glue como um metastore com o Hive:

  • A adição de JARs auxiliares usando o shell do Hive não é suportada. Como alternativa, use a classificação de configuração hive-site para definir a propriedade hive.aux.jars.path, o que adiciona JARs auxiliares no caminho de classe do Hive.

  • Não há suporte para transações do Hive.

  • Não há suporte para renomear tabelas de dentro do AWS Glue.

  • Quando você cria uma tabela do Hive sem especificar um LOCATION, os dados da tabela são armazenados no local especificado pela propriedade hive.metastore.warehouse.dir. Por padrão, esse é um local no HDFS. Se outro cluster precisar acessar a tabela, ele apresentará falha, a menos que tenha permissões adequadas para o cluster que criou a tabela. Além disso, como o armazenamento do HDFS é transitório, se o cluster for encerrado, os dados da tabela serão perdidos e a tabela precisará ser recriada. Recomendamos que você especifique um LOCATION no Amazon S3 ao criar uma tabela do Hive usando o AWS Glue. Como alternativa, você pode usar a classificação de configuração hive-site para especificar um local no Amazon S3 para hive.metastore.warehouse.dir, que se aplica a todas as tabelas do Hive. Se uma tabela for criada em um local do HDFS e o cluster que a criou ainda estiver em execução, você poderá atualizar o local da tabela para o Amazon S3 de dentro do AWS Glue. Para obter mais informações, consulte Trabalhar com tabelas no console do AWS Glue no Guia do desenvolvedor da AWS.

  • Valores de partição contendo aspas e apóstrofos não são compatíveis, por exemplo, PARTITION (owner="Doe's").

  • As estatísticas de coluna são têm suporte para o emr-5.31.0 e versões posteriores.

  • O uso da autorização do Hive não é compatível. Como alternativa, considere usar as Políticas baseadas em recursos do AWS Glue. Para obter mais informações, consulte Usar políticas baseadas em recursos para acesso do Amazon EMR ao Catálogo de Dados do AWS Glue.

  • Não há suporte para restrições do Hive.

  • A Otimização baseada em custos no Hive não é compatível.

  • A configuração de hive.metastore.partition.inherit.table.properties não é compatível.

  • O uso das seguintes constantes de metastore não é compatível: BUCKET_COUNT, BUCKET_FIELD_NAME, DDL_TIME, FIELD_TO_DIMENSION, FILE_INPUT_FORMAT, FILE_OUTPUT_FORMAT, HIVE_FILTER_FIELD_LAST_ACCESS, HIVE_FILTER_FIELD_OWNER, HIVE_FILTER_FIELD_PARAMS, IS_ARCHIVED, META_TABLE_COLUMNS, META_TABLE_COLUMN_TYPES, META_TABLE_DB, META_TABLE_LOCATION, META_TABLE_NAME, META_TABLE_PARTITION_COLUMNS, META_TABLE_SERDE, META_TABLE_STORAGE, ORIGINAL_LOCATION.

  • Quando você usa uma expressão do predicado, os valores explícitos devem estar no lado direito do operador de comparação ou as consultas podem apresentar falha.

    • Correto: SELECT * FROM mytable WHERE time > 11

    • Incorreto: SELECT * FROM mytable WHERE 11 > time

  • As versões 5.32.0 e 6.3.0 e posteriores do Amazon EMR são compatíveis com o uso de funções definidas pelo usuário (UDFs) em expressões do predicado. Quando são usadas versões anteriores, suas consultas podem apresentar falha devido à forma como o Hive tenta otimizar a execução da consulta.

  • Tabelas temporárias não são compatíveis.

  • Recomendamos a criação de tabelas usando aplicações por meio do Amazon EMR em vez de criá-las diretamente usando o AWS Glue. Criar uma tabela por meio do AWS Glue pode fazer com que campos obrigatórios estejam ausentes, causando exceções de consulta.

  • Nas versões 5.20.0 ou posteriores do EMR, a remoção paralela de partições é habilitada automaticamente para o Spark e o Hive quando o Catálogo de Dados do AWS Glue é usado como a metastore. Essa alteração reduz significativamente o tempo de planejamento de consultas ao executar várias solicitações em paralelo para recuperar partições. O número total de segmentos que podem ser executados simultaneamente varia entre 1 e 10. O valor padrão é 5, que é uma configuração recomendada. Você pode alterá-lo especificando a propriedade aws.glue.partition.num.segments na classificação de configuração hive-site. Se ocorrer controle de utilização, você poderá desativar o atributo alterando o valor para 1. Para obter mais informações, consulte a Estrutura de segmentos do AWS Glue.