Modificación del conector del metastore externo de Hive de Athena - Amazon Athena

Modificación del conector del metastore externo de Hive de Athena

Si tiene requisitos especiales, puede modificar el conector de Athena para el metastore externo de Hive para su propio uso. Athena proporciona una implementación de referencia del conector en GitHub.com en https://github.com/awslabs/aws-athena-hive-metastore. La mayoría de los casos de uso no requieren que modifique la implementación de referencia. Sin embargo, si es necesario, puede modificar el código fuente y crear los artefactos por su cuenta.

La implementación de referencia es un proyecto de Apache Maven que tiene los siguientes módulos:

  • hms-service-api: contiene las operaciones de la API entre la función de Lambda y los clientes del servicio Athena. Estas operaciones de API se definen en la interfaz HiveMetaStoreService. Debido a que este es un contrato de servicio, no debe cambiar nada en este módulo.

  • hms-lambda-handler: un conjunto de controladores Lambda predeterminados que procesan todas las llamadas a la API del metaalmacén de Hive. La clase MetadataHandler es el distribuidor de todas las llamadas a la API. No es necesario cambiar este paquete.

  • hms-lambda-func: una función de Lambda de ejemplo que tiene los siguientes componentes.

    • HiveMetaStoreLambdaFunc: una función de Lambda de ejemplo que amplía MetadataHandler.

    • ThriftHiveMetaStoreClient: un cliente de Thrift que se comunica con el metaalmacén de Hive. Este cliente está escrito para Hive 2.3.0. Si utiliza una versión de Hive distinta, es posible que tenga que actualizar esta clase para asegurarse de que los objetos de respuesta son compatibles.

    • ThriftHiveMetaStoreClientFactory: controla el comportamiento de la función de Lambda. Por ejemplo, puede proporcionar su propio conjunto de proveedores de controladores anulando el método getHandlerProvider().

    • hms.properties: configura la función de Lambda. La mayoría de los casos solo requieren actualizar las dos propiedades siguientes.

      • hive.metastore.uris: el URI del metaalmacén de Hive en el formato thrift://<host_name>:9083.

      • hive.metastore.response.spill.location: la ubicación de Amazon S3 para almacenar objetos de respuesta cuando los tamaños superan un umbral determinado (por ejemplo, 4 MB). El umbral se define en la propiedad hive.metastore.response.spill.threshold. No se recomienda cambiar el valor predeterminado.

    nota

    Estas dos propiedades se pueden anular con las variables de entorno de Lambda HMS_URIS y SPILL_LOCATION. Utilice estas variables en lugar de volver a compilar el código fuente de la función de Lambda cuando desee utilizar la función con un metaalmacén de Hive o ubicación de desbordamiento diferente.

  • hms-lambda-layer: un proyecto de ensamblaje de Maven que coloca a hms-service-api, hms-lambda-handler y sus dependencias en un archivo .zip. El archivo .zip se registra como una capa de Lambda para su uso por múltiples funciones de Lambda.

  • hms-lambda-rnp: registra las respuestas de una función de Lambda y, a continuación, las usa para reproducir la respuesta. Puede usar este modelo para simular las respuestas de Lambda a fin de realizar pruebas.

Cree los artefactos usted mismo

Después de modificar el código fuente, puede crear los artefactos por su cuenta y cargarlos en una ubicación de Amazon S3.

Antes de crear los artefactos, actualice las propiedades hive.metastore.uris y hive.metastore.response.spill.location en el archivo hms.properties en el módulo hms-lambda-func.

Para construir los artefactos, debe tener instalado Apache Maven y ejecutar el comando mvn install. Esto genera el archivo .zip de capa en la carpeta de salida denominada target en el módulo hms-lambda-layer y el archivo .jar de la función de Lambda en el módulo hms-lambd-func.