Usa Cloud Storage con macrodatos

Cloud Storage es una parte clave del almacenamiento y el trabajo con macrodatos en Google Cloud. Los ejemplos incluyen:

  • 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 bucket para almacenar archivos en etapa de pruebas y datos temporales de canalización en Dataflow

Para usar Dataflow, se requiere un bucket de Cloud Storage. Para usar BigQuery y Dataproc, el uso de un bucket 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 bucket

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 bucket, 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 bucket 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 a un bucket

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 bucket, usa el siguiente comando:

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

Para copiar un archivo grande de un bucket 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 en paralelo.

Configura un bucket

Las tareas comunes de macrodatos en las que querrás configurar un bucket 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 bucket, 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 bucket.
  • 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 los objetos en el bucket 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, lo más común es la eliminación de objetos obsoletos.

Por ejemplo, supongamos que solo deseas mantener los archivos en un bucket en particular durante un solo día, luego puedes configurar la regla del ciclo de vida para el bucket 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 bucket de más de un día se borrará automáticamente de este bucket. 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 bucket

Cuando trabajes con 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 administración de identidades y accesos definen quiénes pueden acceder a los archivos y qué se les permite realizar. Puedes ver la política de 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 bucket, y las funciones, que son grupos de permisos otorgados a los miembros.

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

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 bucket. 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 Uso de un grupo para controlar el acceso a objetos.

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 bucket

Puedes usar el comando gsutil du para mostrar el espacio total usado por todos los objetos de un bucket 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 usar Cloud Monitoring cuando el tamaño total de un bucket 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 bucket (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 bucket con el siguiente comando:

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

Limpia un bucket

Puedes limpiar un bucket 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 bucket 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 bucket 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 bucket 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 del archivo que copiaste en un bucket. 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 bucket 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==

Ambas salidas tienen un valor CRC32c y MD5. No hay un valor MD5 para los objetos compuestos, como los que se crearon a partir de cargas compuestas en paralelo.