Cloud Storage è un componente fondamentale per l'archiviazione e l'utilizzo dei big data su Google Cloud. Ad esempio, puoi utilizzare Cloud Storage per caricare i dati in BigQuery, archiviare file di staging e dati temporanei per le pipeline Dataflow e integrarti con Dataproc, in modo da eseguire i job Apache Hadoop o Apache Spark direttamente sui tuoi 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 di molti file in parallelo. Per un'introduzione a gcloud, consulta la guida rapida di gcloud.
Prima di iniziare
Per ottenere il massimo dagli esempi mostrati in questa pagina, devi completare quanto segue (se non l'hai ancora fatto):
- Installa la gcloud CLI.
- Inizializza la gcloud CLI.
Copia di molti file in un bucket
Il comando cp
carica in modo efficiente un numero elevato di file eseguendo automaticamente copie parallele (multi-thread/multi-elaborazione) in base alle esigenze. Per copiare in modo ricorsivo le sottodirectory, utilizza il flag --recursive
nel comando.
Ad esempio, per copiare file, incluse sottodirectory, da una directory locale top-level-dir
in un bucket, puoi utilizzare:
gcloud storage cp top-level-dir gs://example-bucket --recursive
Puoi utilizzare i caratteri jolly per associare un insieme specifico di nomi a 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 eseguire la copia 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
.
Sincronizzazione di una directory locale
Se vuoi sincronizzare una directory locale con un bucket o viceversa,
puoi farlo con il comando gcloud storage rsync
. 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 indica di eliminare i file nella destinazione (gs://example-bucket
nel comando precedente) che non sono presenti nell'origine (local-dir
). Puoi anche eseguire la sincronizzazione tra due bucket.
Copiare file di grandi dimensioni in un bucket
In generale, quando lavori con i big data, i dati devono rimanere nel cloud. Una volta che i dati sono in Google Cloud, è molto rapido trasferirli ad altri servizi nella stessa posizione, ad esempio Compute Engine.
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 e scaricamento con caricamento ripristinabile di Cloud Storage. Per i file di grandi dimensioni, questo è particolarmente importante perché la probabilità di un guasto della rete presso il tuo ISP aumenta con le dimensioni dei dati trasferiti. Ripristinando un caricamento in base al numero di byte che il server
ha effettivamente ricevuto, gcloud storage
evita di
inviare nuovamente i byte inutilmente e garantisce che il caricamento possa essere completato. La stessa logica viene applicata per i download in base alle dimensioni del
file locale.
Configurazione di un bucket
Le attività di big data tipiche in cui è consigliabile configurare un bucket includono lo spostamento dei dati in un'altra classe di archiviazione, la configurazione del controllo delle versioni degli oggetti o l'impostazione di 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, tieni presente le informazioni sulla configurazione del bucket, la maggior parte delle quali è anche configurabile tramite gcloud storage
:
- CORS: controlla le impostazioni di condivisione delle risorse tra origini per un bucket.
- Sito web: consente agli oggetti nel separato di fungere da pagine web o di essere utilizzati come asset statici in un sito web.
- Controllo delle versioni: le eliminazioni degli oggetti nel bucket generano versioni non correnti.
- Classe di archiviazione: consente di impostare la classe di archiviazione durante la creazione del bucket.
- Lifecycle: consente di eseguire operazioni periodiche sul bucket, la più comune è l'eliminazione di oggetti obsoleti.
Ad esempio, supponiamo che tu voglia conservare i file in un determinato bucket solo per un giorno. In questo caso, 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 che risalgono a più di un giorno fa verranno eliminati automaticamente da questo bucket. Puoi verificare la configurazione appena impostata con il comando buckets describe
(gli altri comandi di configurazione funzionano in modo simile):
gcloud storage buckets describe gs://example-bucket
Condivisione dei dati in un bucket
Quando lavori con i big data, probabilmente collaborerai sui file e dovrai essere in grado di concedere l'accesso a persone o gruppi specifici.
I criteri IAM (Identity and Access Management) definiscono chi può accedere ai tuoi file e cosa può fare. Puoi visualizzare il criterio IAM di un bucket utilizzando il comando buckets get-iam-policy
:
gcloud storage buckets get-iam-policy gs://example-bucket
La risposta al comando mostra gli principali, ovvero gli account a cui è stato concesso l'accesso al bucket, e i ruoli, ovvero i gruppi di autorizzazioni concesse ai principali.
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 il criterio 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 risorse Google Cloud, ti consigliamo di creare un gruppo Google e di aggiungerlo al bucket. Ad esempio, per concedere l'accesso al gruppo Google
my-group
, puoi configurare il seguente criterio 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 accesso collettivamente. Per una persona, puoi concedere l'accesso in lettura nel seguente modo:
gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=user:liz@gmail.com --role=roles/storage.objectViewer
Pulizia di un bucket
Puoi pulire un bucket rapidamente con il seguente comando:
gcloud storage rm gs://example-bucket/ --recursive
Utilizzo dei 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 Convalida del 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 di 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 nel 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 poi confrontarlo con il checksum del file che hai 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, ad esempio quelli creati da caricamenti compositi paralleli.