Modificar o conector externo do Hive metastore do Athena - Amazon Athena

Modificar o conector externo do Hive metastore do Athena

Se você tiver requisitos especiais, poderá modificar o conector Athena para o metastore externo do Hive para seu próprio uso. O Athena oferece uma implementação de referência do conector no GitHub.com em https://github.com/awslabs/aws-athena-hive-metastore. A maioria dos casos de uso não exige que você modifique a implementação de referência. No entanto, se necessário, é possível modificar o código-fonte e criar você mesmo os artefatos.

A implementação de referência é um projeto Apache Maven que tem os seguintes módulos:

  • hms-service-api: contém as operações de API entre a função do Lambda e os clientes dos serviços do Athena. Essas operações da API são definidas na interface do HiveMetaStoreService. Como este é um contrato de serviço, você não deve alterar nada neste módulo.

  • hms-lambda-handler: um conjunto de manipuladores padrão do Lambda que processa todas as chamadas de API de metastore do Hive. A classe MetadataHandler é o dispatcher para todas as chamadas da API. Você não precisa alterar este pacote.

  • hms-lambda-func: um exemplo de função do Lambda que tem os componentes a seguir.

    • HiveMetaStoreLambdaFunc: um exemplo de função do Lambda que estende MetadataHandler.

    • ThriftHiveMetaStoreClient: um cliente Thrift que se comunica com o metastore do Hive. Esse cliente foi escrito para o Hive 2.3.0. Se você usar uma versão diferente do Hive, talvez seja necessário atualizar essa classe para garantir que os objetos de resposta sejam compatíveis.

    • ThriftHiveMetaStoreClientFactory: controla o comportamento da função do Lambda. Por exemplo, você pode fornecer seu próprio conjunto de provedores de manipuladores substituindo o método getHandlerProvider().

    • hms.properties: configura a função do Lambda. A maioria dos casos requer a atualização de apenas as duas propriedades a seguir.

      • hive.metastore.uris: o URI do metastore do Hive no formato thrift://<host_name>:9083.

      • hive.metastore.response.spill.location: o local do Amazon S3 para armazenar objetos de resposta quando os tamanhos excedem um determinado limite (por exemplo, 4 MB). O limite é definido na propriedade hive.metastore.response.spill.threshold. Não é recomendável alterar o valor padrão.

    nota

    Essas duas propriedades podem ser substituídas pelas variáveis de ambiente do Lambda HMS_URIS e SPILL_LOCATION. Use essas variáveis em vez de recompilar o código-fonte da função do Lambda para usar a função com um metastore do Hive ou local de vazamento diferente.

  • hms-lambda-layer: um projeto de montagem do Maven que coloca hms-service-api, hms-lambda-handler e suas dependências em um arquivo .zip. O arquivo .zip é registrado como uma camada do Lambda para uso por várias funções do Lambda.

  • hms-lambda-rnp: registra as respostas de uma função do Lambda e, em seguida, usa-as para reproduzir a resposta. É possível usar esse modelo para simular respostas do Lambda para testes.

Criar seus próprios artefatos

Após modificar o código-fonte, é possível criar os artefatos você mesmo e carregá-los em um local do Amazon S3.

Antes de criar os artefatos, atualize as propriedades hive.metastore.uris e hive.metastore.response.spill.location no arquivo hms.properties no módulo hms-lambda-func.

Para criar os artefatos, você deve ter o Apache Maven instalado e executar o comando mvn install. Isso gera o arquivo .zip de camada na pasta de saída chamada target no módulo hms-lambda-layer e o arquivo .jar da função do Lambda no módulo hms-lambd-func.