Usa Google Cloud Storage con macrodatos

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

  • Carga datos en BigQuery.

  • El uso de Cloud Dataproc, que instala automáticamente el conector de Cloud Storage compatible con HDFS, permite el uso de depósitos de Cloud Storage en paralelo con HDFS.

  • Usa un depósito para almacenar archivos en etapa de pruebas y datos temporales de canalización en Cloud Dataflow.

  • Usa un depósito para importar tus datos genómicos a un conjunto de datos de Cloud Genomics.

Para Cloud Genomics y Cloud Dataflow, se requiere un depósito de Cloud Storage. Para BigQuery y Cloud 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 Primeros pasos: Usa la herramienta gsutil. La documentación detallada de todos los comandos de gsutil está disponible en línea y en la ayuda integrada que obtienes cuando ejecutas gsutil help.

Para aprovechar al máximo nuestros ejemplos que se muestran en esta página, necesitarás los siguientes elementos:

Copia muchos archivos a un depósito

Si tienes que subir una gran cantidad de archivos, puedes usar la opción gsutil -m para realizar una copia paralela (multiproceso o multiprocesamiento). Para copiar de forma recurrente los subdirectorios, usa el marcador -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:

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 la image:

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 copiar en la nube, por ejemplo:

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

gsutil detecta automáticamente que estás moviendo múltiples 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-dir puedes usar:

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

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

Copia archivos grandes a 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, es muy rápido transferirlos a otros servicios como Compute Engine. Además, la salida de los depósitos a los servicios de Google Cloud en la misma ubicación o una ubicación secundaria es gratuita. Para obtener más información, consulta 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 Genomics), 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. Esto es particularmente 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 basada en la cantidad de bytes que el servidor recibió realmente, gsutil evita el envío innecesario de bytes y se asegura de 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, puedes considerar la configuración de cargas compuestas.

Configura un depósito

Las tareas típicas de macrodatos en las que desees configurar un depósito incluyen cuando mueves datos a una clase de almacenamiento diferente, configuras el registro de acceso, configuras el control de versiones de objetos, o configuras una regla de ciclo de vida.

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

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

En la salida, observa la información de configuración del depósito, la mayoría de las cuales también se pueden 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 activos estáticos en un sitio web.
  • Control de versiones: Hace que se borren en los objetos en el depósito para crear versiones archivadas.
  • 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, lo 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:

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

Ahora, cualquier objeto en tu depósito de más de un día se borrará automáticamente 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 manera 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 deberás poder dar acceso a personas o grupos específicos. Cada objeto tiene una LCA que describe quién puede acceder a él. Puedes ver una vista fácil de las LCA de un objeto con 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 OAuth2) obtiene automáticamente el acceso de PROPIETARIO al objeto (consulta Miembros y permisos del proyecto).

El resto de la LCA para el objeto está determinado por la LCA predeterminada del objeto en el depósito. Este es un punto de confusión común: La LCA del depósito controla el acceso al depósito (como la capacidad de crear y listar objetos), mientras que la LCA del objeto predeterminado controla la LCA que los objetos obtienen al crearse. Los dos no son necesariamente los mismos. Para obtener más información sobre la diferencia entre los dos, consulta Control de acceso.

Puedes configurar tu depósito para que cualquier persona con una Cuenta de Google pueda listar los archivos en tu depósito. Ten en cuenta que esto no les da acceso a los datos. Entonces, mientras los usuarios pueden ver que existe bigfile en tu depósito, no pueden ver su contenido.

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

Puedes ver la 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 listar los archivos en el depósito.

Las siguientes tres secciones cubren las tres situaciones comunes, compartiendo 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 Platform, te recomendamos que crees un Grupo de Google y luego agregues el Grupo de Google al depósito. Por ejemplo, para el Grupo de Google gs-announce puedes hacer 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 Uso de un grupo para controlar el acceso a objetos.

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 el comando de ayuda gsutil du para ver más opciones que puedes usar, incluido cómo mostrar el tamaño de todos los objetos debajo de un prefijo.

También puedes configurar el registro de depósitos donde el tamaño total de un depósito se informa automáticamente una vez al día. Para obtener más información, consulta Registros de acceso. Si la cantidad de objetos en tu depósito es grande (p. ej., cientos de miles o millones), esta es una forma mucho más eficiente de rastrear el uso del espacio. El comando gsutil du calcula el uso del espacio cuando realiza solicitudes de listas de depósitos, que para depósitos grandes puede llevar mucho tiempo.

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 realizan copias, los comandos gsutil cp y gsutil rsync validan que la suma de verificación del archivo de origen coincida con la suma de verificación del archivo de destino. En el raro 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 Validación de suma 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, imagina que copias un archivo de datos públicos de Google Genomics a tu depósito de trabajo con:

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, imagina que tus datos están en un archivo en un centro de datos local y 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 de verificación 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

Para los objetos no compuestos, la ejecución de gsutil ls -L en un objeto en un depósito muestra resultados como los siguientes:

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 una salida como la siguiente:

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

Ambas salidas 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

Puedes mejorar el rendimiento cuando subes archivos grandes, para ello, configura gsutil y así sube cada archivo dividiéndolo en partes, sube las partes en paralelo y luego usa la función de objeto compuesto por Cloud Storage para volver a juntar las partes en un objeto compuesto. Para obtener más información, consulta 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 principal ventaja es que las cargas para archivos grandes pueden ser significativamente más rápidas si la velocidad de la red y del disco no son factores limitantes. Las siguientes son desventajas de las cargas compuestas paralelas:

  • Cuando tú (o tus colaboradores) usan gsutil para descargar cargas compuestas (como las creadas con las cargas compuestas paralelas de gsutil), recomendamos encarecidamente 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á muy lentamente. Ten en cuenta que el crcmod compilado se recomienda para la descarga, independientemente de si la opción de carga compuesta paralela está activada o no.

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

Una vez que hayas configurado y compilado crcmod con 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 configura gsutil y, en particular, la configuración 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 de red temporales, puedes volver a ejecutar la copia con el indicador 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 hash CRC32c y no un valor MD5.

Si configuraste cargas compuestas paralelas, puede haber archivos temporales de las cargas abortadas. 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 ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.