Usa Cloud Storage con macrodatos

Cloud Storage es una parte clave del almacenamiento y el trabajo con macrodatos en Google Cloud. Estos son algunos ejemplos:

  • Cargar datos en BigQuery

  • Usar Dataproc, que instala de forma automática el conector de Cloud Storage compatible con HDFS, lo que permite el uso de depósitos de Cloud Storage en paralelo con HDFS

  • Usar un depósito para almacenar archivos en etapa de pruebas y datos temporales de canalizaciones de Dataflow

Para usar Dataflow, se requiere un depósito de Cloud Storage. Para usar BigQuery y Dataproc, el uso de un depósito de Cloud Storage es opcional, pero se recomienda.

gsutil es una herramienta de línea de comandos que te permite trabajar con depósitos y objetos de Cloud Storage de manera fácil y sólida, en particular en situaciones de macrodatos. Por ejemplo, con gsutil puedes copiar muchos archivos en paralelo con un solo comando, copiar archivos grandes de manera eficiente, calcular sumas de comprobación en tus datos y medir el rendimiento de tu computadora local en Cloud Storage.

En esta página se describe cómo usar gsutil para tareas de macrodatos. Para obtener una introducción más sencilla a gsutil, consulta la Guía de inicio rápido: Usa la herramienta de gsutil. La documentación detallada de todos los comandos de gsutil está disponible en línea y en la ayuda integrada que se obtiene cuando se ejecuta gsutil help.

Para aprovechar al máximo los ejemplos que se muestran en esta página, necesitarás lo siguiente:

Copia muchos archivos en un depósito

Si tienes que subir una gran cantidad de archivos, puedes usar la opción gsutil -m para realizar una copia paralela (de subprocesamiento o procesamiento múltiple). Para copiar subdirectorios de forma recursiva, usa la marca -R del comando cp. Por ejemplo, para copiar archivos que incluyen subdirectorios de un directorio local llamado top-level-dir a un depósito, puedes usar el siguiente comando:

gsutil -m cp -R top-level-dir gs://example-bucket

Puedes usar comodines para hacer coincidir un conjunto específico de nombres en una operación. Por ejemplo, para copiar solo los archivos que comienzan con image, puedes usar este comando:

gsutil -m cp -R top-level-dir/subdir/image* gs://example-bucket

Puedes quitar archivos mediante el uso del mismo comodín:

gsutil -m rm gs://example-bucket/top-level-dir/subdir/image*

Además de copiar archivos locales a la nube y viceversa, también puedes copiarlos en la nube, como se muestra a continuación:

gsutil -m cp gs://example-bucket/top-level-dir/subdir/** gs://example-bucket/top-level-dir/subdir/subdir2

gsutil detecta de forma automática que se están trasladando varios archivos y los crea en un directorio nuevo llamado subdir2.

Sincroniza un directorio local

Si deseas sincronizar un directorio local con un depósito o viceversa, puedes hacerlo con el comando gsutil rsync. Por ejemplo, para hacer que gs://example-bucket coincida con el contenido del directorio local local-dir, puedes usar el siguiente comando:

gsutil -m rsync -r local-dir gs://example-bucket

Si usas la marca rsync -d, esta le indica a gsutil que borre los archivos en la ubicación de destino (gs://example-bucket en el comando anterior) que no están presentes en la ubicación de origen (local-dir). También puedes sincronizar dos depósitos.

Copia archivos grandes en un depósito

En general, cuando se trabaja con macrodatos, una vez que tus datos estén en la nube, deben permanecer allí. Cuando tus datos están en la nube de Google, se pueden transferir muy rápido a otros servicios como Compute Engine. Además, no se cobra por la salida de los depósitos a los servicios de Google Cloud en la misma ubicación o en una ubicación secundaria. Para obtener más información, consulta la sección de precios de red.

Para copiar un archivo local grande en un depósito, usa el siguiente comando:

gsutil cp local-file gs://example-bucket

Para copiar un archivo grande de un depósito existente (p. ej., datos públicos de Cloud Storage), usa el siguiente comando:

gsutil cp gs://example-source-bucket/file  gs://example-destination-bucket

gsutil aprovecha al máximo las funciones de carga y descarga reanudables de Google Cloud Storage. En particular, esto es importante para archivos grandes, ya que la probabilidad de una falla de la red en el ISP aumenta según el tamaño de los datos que se transfieren. Cuando reanudas una carga en función de la cantidad de bytes que el servidor recibió en realidad, gsutil evita el reenvío innecesario de bytes y garantiza que la carga pueda completarse. La misma lógica se aplica para las descargas según el tamaño del archivo local.

Si gsutil cp no te proporciona el rendimiento que necesitas cuando subes archivos grandes, se recomienda que configures cargas compuestas.

Configura un depósito

Las tareas comunes de macrodatos en las que querrás configurar un depósito incluyen: mover datos a una clase de almacenamiento diferente, configurar el acceso al registro, configurar el control de versiones de objetos o establecer una regla de ciclo de vida.

Puedes enumerar los detalles de configuración de un depósito con gsutil ls -L -b:

gsutil ls -L -b gs://example-bucket

En el resultado, observa la información de configuración del depósito, que en su mayoría también se puede configurar a través de gsutil:

  • CORS: Controla la configuración de recursos compartidos de origen cruzado para un depósito.
  • Registro: Te permite registrar el uso del depósito.
  • Sitio web: Permite que los objetos en el depósito actúen como páginas web o se usen como elementos estáticos en un sitio web.
  • Control de versiones: Hace que se borren los objetos en el depósito para crear versiones no actuales.
  • Clase de almacenamiento: Te permite configurar la clase de almacenamiento establecida durante la creación del depósito.
  • Ciclo de vida: Permite que se ejecuten operaciones periódicas en el depósito; la más común es la eliminación de objetos obsoletos.

Por ejemplo, supongamos que solo deseas mantener los archivos en un depósito en particular durante un solo día; luego puedes configurar la regla del ciclo de vida para el depósito con este comando:

echo '{ "rule": [{ "action": {"type": "Delete"}, "condition": {"age": 1}}]}' > lifecycle_config.json
gsutil lifecycle set lifecycle_config.json gs://example-bucket

Cualquier objeto en tu depósito que exista hace más de un día se borrará de forma automática de este depósito. Puedes verificar la configuración que acabas de establecer con el comando gsutil lifecycle (otros comandos de configuración funcionan de forma similar):

gsutil lifecycle get gs://example-bucket

Comparte datos en un depósito

Cuando uses macrodatos, es probable que trabajes en archivos de manera colaborativa, y necesitarás dar acceso a personas o grupos específicos. Las políticas de Cloud Identity and Access Management definen quiénes pueden acceder a los archivos y qué se les permite realizar. Puedes ver la política de Cloud IAM de un depósito mediante el comando de gsutil iam:

gsutil iam get gs://example-bucket

La respuesta al comando muestra los miembros, que son cuentas que tienen acceso al depósito, y las funciones, que son grupos de permisos otorgados a los miembros.

Puedes configurar el depósito para que cualquier persona que tenga una Cuenta de Google pueda enumerar y ver los archivos ubicados en el depósito:

gsutil iam ch AllAuthenticatedUsers:objectViewer gs://example-bucket

En las siguientes tres secciones, se describen las tres situaciones más comunes: compartir datos públicamente, con un grupo y con una persona.

Públicamente

En el caso de los depósitos cuyo contenido es de acceso público para que cualquier persona lo pueda ver y leer en Internet, puedes configurar la política de IAM mediante la designación “AllUsers”:

gsutil iam ch AllUsers:objectViewer gs://example-bucket

Con un grupo

Para los colaboradores que no son miembros de tu proyecto de Google Cloud, te recomendamos que crees un grupo de Google y, luego, lo agregues al depósito. Por ejemplo, para el grupo de Google gs-announce, puedes crear la siguiente configuración:

gsutil iam ch group:gs-announce@googlegroups.com:objectViewer gs://example-bucket

A fin de obtener más información, consulta Usa un grupo para controlar el acceso.

Con una persona

En caso de que haya varios colaboradores, puedes usar un grupo para otorgar acceso de forma masiva. Para una sola persona, puedes otorgar acceso de lectura de la siguiente manera:

gsutil iam ch user:liz@gmail.com:objectViewer gs://example-bucket

Muestra cuántos datos hay en un depósito

Puedes usar el comando gsutil du para mostrar el espacio total usado por todos los objetos de un depósito específico. Por ejemplo:

gsutil du -sh gs://example-bucket

Consulta la ayuda del comando gsutil du para conocer otras opciones que puedes usar; también se explica cómo mostrar el tamaño de todos los objetos con un prefijo.

También puedes usar Cloud Monitoring cuando el tamaño total de un depósito se informa de manera automática una vez al día. Para obtener más información, consulta Determina el tamaño de un depósito. Si tienes una gran cantidad de objetos en el depósito (como cientos de miles o millones), esta es una forma mucho más eficaz de realizar un seguimiento del uso del espacio. Con el comando gsutil du, se calcula el uso del espacio mediante la creación de solicitudes de enumeración de depósitos, lo que puede llevar mucho tiempo para los depósitos grandes.

Puedes contar el número de archivos en un depósito con el siguiente comando:

gsutil ls gs://example-bucket/** | wc -l

Limpia un depósito

Puedes limpiar un depósito rápidamente con el siguiente comando:

gsutil -m rm gs://example-bucket/**

Trabaja con sumas de verificación

Cuando se realizan copias, los comandos gsutil cp y gsutil rsync validan que la suma de verificación del archivo de origen coincida con la del archivo de destino. En el improbable caso de que las sumas de verificación no coincidan, gsutil borrará la copia no válida y, además, imprimirá un mensaje de advertencia. Para obtener más información, consulta la sección sobre la validación de sumas de verificación.

También puedes usar gsutil para obtener la suma de verificación de un archivo en un depósito o calcular la suma de verificación de un objeto local. Por ejemplo, supongamos que copias un archivo de datos públicos de Cloud Life Sciences a tu depósito de trabajo con el siguiente comando:

gsutil -m cp gs://genomics-public-data/1000-genomes/vcf/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf gs://example-bucket

Ahora, puedes obtener las sumas de verificaciones de la versión pública del archivo y tu versión del archivo en tu depósito para asegurarte de que coincidan:

gsutil ls -L gs://example-bucket/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf
gsutil ls -L gs://genomics-public-data/1000-genomes/vcf/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf

En este caso, supongamos que tus datos se encuentran en un archivo en un centro de datos local y que los copiaste en Cloud Storage. Puedes usar gsutil hash para obtener la suma de verificación de tu archivo local y, luego, compararla con la suma del archivo que copiaste en un depósito. Para obtener la suma de verificación de un archivo local, usa el siguiente comando:

gsutil hash local-file

Valores MD5

En el caso de los objetos no compuestos, la ejecución de gsutil ls -L en un objeto de un depósito muestra un resultado parecido al siguiente:

gs://example-bucket/100MBfile.txt:
        Creation time:          Thu, 26 Mar 2015 20:11:51 GMT
        Content-Length:         102400000
        Content-Type:           text/plain
        Hash (crc32c):          FTiauw==
        Hash (md5):             daHmCObxxQdY9P7lp9jj0A==
        ETag:                   CPjo7ILqxsQCEAE=
        Generation:             1427400711419000
        Metageneration:         1
        ACL:            [
        ....

La ejecución de gsutil hash en un archivo local muestra un resultado parecido al siguiente:

Hashing     100MBfile.txt:
Hashes [base64] for 100MBfile.txt:
        Hash (crc32c):          FTiauw==
        Hash (md5):             daHmCObxxQdY9P7lp9jj0A==

Ambos resultados tienen un valor CRC32c y MD5. No hay un valor MD5 para los objetos subidos como objetos compuestos, como es el caso cuando configuras cargas compuestas de gsutil.

Configura cargas compuestas paralelas

Si deseas mejorar el rendimiento cuando subes archivos grandes, configura gsutil a fin de subir cada archivo. Para ello, divídelos en partes, sube las partes en paralelo y, luego, usa la función de objeto compuesto de Cloud Storage para volver a juntar las partes en un objeto compuesto. Para obtener más información, consulta la sección sobre cargas compuestas paralelas. Las cargas compuestas paralelas están inhabilitadas de forma predeterminada.

Antes de configurar las cargas compuestas paralelas, debes tener en cuenta las ventajas y desventajas. La ventaja principal es que las cargas de los archivos grandes pueden ser mucho más rápidas si la velocidad de la red y del disco no es un factor limitante. Las desventajas de las cargas compuestas paralelas son las siguientes:

  • Cuando tú (o tus colaboradores) uses gsutil para descargar cargas compuestas (como las que se crean con cargas compuestas paralelas de gsutil), recomendamos instalar un crcmod compilado, como se explica en gsutil help crcmod. Si no lo haces, verás un mensaje que te advierte que la descarga de objetos compuestos sin un crcmod compilado se ejecutará con mucha lentitud. Ten en cuenta que el crcmod compilado se recomienda para la descarga, sin importar si la opción de carga compuesta paralela está activada o no.

  • Los objetos compuestos en un depósito no tienen un hash MD5.

Una vez que hayas configurado y compilado crcmod con los pasos de gsutil help crcmod, configura tu archivo .boto para que las cargas compuestas paralelas estén activadas de forma predeterminada. A fin de obtener más información, consulta el archivo de configuración Boto para gsutil y, en particular, la configuración de parallel_composite_upload_* en la sección GSUtil del archivo .boto.

Si habilitaste las cargas compuestas paralelas y cargas un archivo grande en tu depósito, notarás que el archivo se carga en fragmentos de 50 MB en lugar de una carga única. Si se produjeron fallas, por ejemplo, debido a problemas temporales de red, puedes volver a ejecutar la copia con la marca de no-clobber (-n) para subir solo los archivos faltantes.

Recuerda que cuando se verifica la integridad de los datos de un archivo en un depósito que se subió como un objeto compuesto, solo hay un valor de hash CRC32c y no un valor MD5.

Si configuraste las cargas compuestas paralelas, puede haber archivos temporales generados por cargas anuladas. Si no deseas reanudar la carga, puedes borrar estos archivos temporales:

gsutil -m rm gs://example-bucket/**/gsutil/tmp/parallel_composite_uploads/for_details_see/gsutil_help_cp**