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 implementação de referência é um projeto Apache Maven
-
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 doHiveMetaStoreService
. 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 classeMetadataHandler
é 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 estendeMetadataHandler
. -
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étodogetHandlerProvider()
. -
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 formatothrift://
.<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 propriedadehive.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
eSPILL_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 colocahms-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
.