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 de lo que puedes hacer:

  • 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 canalización en 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 nuestros ejemplos que se muestran en esta página, necesitarás los siguientes elementos:

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., los 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 porque la probabilidad de una falla de la red en tu ISP aumenta con 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ó realmente, gsutil evita el enví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 lo siguiente: 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 trabajes con macrodatos, es probable que trabajes en archivos de manera colaborativa, y necesitarás dar acceso a personas o grupos específicos. Cada objeto tiene una LCA que describe quién puede acceder a él. Puedes obtener una vista sencilla de las LCA de un objeto mediante el comando gsutil acl:

gsutil acl get gs://example-bucket/file

La entidad que subió el objeto (en este caso, tu Cuenta de Google representada por el token de actualización de OAuth2) obtiene de forma automática el acceso de PROPIETARIO al objeto (consulta Miembros y permisos del proyecto).

La LCA predeterminada del objeto en el depósito determina el resto de las LCA para el objeto. Este es un punto de confusión común: la LCA del depósito controla el acceso a él (como la capacidad de crear y enumerar objetos), mientras que la LCA del objeto predeterminado controla la LCA que los objetos obtienen cuando se crean. Las dos no son necesariamente iguales. Para obtener más información sobre la diferencia entre las dos, consulta Opciones de control de acceso.

Puedes configurar tu depósito para que cualquier persona con una Cuenta de Google pueda enumerar los archivos en tu depósito. Ten en cuenta que esto no les da acceso a los datos. Por lo tanto, aunque los usuarios vean que existe el bigfile en su depósito, no podrían ver el contenido.

gsutil acl ch -g 'AllAuthenticatedUsers:R' gs://example-bucket

Puedes ver las LCA del depósito con el comando ls -Lb:

gsutil ls -Lb gs://example-bucket

Ahora cualquiera que esté autenticado con una Cuenta de Google puede enumerar los archivos en el depósito.

Las siguientes tres secciones cubren las tres situaciones comunes: compartir datos públicamente, con un grupo y con una persona.

Públicamente

Para un depósito legible en todo el mundo, puedes hacer las siguientes configuraciones:

# Read access on the bucket so that is contents can be listed
gsutil acl ch -g AllUsers:R gs://example-bucket

# Default bucket ACL so any new objects added at a later date are readable.
gsutil defacl ch -g AllUsers:R gs://example-bucket

# Read access to all of its current contents.
gsutil -m acl ch -R -g AllUsers:R 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:

# Read access to the bucket so that its contents can be listed.
gsutil acl ch -g 'gs-announce@googlegroups.com:R' gs://example-bucket

# Default bucket ACL so any new objects added at a later date are readable.
gsutil defacl ch -g 'gs-announce@googlegroups.com:R' gs://example-bucket

# Read access to all of a bucket's current contents.
gsutil -m acl ch -R -g 'gs-announce@googlegroups.com:R' gs://example-bucket

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

Con una persona

Para muchos colaboradores, usa un grupo. Para una persona, puedes configurar el acceso de la siguiente manera:

# Read access to the bucket so that its contents can be listed.
gsutil acl ch -u liz@gmail.com:R gs://example-bucket

# Default bucket ACL so any new objects added at a later date are readable.
gsutil defacl ch -u liz@gmail.com:R gs://example-bucket

# Read access to all of a bucket's current contents.
gsutil -m acl ch -R -u liz@gmail.com:R 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 qué otras opciones puedes usar, incluida la forma de mostrar el tamaño de todos los objetos con un prefijo.

También puedes configurar el registro de depósitos en el que 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 Registros de acceso. Si tienes una gran cantidad de objetos en tu depósito (p. ej., cientos de miles o millones), esta es una forma mucho más eficiente 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 siguientes son desventajas de las cargas compuestas paralelas:

  • 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 siguiendo los pasos en gsutil help crcmod, configura tu archivo .boto para que las cargas compuestas paralelas estén activadas de forma predeterminada. Para obtener más información, consulta la configuración de gsutil y, en especial, la configuración parallel_composite_upload_* en la sección GSUtil del archivo .boto.

Si habilitas las cargas compuestas paralelas y subes un archivo grande en tu depósito, notarás que el archivo se sube en fragmentos de 50 MB en lugar de subirse en una sola carga. 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**
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.