Utilice Atlas Data Federation y el activador programado de Atlas para copiar datos de un clúster de Atlas a un cubo de Amazon Web Services S3 en formato Apache Parquet. Parquet es un formato columnar adecuado para cargas de trabajo de análisis y aprendizaje automático que esperan los datos como archivos en lugar de documentos. Ejecute copias en un cronograma recurrente para delegar las queries de análisis de su clúster operativo.
Acerca de esta tarea
El tutorial utiliza un enfoque delta, lo que significa que cada ejecución del activador copia documentos de los últimos 60 segundos. Una alternativa es una snapshot completa, que copia toda la colección cada vez. El enfoque correcto depende de su volumen de datos y de los requisitos de los consumidores posteriores.
Los valores maxFileSize y maxRowGroupSize en este tutorial están optimizados para pruebas, no para producción. Para cargas de trabajo de producción, revisa las opciones de la etapa $out y ajusta los tamaños de archivo y la partición en función de tus patrones de consulta.
Antes de comenzar
Antes de comenzar este tutorial, complete las siguientes tareas:
Cree una cuenta de Atlas con un clúster que contenga los datos que desea copiar. Para empezar, consulte Crear un clúster Atlas Infinite o Atlas Core.
Cree una cuenta de AWS con privilegio para crear roles de IAM y buckets de S3. Para configurar los permisos necesarios para Atlas Data Federation, consulte Implementar un almacén de datos de instancia federada de base de datos.
Instala y configura el AWS CLI.
Pasos
Despliega una instancia de Base de Datos Federada con S3 y los almacenes de datos Atlas.
Una instancia federada de base de datos consolida múltiples fuentes de datos en una única interfaz consultable. En este tutorial, conectará su bucket S3 y su clúster de Atlas como almacenes de datos en la misma instancia federada de base de datos. La conexión de ambos almacenes de datos permite que el activador de copia lea del clúster y guarde en S3.
Implementar una instancia federada de base de datos con un almacén de datos S3. Para aprender cómo, consulte Implementar un almacén de datos de instancia federada de base de datos. Cuando configure el almacén de datos S3, otorgue acceso al bucket al rol de IAM Read and write para que Atlas Data Federation pueda guardar archivos Parquet.
Agrega tu clúster de Atlas como un segundo almacén de datos en la instancia federada de base de datos.
Después de completar estos pasos, anote el nombre de su servicio de instancia federada de base de datos. Necesitarás este nombre en un paso posterior.
Crea un activador programado para insertar documentos de prueba.
Crea un activador programado que inserte un nuevo documento en tu clúster cada minuto. Esto genera datos de prueba para que puedas verificar que el activador de copia funciona.
En Atlas, diríjase a la página Triggers.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Triggers en la sección Streaming Data.
Se muestra la página de Triggers.
Haga clic en Add Trigger.
Selecciona Scheduled como el Trigger Type.
En Trigger Details, configure lo siguiente:
ConfiguraciónValorTrigger NameCreate_Event_Every_Min_TriggerSchedule TypeBasicIntervalCada
1minutoEvent TypeFunctionEn la sección Function, selecciona + New Function e ingresa el siguiente código. Reemplace los valores de los marcadores de posición con los nombres de su servicio Atlas, base de datos y colección.
exports = function () { const mongodb = context.services.get( "NAME_OF_YOUR_ATLAS_SERVICE" ); const db = mongodb.db("NAME_OF_YOUR_DATABASE"); const events = db.collection( "NAME_OF_YOUR_COLLECTION" ); const event = events.insertOne({ time: new Date(), aNumber: Math.random() * 100, type: "event" }); return JSON.stringify(event); }; Haga clic en Save.
Después de ejecutar el activador, confirma que aparezcan nuevos documentos en tu colección de clústeres cada minuto.
Crea un desencadenador programado para copiar datos a S3.
Cree un activador programado que ejecute un pipeline de agregación utilizando la etapa $out para copiar documentos recientes de su clúster a su bucket S3 en formato Parquet cada minuto.
En la página Triggers, haz clic en Add Trigger.
Selecciona Scheduled como el Trigger Type.
En Trigger Details, configure lo siguiente:
ConfiguraciónValorTrigger NameCopy_Events_To_S3_TriggerSchedule TypeBasicIntervalCada
1minutoEvent TypeFunctionEn la sección Function, seleccione + New Function e introduzca el siguiente código. Reemplace los valores de marcador de posición con los nombres de su servicio de instancia federada de base de datos, base de datos virtual, colección virtual, depósito S3 y región de AWS.
exports = function () { const service = context.services.get( "NAME_OF_YOUR_FEDERATED_DATA_SERVICE" ); const db = service.db( "NAME_OF_YOUR_VIRTUAL_DATABASE" ); const events = db.collection( "NAME_OF_YOUR_VIRTUAL_COLLECTION" ); const pipeline = [ { $match: { "time": { $gt: new Date( Date.now() - 60 * 1000 ), $lt: new Date(Date.now()) } } }, { "$out": { "s3": { "bucket": "YOUR_S3_BUCKET_NAME", "region": "YOUR_AWS_REGION", "filename": "events", "format": { "name": "parquet", "maxFileSize": "10GB", "maxRowGroupSize": "100MB" } } } } ]; return events.aggregate(pipeline); }; Haga clic en Save.
Después de que se ejecute el activador, confirme que aparece un archivo Parquet llamado
eventsen su bucket S3.