Exportar bases de datos de Cloud Spanner a Avro

En esta página, se describe cómo exportar bases de datos de Cloud Spanner con Google Cloud Console.

En el proceso, se usa Dataflow y se exportan datos a una carpeta en un depósito de Cloud Storage. La carpeta resultante contiene un conjunto de archivos Avro y archivos de manifiesto JSON.

Para exportar una base de datos de Cloud Spanner con la API de REST o la herramienta de línea de comandos de gcloud, completa los pasos en la sección Antes de comenzar en esta página y, luego, consulta las instrucciones detalladas en Cloud Spanner a Cloud Storage Avro.

Antes de comenzar

Para exportar una base de datos de Cloud Spanner, primero debes habilitar las API de Cloud Spanner, Cloud Storage, Compute Engine y Dataflow:

Habilita las API

También necesitas una cuota suficiente y los permisos necesarios de Cloud IAM.

Requisitos de cuota

Los requisitos de cuota para los trabajos de exportación, por parte del servicio de Google Cloud, son los siguientes:

  • Cloud Spanner: no se requieren nodos adicionales para exportar una base de datos, aunque es posible que debas agregar más nodos a fin de que el trabajo finalice en un tiempo razonable. Consulta Optimización de trabajos para obtener más detalles.
  • Cloud Storage: a fin de exportar, debes crear un depósito para los archivos exportados si aún no tienes uno. Puedes hacerlo en Cloud Console, ya sea a través de la página de Cloud Storage o si creas tu exportación a través de la página de Cloud Spanner. No es necesario que establezcas un tamaño para tu depósito.
  • Dataflow: los trabajos de exportación están sujetos a las mismas cuotas de Compute Engine de direcciones IP, uso del disco y CPU que otros trabajos de Dataflow.
  • Compute Engine: antes de ejecutar el trabajo de exportación, debes configurar las cuotas iniciales para Compute Engine, que Dataflow usa. Estas cuotas representan la cantidad máxima de recursos que permites que Dataflow use para tu trabajo. Los valores iniciales recomendados son los siguientes:

    • CPU: 200
    • Direcciones IP en uso: 200
    • Disco persistente estándar: 50 TB

    Por lo general, no es necesario hacer ningún otro ajuste. Dataflow proporciona el ajuste de escala automático para que solo pagues por los recursos reales que se usaron durante la exportación. Si tu trabajo puede utilizar más recursos, la IU de Dataflow muestra un ícono de advertencia. El trabajo debería completarse incluso si hay un ícono de advertencia.

Requisitos de Cloud IAM

Para exportar una base de datos, también necesitas tener funciones de Cloud IAM con permisos suficientes para usar todos los servicios involucrados en un trabajo de exportación. Para obtener información sobre cómo otorgar permisos y funciones, consulta la página sobre cómo aplicar funciones de IAM.

Para exportar una base de datos, necesitas las siguientes funciones:

  • En el nivel de proyecto de Google Cloud:
    • Visualizador de Cloud Spanner
    • Administrador de Dataflow
    • Administrador de almacenamiento
  • A nivel de la base de datos de Cloud Spanner o de la instancia, o a nivel de proyecto de Google Cloud:
    • Lector de Cloud Spanner
    • Administrador de base de datos de Cloud Spanner (obligatorio solo para trabajos de importación)

Exporta una base de datos

Una vez que cumplas con los requisitos de cuota y de IAM descritos anteriormente, puedes exportar una base de datos de Cloud Spanner existente.

Para exportar tu base de datos de Cloud Spanner a un depósito de Cloud Storage, sigue estos pasos.

  1. Ve a la página Instancias de Cloud Spanner.

    Ir a la página Instancias

  2. Haz clic en el nombre de la instancia que contiene tu base de datos.

  3. Haz clic en la pestaña Importar/Exportar y, luego, en el botón Exportar.

  4. En Elegir dónde almacenar la exportación, haz clic en Explorar.

  5. Si aún no tienes un depósito de Cloud Storage para tu exportación, sigue estos pasos:

    1. Haz clic en Nuevo depósitoCaptura de pantalla del elemento de la IU del depósito nuevo.
    2. Ingresa un nombre para tu depósito. Los nombres de depósito deben ser únicos en Cloud Storage.
    3. Selecciona una clase y una ubicación de almacenamiento predeterminadas y, a continuación, haz clic en Crear.
    4. Haz clic en tu depósito para seleccionarlo.

    Si ya tienes un depósito, selecciona el depósito de la lista inicial o haz clic en Buscar Captura de pantalla del elemento de IU de búsqueda para filtrar la lista y, luego, haz clic en tu depósito a fin de seleccionarlo.

  6. Haz clic en Seleccionar.

  7. En el menú desplegable Elegir una base de datos para exportar, selecciona la base de datos que deseas exportar.

  8. En el menú desplegable Elegir una región para el trabajo de exportación, selecciona una región.

  9. Selecciona la casilla de verificación en Confirmar cargos para confirmar que existen cargos adicionales a los incurridos por tus nodos actuales de Cloud Spanner.

  10. Haz clic en Exportar.

    Cloud Console muestra la página Detalles de la base de datos, que ahora muestra un cuadro que describe tu trabajo de exportación, incluido el tiempo transcurrido del trabajo:

    Captura de pantalla del trabajo en curso

Cuando el trabajo finaliza, Cloud Console muestra un mensaje en la página Detalles de la base de datos. Si el trabajo se realiza de forma correcta, aparecerá un mensaje de confirmación como el siguiente:

Mensaje de confirmación sobre la exportación de trabajo

Si el trabajo no se realiza correctamente, aparece un mensaje de error:

Mensaje de error sobre la exportación del trabajo

Si tu trabajo falla, revisa los registros de Dataflow del trabajo para ver los detalles del error.

Para evitar que Cloud Storage cobre cargos por los archivos que creó el trabajo de exportación con errores, borra la carpeta y sus archivos. Consulta Visualiza la exportación para obtener información sobre cómo encontrar la carpeta.

Visualiza la exportación en Cloud Storage

Para ver la carpeta que contiene tu base de datos exportada en Cloud Console, dirígete al navegador de Cloud Storage y haz clic en el depósito que seleccionaste anteriormente:

Ir al navegador de Cloud Storage

El depósito ahora contiene una carpeta con la base de datos exportada dentro. El nombre de la carpeta comienza con el ID de la instancia, el nombre de la base de datos y la marca de tiempo de tu trabajo de exportación. La carpeta contiene estos archivos:

  • Un archivo spanner-export.json
  • Un archivo TableName-manifest.json para cada tabla de la base de datos que exportaste
  • Uno o más archivos TableName.avro-#####-of-##### El primer número de la extensión .avro-#####-of-##### representa el índice del archivo Avro, comenzando en cero, y el segundo representa la cantidad de archivos Avro generados para cada tabla.

    Por ejemplo, Songs.avro-00001-of-00002 es el segundo de dos archivos que contiene los datos de la tabla Songs.

Elige una región para tu trabajo de exportación

Recomendamos elegir una región diferente según si tu instancia de Cloud Spanner usa una configuración regional o multirregional. Para evitar los cargos de salida de red, elige una región que se superponga con tu ubicación de instancia de Cloud Spanner.

Configuraciones regionales de instancias

Si la configuración de tu instancia de Cloud Spanner es regional, elige la misma región para tu trabajo de exportación y aprovecha la salida gratuita dentro de la misma región.

Si la misma región no está disponible, se aplicarán cargos. Consulta los precios de salida de red de Cloud Spanner para elegir una región que tendrá los cargos de salida de red más bajos.

Configuraciones de instancias multirregionales

Si la configuración de tu instancia de Cloud Spanner es multirregional, elige una de las regiones que conforman la configuración multirregional para aprovechar la salida gratuita dentro de la misma región.

Si una región superpuesta no está disponible, se aplicarán los cargos de salida. Consulta los precios de salida de red de Cloud Spanner para elegir una región que tendrá los cargos de salida de red más bajos.

Visualiza o soluciona problemas de trabajos en la IU de Dataflow

Después de iniciar un trabajo de exportación, puedes ver los detalles del trabajo, incluidos los registros, en la sección de Dataflow de Cloud Console.

Cómo ver los detalles del trabajo de Dataflow

Para ver los detalles de un trabajo en ejecución, sigue estos pasos:

  1. Navega hasta la página Detalles de la base de datos de la base de datos.
  2. Haz clic en Ver detalles del trabajo en Dataflow (View job details in Dataflow) en el mensaje de estado del trabajo, que se parece al siguiente:

    Mensaje de estado del trabajo en curso

    Cloud Console muestra los detalles del trabajo de Dataflow.

Para ver un trabajo que ejecutaste hace poco tiempo, haz lo siguiente:

  1. Navega hasta la página Detalles de la base de datos de la base de datos.
  2. Haz clic en la pestaña Importar/Exportar.
  3. Haz clic en el nombre de tu trabajo en la lista.

    Cloud Console muestra los detalles del trabajo de Dataflow.

Para ver un trabajo que ejecutaste hace más de una semana, sigue estos pasos:

  1. Ve a la página Trabajos de Dataflow en Cloud Console.

    Ir a la página Trabajos

  2. Busca tu trabajo en la lista y haz clic sobre su nombre.

    Cloud Console muestra los detalles del trabajo de Dataflow.

Visualiza registros de Dataflow para tu trabajo

Para ver los registros de un trabajo de Dataflow, navega hasta la página de detalles del trabajo como se describió con anterioridad y, luego, haz clic en Registros a la derecha del nombre del trabajo.

Si un trabajo falla, busca errores en los registros. Si hay errores, el recuento de errores se muestra junto a Registros (Logs):

Ejemplo de recuento de errores junto al botón Registros (Logs)

Para ver los errores del trabajo, sigue estos pasos:

  1. Haz clic en el recuento de errores junto a Registros (Logs).

    Cloud Console muestra los registros del trabajo. Es posible que debas desplazarte para ver los errores.

  2. Identifica las entradas con el ícono de error Ícono de error.

  3. Haz clic en una entrada de registro individual para expandir su contenido.

Para obtener más información sobre cómo solucionar problemas de trabajos de Dataflow, consulta Solución de problemas y depuración.

Solucionar problemas de trabajos de importación que fallaron

Si ves los siguientes errores en tus registros de trabajos, haz lo siguiente:

com.google.cloud.spanner.SpannerException: NOT_FOUND: Session not found

--or--

com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED: Deadline expired before operation could complete.

Verifica la Latencia de escritura del 99% en la pestaña Supervisión de la consola de Cloud Spanner. Si muestra valores altos (varios segundos), indica que la instancia está sobrecargada, lo que provoca que se agote el tiempo de espera de las escrituras y falle.

Una de las causas de esto es que el trabajo de Dataflow se ejecuta con demasiados trabajadores, lo que pone demasiada carga en la instancia de Cloud Spanner.

Para especificar un límite en la cantidad de trabajadores de Dataflow, en lugar de usar la función de importar en la consola de Cloud Spanner, debes iniciar la importación con la plantilla de Cloud Storage Avro a Cloud Spanner y especificar la cantidad máxima de los trabajadores, como se describe a continuación:

  • Si usas la consola de Dataflow, el parámetro Cantidad máxima de trabajadores se encuentra en la sección Parámetros opcionales de la página Crear un trabajo a partir de una plantilla.

  • Si usas gcloud, especifica el argumento max-workers. Por ejemplo:

      gcloud dataflow jobs run my-import-job \
      --gcs-location='gs://dataflow-templates/latest/GCS_Avro_to_Cloud_Spanner' \
      --region=us-central1 \
      --parameters='instanceId=test-instance,databaseId=example-db,inputDir=gs://my-gcs-bucket' \
      --max-workers=10
    

La cantidad máxima de trabajadores depende en gran medida de los datos importados, pero lo ideal es que el uso de CPU total de Spanner esté entre el 70% y el 90%. Esto proporciona un buen balance entre la eficiencia de Spanner y la finalización de trabajos sin errores.

Para lograr ese objetivo de uso en la mayoría de los esquemas o situaciones, recomendamos una cantidad máxima de CPU virtuales de trabajador de entre 4 y 6 veces la cantidad de nodos de Spanner.

Por ejemplo, para una instancia de Spanner de 10 nodos, con trabajadores n1-standard-2, deberías establecer el máximo de trabajadores en 25, lo que daría 50 CPU virtuales.

Optimiza trabajos de exportación de ejecución lenta

Si seguiste las sugerencias de la configuración inicial, por general, no se debe realizar ningún otro ajuste. Si tu trabajo se ejecuta a poca velocidad, existen otras optimizaciones que puedes probar:

  • Optimiza el trabajo y la ubicación de los datos: Ejecuta tu trabajo de Dataflow en la misma región donde se encuentran tu instancia de Cloud Spanner y el depósito de Cloud Storage.

  • Garantiza recursos suficientes de Dataflow: Si las cuotas relevantes de Compute Engine limitan los recursos de tu trabajo de Dataflow, la página de Dataflow del trabajo en Google Cloud Console muestra un ícono de advertencia Ícono de advertencia y mensajes de registro:

    Captura de pantalla de la advertencia de límite de cuota

    En esta situación, aumentar las cuotas para CPU, direcciones IP en uso y el disco persistente estándar podría acortar el tiempo de ejecución del trabajo, pero se podrían generar más cargos de Compute Engine.

  • Comprueba el uso de CPU de Cloud Spanner: Si ves que el uso de CPU de la instancia supera el 65%, puedes aumentar la cantidad de nodos en esa instancia. Los nodos adicionales agregan más recursos de Cloud Spanner y el trabajo debería acelerarse, pero se te cobrarán más cargos de Cloud Spanner.

Factores que afectan el rendimiento del trabajo de exportación

Varios factores influyen en el tiempo que lleva completar un trabajo de exportación.

  • Tamaño de la base de datos de Cloud Spanner: Procesar más datos requiere más tiempo y recursos.

  • Esquema de la base de datos de Cloud Spanner: La cantidad de tablas, el tamaño de las filas, la cantidad de índices secundarios y la cantidad de claves externas son factores que influyen en el tiempo que toma la ejecución de un trabajo de exportación.

  • Ubicación de los datos: Los datos se transfieren entre Cloud Spanner y Cloud Storage mediante Dataflow. Lo ideal es que los tres componentes se ubiquen en la misma región. Si los componentes no están en la misma región, mover los datos entre las regiones hace que la ejecución del trabajo sea más lenta.

  • Cantidad de trabajadores de Dataflow: Mediante el ajuste de escala automático, Dataflow elige la cantidad de trabajadores en función de la cantidad de trabajo que se debe realizar. Sin embargo, la cantidad de trabajadores estará limitada por las cuotas de las CPU, las direcciones IP en uso y el disco persistente estándar. La IU de Dataflow muestra un ícono de advertencia si se alcanzan los límites de cuota. En esta situación, el progreso es más lento, pero el trabajo aún debe completarse.

  • Carga existente en Cloud Spanner: por lo general, un trabajo de exportación agrega una carga ligera en una instancia de Cloud Spanner. Si la instancia ya tiene una carga importante existente, el trabajo se ejecuta más lentamente.

  • Cantidad de nodos de Cloud Spanner: Si el uso de CPU de la instancia supera el 65%, el trabajo se ejecutará más lento.