

# Modificar o conector externo do Hive metastore do Athena
<a name="datastores-hive-reference-implementation"></a>

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](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](https://maven.apache.org/) 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](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html) `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
<a name="datastores-hive-reference-implementation-building-the-artifacts-yourself"></a>

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`.