Ir para o conteúdo

Como uso o Hive e o Spark no Amazon EMR para consultar um catálogo de dados que está em uma conta diferente?

4 minuto de leitura
0

Quero usar o Apache Hive e o Apache Spark para acessar e consultar o catálogo de dados do AWS Glue de outra conta da AWS no Amazon EMR.

Breve descrição

Para acessar dinamicamente o Catálogo de Dados em contas diferentes, especifique a propriedade aws.glue.catalog.separator nas configurações do Hive ou do Spark. Também é possível especificar a propriedade hive.metastore.glue.catalogid em suas configurações para acessar um catálogo de dados específico em outra conta.

Resolução

Conceda acesso entre contas ao AWS Glue. Certifique-se de que o bucket do Amazon Simple Storage Service (Amazon S3) para o qual as tabelas do AWS Glue apontam esteja configurado para acesso entre contas. Para obter mais informações, consulte Como configuro o acesso entre contas para o EMR File System?

Acesse dinamicamente o catálogo de dados em contas diferentes

Aplicar alterações de configuração a um novo cluster

Ao iniciar um cluster do EMR, adicione um objeto de configuração semelhante ao exemplo a seguir. Para obter mais informações, consulte Configurar aplicações ao criar um cluster.

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

Aplicar alterações de configuração a um cluster em execução

Conclua as etapas a seguir:

  1. Abra o console do Amazon EMR.
  2. Na lista de clusters, em Cluster Id, escolha o cluster ativo que você deseja reconfigurar.
  3. Na página de detalhes do cluster, escolha a guia Aplicações.
  4. Em Configurações do grupo de instâncias, selecione o grupo de instâncias e escolha Reconfigurar.
  5. Escolha Adicionar nova configuração e insira as seguintes informações:
    Em Classificação, insira hive-site.
    Em Propriedade, insira aws.glue.catalog.separator.
    Em Valor, insira /.
    Em Classificação, insira hive-site.
    Em Propriedade, insira hive.metastore.client.factory.class.
    Em Valor, insira com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory.
    Em Classificação, insira spark-hive-site.
    Em Propriedade, insira aws.glue.catalog.separator.
    Em Valor, insira /.
    Em Classificação, insira spark-hive-site.
    Em Propriedade, insira hive.metastore.client.factory.class.
    Em Valor, insira com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory.
  6. Selecione Aplicar essa configuração a todos os grupos de instâncias ativos e escolha Salvar alterações. Para obter mais informações, consulte Reconfigurar um grupo de instâncias em um cluster em execução.

Consultar tabelas em outra conta

Observação: ao executar trabalhos do Spark no Amazon EMR versão 6.5, passe a propriedade de configuração spark.sql.catalogImplementation=hive. Para obter mais informações, consulte Carregamento dinâmico das propriedades do Spark no site do Apache Spark.

Para consultar uma tabela que está em uma conta diferente, especifique o número da conta na consulta. O número da conta é igual ao ID do catálogo. Por exemplo, para consultar demodb.tab1 na conta 111122223333, execute o comando a seguir.

Hive:

SELECT * FROM `111122223333/demodb.tab1` LIMIT 5;

Spark:

spark.sql("SELECT * FROM `111122223333/demodb`.tt1 LIMIT 5").show()

Execute o comando Spark anterior no script spark-submit ou como um comando shell do notebook.

Também é possível unir tabelas em dois catálogos.

Hive:

SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2

Spark:

spark.sql(SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2).show()

Execute o comando Spark anterior no script spark-submit ou como um comando shell do notebook.

Acesse um catálogo de dados específico em outra conta

Aplicar alterações de configuração a um novo cluster

Ao iniciar um cluster do EMR, adicione um objeto de configuração semelhante ao exemplo a seguir. Para obter mais informações, consulte Configurar aplicações ao criar um cluster.

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

Aplicar alterações de configuração a um cluster em execução

Conclua as etapas a seguir:

  1. Abra o console do Amazon EMR.
  2. Na lista de clusters, em Cluster Id, escolha o cluster ativo que você deseja reconfigurar.
  3. Na página de detalhes do cluster, escolha a guia Aplicações.
  4. Em Configurações do grupo de instâncias, selecione o grupo de instâncias e escolha Reconfigurar.
  5. Escolha Adicionar nova configuração e insira as seguintes informações:
    Em Classificação, insira hive-site.
    Em Propriedade, insira hive.metastore.glue.catalogid.
    Em Valor, insira account-id.
    Em Classificação, insira hive-site.
    Em Propriedade, insira hive.metastore.client.factory.class.
    Em Valor, insira com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory.
    Em Classificação, insira spark-hive-site.
    Em Propriedade, insira hive.metastore.glue.catalogid.
    Em Valor, insira account-id.
    Em Classificação, insira spark-hive-site.
    Em Propriedade, insira hive.metastore.client.factory.class.
    Em Valor, insira com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory.
  6. Marque Aplicar essa configuração a todos os grupos de instâncias ativos e escolha Salvar alterações. Para obter mais informações, consulte Reconfigurar um grupo de instâncias em um cluster em execução.

Consultar tabelas em outra conta

Para consultar tabelas armazenadas no Catálogo de Dados especificado, execute um comando semelhante ao exemplo a seguir.

Hive:

SELECT * FROM `demodb.tab1` LIMIT 5;

Spark:

spark.sql("SELECT * FROM `demodb`.tt1 LIMIT 5").show()
AWS OFICIALAtualizada há 6 meses