Utilizzo di Cloud Storage con i big data

Cloud Storage è una parte fondamentale dell'archiviazione e dell'utilizzo dei Big Data su Google Cloud. Ad esempio, puoi utilizzare Cloud Storage per caricare i dati in BigQuery, archiviare i file di staging e i dati temporanei per le pipeline Dataflow e integrarti con Managed Service for Apache Spark, in modo che tu possa eseguire job Apache Hadoop o Apache Spark direttamente sui dati in Cloud Storage.

Questa pagina descrive come utilizzare lo strumento a riga di comando gcloud per eseguire attività di big data, come la copia di file di grandi dimensioni o la copia di molti file in parallelo. Per un'introduzione a gcloud, consulta la guida rapida di gcloud.

Prima di iniziare

Per sfruttare al meglio gli esempi mostrati in questa pagina, devi completare i seguenti passaggi (se non l'hai ancora fatto):

Copiare molti file in un bucket

Il comando cp carica in modo efficiente un numero elevato di file eseguendo automaticamente copie parallele (multithread/multiprocesso) in base alle esigenze. Per copiare in modo ricorsivo le sottodirectory, utilizza il flag --recursive nel comando. Ad esempio, per copiare i file, incluse le sottodirectory, da una directory locale denominata top-level-dir a un bucket, puoi utilizzare:

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

Puoi utilizzare i caratteri jolly per trovare un insieme specifico di nomi per un'operazione. Ad esempio, per copiare solo i file che iniziano con image:

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

Puoi rimuovere i file utilizzando lo stesso carattere jolly:

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

Oltre a copiare i file locali nel cloud e viceversa, puoi anche copiare nel cloud, ad esempio:

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

gcloud storage rileva automaticamente che stai spostando più file e li crea in una nuova directory denominata subdir2.

Sincronizzare una directory locale

Se vuoi sincronizzare una directory locale con un bucket o viceversa, puoi farlo con il gcloud storage rsync comando. Ad esempio, per fare in modo che gs://example-bucket corrisponda ai contenuti della directory locale local-dir, puoi utilizzare:

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

Se utilizzi il flag --delete-unmatched-destination-objects, il comando elimina i file nella destinazione (gs://example-bucket nel comando precedente) che non sono presenti nell'origine (local-dir). Puoi anche sincronizzare due bucket.

Copiare file di grandi dimensioni in un bucket

In generale, quando lavori con i big data, una volta che i dati sono nel cloud, dovrebbero rimanere lì. Una volta inseriti i dati Google Cloud, il trasferimento ad altri servizi nella stessa località, come Compute Engine, è molto rapido.

Per copiare un file locale di grandi dimensioni in un bucket, utilizza:

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

Per copiare un file di grandi dimensioni da un bucket esistente, utilizza:

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

gcloud storage sfrutta appieno le funzionalità di caricamento ripristinabile e download di Cloud Storage. Per i file di grandi dimensioni, questo è particolarmente importante perché la probabilità di un errore di rete del tuo ISP aumenta con le dimensioni dei dati trasferiti. Riprendendo un caricamento in base al numero di byte effettivamente ricevuti dal server , gcloud storage evita di inviare nuovamente i byte inutilmente e garantisce che il caricamento possa essere completato. La stessa logica viene applicata ai download in base alle dimensioni del file locale.

Configurare un bucket

Le attività tipiche di big data in cui dovrai configurare un bucket includono quando sposti i dati in una classe di archiviazione diversa, configuri il controllo delle versioni degli oggetti o imposti una regola del ciclo di vita.

Puoi elencare i dettagli di configurazione di un bucket con buckets describe:

gcloud storage buckets describe gs://example-bucket

Nell'output, nota le informazioni di configurazione del bucket, la maggior parte delle quali è configurabile anche tramite gcloud storage:

  • CORS: controlla le impostazioni di condivisione delle risorse tra origini per un bucket.
  • Sito web: consente agli oggetti nel bucket di fungere da pagine web o di essere utilizzati come asset statici in un sito web.
  • Controllo delle versioni: fa sì che le eliminazioni degli oggetti nel bucket creino versioni non correnti.
  • Classe di archiviazione: consente di impostare la classe di archiviazione impostata durante la creazione del bucket.
  • Ciclo di vita: consente di eseguire operazioni periodiche su l bucket. La più comune è l'eliminazione degli oggetti obsoleti.

Ad esempio, supponiamo che tu voglia conservare i file in un bucket specifico solo per un giorno, quindi puoi configurare la regola del ciclo di vita per il 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

Ora, tutti gli oggetti nel bucket più vecchi di un giorno verranno eliminati automaticamente da questo bucket. Puoi verificare la configurazione appena impostata con il buckets describe comando (gli altri comandi di configurazione funzionano in modo simile):

gcloud storage buckets describe gs://example-bucket

Condividere i dati in un bucket

Quando lavori con i big data, è probabile che tu collabori ai file e che tu debba essere in grado di concedere l'accesso a persone o gruppi specifici. I criteri Identity and Access Management definiscono chi può accedere ai tuoi file e cosa può fare. Puoi visualizzare i criteri IAM di un bucket utilizzando il buckets get-iam-policy comando:

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

La risposta al comando mostra le entità, ovvero gli account a cui è stato concesso l'accesso al bucket, e i ruoli, ovvero i gruppi di autorizzazioni concesse alle entità.

Tre scenari comuni per la condivisione dei dati sono la condivisione pubblica, la condivisione con un gruppo e la condivisione con una persona:

  • Condivisione pubblica: per un bucket i cui contenuti devono essere elencati e letti da chiunque su internet, puoi configurare i criteri IAM utilizzando la designazione "allUsers":

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

  • Condivisione con un gruppo: per i collaboratori che non hanno accesso alle altre Google Cloud risorse, ti consigliamo di creare un gruppo Google e poi di aggiungere il gruppo Google al bucket. Ad esempio, per concedere l'accesso al gruppo Google my-group, puoi configurare i seguenti criteri IAM:

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

    Per ulteriori informazioni, consulta Utilizzare un gruppo per controllare l'accesso agli oggetti.

  • Condivisione con una persona: per molti collaboratori, utilizza un gruppo per concedere l'accesso in blocco. Per una persona, puoi concedere l'accesso in lettura nel seguente modo:

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

Pulire un bucket

Puoi pulire rapidamente un bucket con il seguente comando:

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

Utilizzare i checksum

Quando esegui le copie, i comandi gcloud storage cp e gcloud storage rsync verificano che il checksum del file di origine corrisponda al checksum del file di destinazione. Nel raro caso in cui i checksum non corrispondano, gcloud storage elimina la copia non valida e stampa un messaggio di avviso. Per ulteriori informazioni, consulta la sezione relativa alla convalida dei checksum.

Puoi utilizzare gcloud storage per ottenere il checksum di un oggetto in un bucket. Ad esempio, supponiamo di copiare un oggetto di dati pubblici Landsat nel bucket di lavoro con:

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

Ora puoi ottenere i checksum sia della versione del file del bucket pubblico sia della tua versione del file nel bucket per assicurarti che corrispondano:

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

Puoi anche utilizzare gcloud storage per calcolare il checksum di un file locale. Ad esempio, supponiamo che i tuoi dati si trovino in un file in un data center locale e che tu li abbia copiati in Cloud Storage. Puoi utilizzare gcloud storage hash per ottenere il checksum del file locale e confrontarlo con il checksum del file copiato in un bucket. Per ottenere il checksum di un file locale, utilizza:

gcloud storage hash local-file

Valori MD5

Per gli oggetti non compositi, l'esecuzione di gcloud storage objects describe su un oggetto in un bucket restituisce un output simile al seguente:

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==
...

L'esecuzione di gcloud storage hash su un file locale restituisce un output simile al seguente:

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

Entrambi gli output hanno un valore CRC32c e MD5. Non esiste un valore MD5 per gli oggetti compositi, come quelli creati da caricamenti compositi paralleli.

Passaggi successivi