Usa Cloud Storage con macrodatos

Cloud Storage es una parte clave del almacenamiento y el trabajo con macrodatos en Google Cloud. Por ejemplo, puedes usar Cloud Storage para cargar datos en BigQuery, conservar archivos en etapa de pruebas y datos temporales de canalizaciones de Dataflow, e integrarlo en Dataproc, por lo que puedes ejecutar trabajos de Apache Hadoop o Apache Spark directamente en tus datos en Cloud Storage.

En esta página, se describe cómo usar la herramienta de línea de comandos de gcloud para realizar tareas de macrodatos, como copiar archivos grandes o copiar muchos archivos en paralelo. Para obtener una introducción a gcloud, consulta la guía de inicio rápido de gcloud.

Antes de comenzar

Para aprovechar al máximo los ejemplos que se muestran en esta página, deberás completar lo siguiente (si aún no lo hiciste):

Copia muchos archivos en un bucket

El comando cp sube de manera eficiente grandes cantidades de archivos mediante la realización automática de copias paralelas (de varios subprocesos o de procesamiento múltiple) según sea necesario. Para copiar subdirectorios de forma recursiva, usa la marca --recursive del comando. Por ejemplo, para copiar archivos que incluyen subdirectorios de un directorio local llamado top-level-dir a un bucket, puedes usar el siguiente comando:

gcloud storage cp top-level-dir gs://example-bucket --recursive

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:

gcloud storage cp top-level-dir/subdir/image* gs://example-bucket --recursive

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

gcloud storage 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:

gcloud storage cp gs://example-bucket/top-level-dir/subdir/** gs://example-bucket/top-level-dir/subdir/subdir2

gcloud storage detecta de forma automática que estás 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 gcloud storage rsync. Por ejemplo, para hacer que gs://example-bucket coincida con el contenido del directorio local local-dir, puedes usar el siguiente comando:

gcloud storage rsync local-dir gs://example-bucket --recursive

Si usas la marca --delete-unmatched-destination-objects, esta le indica al comando 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 entre dos buckets.

Copia archivos grandes en 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 Google Cloud, se pueden transferir muy rápido a otros servicios en la misma ubicación, como Compute Engine.

Para copiar un archivo local grande en un bucket, usa el siguiente comando:

gcloud storage cp local-file gs://example-bucket

Para copiar un archivo grande de un bucket existente, usa el siguiente comando:

gcloud storage cp gs://example-source-bucket/file  gs://example-destination-bucket

gcloud storage aprovecha al máximo las funciones de carga y descarga reanudables de 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, gcloud storage 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.

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 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 buckets describe:

gcloud storage buckets describe 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 gcloud storage:

  • CORS: Controla la configuración de recursos compartidos de origen cruzado para un bucket.
  • 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
gcloud storage buckets update gs://example-bucket --lifecycle-file=lifecycle_config.json

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 buckets describe (otros comandos de configuración funcionan de forma similar):

gcloud storage buckets describe 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 buckets get-iam-policy:

gcloud storage buckets get-iam-policy 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 las principales.

Tres situaciones comunes para compartir datos son compartir de forma pública, compartir con un grupo y compartir con una persona:

  • Compartir de forma pública: 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”:

    gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=allUsers --role=roles/storage.objectViewer

  • Compartir con un grupo: Para los colaboradores que no tienen acceso a tus otros recursos de Google Cloud, te recomendamos crear un grupo de Google y, luego, agregar el grupo de Google al bucket. Por ejemplo, para otorgar acceso al grupo de Google my-group, puedes configurar la siguiente política de IAM:

    gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=group:my-group@googlegroups.com --role=roles/storage.objectViewer

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

  • Compartir con una persona: Si existen muchos colaboradores, usa un grupo para otorgar acceso de forma masiva. Si es una persona, puedes otorgar acceso de lectura de la siguiente manera:

    gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=user:liz@gmail.com --role=roles/storage.objectViewer

Limpia un bucket

Puedes limpiar un bucket rápidamente con el siguiente comando:

gcloud storage rm gs://example-bucket/ --recursive

Trabaja con sumas de verificación

Cuando se realizan copias, los comandos gcloud storage cp y gcloud storage 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, gcloud storage borra la copia no válida y, luego, muestra un mensaje de advertencia. Para obtener más información, consulta la sección sobre la validación de sumas de verificación.

Puedes usar gcloud storage para obtener la suma de verificación de un objeto en un bucket. Por ejemplo, supongamos que copias un objeto de datos públicos de Landsat a tu bucket de trabajo con el siguiente comando:

gcloud storage cp gs://gcp-public-data-landsat/LC08/01/001/003/LC08_L1GT_001003_20140812_20170420_01_T2/LC08_L1GT_001003_20140812_20170420_01_T2_B3.TIF 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:

gcloud storage objects describe gs://example-bucket/LC08_L1GT_001003_20140812_20170420_01_T2_B3.TIF
gcloud storage objects describe gs://gcp-public-data-landsat/LC08/01/001/003/LC08_L1GT_001003_20140812_20170420_01_T2/LC08_L1GT_001003_20140812_20170420_01_T2_B3.TIF

También puedes usar gcloud storage para calcular la suma de verificación de un archivo local. 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 gcloud storage 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:

gcloud storage hash local-file

Valores MD5

En el caso de los objetos no compuestos, la ejecución de gcloud storage objects describe en un objeto de un bucket muestra un resultado parecido al siguiente:

bucket: example-bucket
contentType: text/plain
crc32c: FTiauw==
customTime: '1970-01-01T00:00:00+00:00'
etag: CPjo7ILqxsQCEAE=
generation: '1629833823159214'
id: example-bucket/100MBfile.txt/1629833823159214
kind: storage#object
md5Hash: daHmCObxxQdY9P7lp9jj0A==
...

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

---
crc32c_hash: IJfuvg==
digest_format: base64
md5_hash: +bqpwgYMTRn0kWmp5HXRMw==
url: file.txt

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.

¿Qué sigue?