Usar Cloud Storage con Big Data

Cloud Storage es un componente fundamental para almacenar y trabajar con Big Data en Google Cloud. Por ejemplo, puedes usar Cloud Storage para cargar datos en BigQuery, almacenar archivos de almacenamiento provisional y datos temporales para las canalizaciones de Dataflow, e integrarlo con Dataproc para ejecutar tareas de Apache Hadoop o Apache Spark directamente en tus datos de Cloud Storage.

En esta página se describe cómo usar la herramienta de línea de comandos gcloud para llevar a cabo tareas de big data, 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 empezar

Para sacar el máximo partido de los ejemplos que se muestran en esta página, debe completar lo siguiente (si aún no lo ha hecho):

Copiar muchos archivos en un segmento

El comando cp sube grandes cantidades de archivos de forma eficiente realizando copias en paralelo (multihilo o multiproceso) automáticamente según sea necesario. Para copiar subdirectorios de forma recursiva, usa la marca --recursive en el comando. Por ejemplo, para copiar archivos, incluidos los subdirectorios, de un directorio local llamado top-level-dir a un segmento, puede usar el siguiente comando:

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

Puedes usar comodines para que coincidan con un conjunto específico de nombres de una operación. Por ejemplo, para copiar solo los archivos que empiecen por image, haz lo siguiente:

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

Puedes quitar archivos con el mismo carácter comodín:

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

Además de copiar archivos locales en la nube y viceversa, también puedes copiar archivos en la nube. Por ejemplo:

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

gcloud storage detecta automáticamente que estás moviendo varios archivos y los crea en un nuevo directorio llamado subdir2.

Sincronizar un directorio local

Si quieres sincronizar un directorio local con un contenedor o viceversa, puedes hacerlo con el comando gcloud storage rsync. Por ejemplo, para que gs://example-bucket coincida con el contenido del directorio local local-dir, puedes usar lo siguiente:

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

Si usas la marca --delete-unmatched-destination-objects, se indica al comando que elimine los archivos del destino (gs://example-bucket en el comando anterior) que no estén presentes en el origen (local-dir). También puedes sincronizar dos contenedores.

Copiar archivos de gran tamaño en un segmento

Por lo general, cuando trabajas con Big Data, una vez que tus datos están en la nube, deben permanecer ahí. Una vez que tus datos estén en Google Cloud, podrás transferirlos muy rápido a otros servicios de la misma ubicación, como Compute Engine.

Para copiar un archivo local de gran tamaño en un contenedor, usa el siguiente comando:

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

Para copiar un archivo grande de un segmento ya creado, 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 subida y descarga reanudables de Cloud Storage. Esto es especialmente importante en el caso de los archivos grandes, ya que la probabilidad de que se produzca un fallo en la red de tu ISP aumenta con el tamaño de los datos que se transfieren. Al reanudar una subida en función del número de bytes que el servidor ha recibido realmente, gcloud storage evita tener que volver a enviar bytes innecesariamente y se asegura de que la subida se pueda completar. Se aplica la misma lógica a las descargas en función del tamaño del archivo local.

Configurar un segmento

Entre las tareas habituales de Big Data en las que querrá configurar un segmento se incluyen las siguientes: mover datos a una clase de almacenamiento diferente, configurar el control de versiones de objetos o configurar una regla de ciclo de vida.

Puedes consultar los detalles de la configuración de un segmento con buckets describe:

gcloud storage buckets describe gs://example-bucket

En la salida, verás la información de configuración del contenedor, la mayoría de la cual también se puede configurar mediante gcloud storage:

  • CORS controla la configuración de uso compartido de recursos entre dominios de un segmento.
  • Sitio web: permite que los objetos del contenedor actúen como páginas web o se usen como recursos estáticos en un sitio web.
  • Gestión de versiones: hace que se creen versiones no actuales cuando se eliminan objetos del segmento.
  • Clase de almacenamiento: te permite definir la clase de almacenamiento durante la creación del bucket.
  • Ciclo de vida: permite ejecutar operaciones periódicas en el segmento. La más habitual es la eliminación de objetos obsoletos.

Por ejemplo, supongamos que solo quiere conservar los archivos de un determinado contenedor durante un día. En ese caso, puede configurar la regla de ciclo de vida del contenedor de la siguiente manera:

echo '{ "rule": [{ "action": {"type": "Delete"}, "condition": {"age": 1}}]}' > lifecycle_config.json
gcloud storage buckets update gs://example-bucket --lifecycle-file=lifecycle_config.json

Ahora, los objetos de tu segmento que tengan más de un día se eliminarán automáticamente de este segmento. Puedes verificar la configuración que acabas de definir con el comando buckets describe (otros comandos de configuración funcionan de forma similar):

gcloud storage buckets describe gs://example-bucket

Compartir datos en un segmento

Cuando trabajes con big data, es probable que tengas que colaborar en archivos y dar acceso a personas o grupos concretos. Las políticas de gestión de identidades y accesos definen quién puede acceder a tus archivos y qué puede hacer. Puedes ver la política de gestión de identidades y accesos de un segmento con el comando buckets get-iam-policy:

gcloud storage buckets get-iam-policy gs://example-bucket

La respuesta al comando muestra los principales, que son las cuentas a las que se les ha concedido acceso a tu contenedor, y los roles, que son grupos de permisos concedidos a los principales.

Hay tres situaciones habituales en las que se comparten datos: compartir públicamente, compartir con un grupo y compartir con una persona:

  • Compartir públicamente: en el caso de un segmento cuyos contenidos estén pensados para que los consulte y lea cualquier usuario de Internet, puede configurar la política de IAM con la designación "AllUsers":

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

  • Compartir con un grupo: si los colaboradores no tienen acceso a tus otros recursos de Google Cloud , te recomendamos que crees un grupo de Google y, a continuación, lo añadas al contenedor. Por ejemplo, para dar acceso al grupo de Google my-group, puedes configurar la siguiente política de gestión de identidades y accesos:

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

    Para obtener más información, consulta Usar un grupo para controlar el acceso a objetos.

  • Compartir con una persona: si tienes muchos colaboradores, usa un grupo para dar acceso en bloque. Para conceder acceso de lectura a una persona, sigue estos pasos:

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

Limpiar un segmento

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

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

Trabajar con sumas de comprobación

Al realizar copias, los comandos gcloud storage cp y gcloud storage rsync validan que la suma de comprobación del archivo de origen coincida con la suma de comprobación del archivo de destino. En el caso poco probable de que las sumas de comprobación no coincidan, gcloud storage elimina la copia no válida y muestra un mensaje de advertencia. Para obtener más información, consulta Validación de sumas de comprobación.

Puedes usar gcloud storage para obtener la suma de comprobación de un objeto de un segmento. Por ejemplo, supongamos que copias un objeto de datos públicos de Landsat en tu segmento 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 comprobación de la versión del archivo del segmento público y de tu versión del archivo en tu segmento para asegurarte de que coinciden:

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 comprobación de un archivo local. Por ejemplo, supongamos que tus datos están en un archivo de un centro de datos local y los has copiado en Cloud Storage. Puede usar gcloud storage hash para obtener la suma de comprobación de su archivo local y, a continuación, compararla con la suma de comprobación del archivo que ha copiado en un bucket. Para obtener la suma de comprobación de un archivo local, usa lo siguiente:

gcloud storage hash local-file

Valores MD5

En el caso de los objetos no compuestos, al ejecutar gcloud storage objects describe en un objeto de un segmento, se obtiene un resultado como el 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==
...

Al ejecutar gcloud storage hash en un archivo local, se obtiene un resultado como el siguiente:

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

Ambos resultados tienen un valor CRC32c y MD5. No hay ningún valor MD5 para los objetos compuestos, como los que se crean a partir de subidas compuestas paralelas.

Siguientes pasos