O Cloud Storage é um componente essencial para quem armazena e trabalha com Big Data no Google Cloud. Por exemplo, é possível usar o Cloud Storage para carregar dados no BigQuery, reter arquivos de preparo e dados temporários para pipelines do Dataflow e integrar com Dataproc, para executar jobs do Apache Hadoop ou do Apache Spark diretamente nos dados no Cloud Storage.
Confira nesta página como usar a ferramenta de linha de comando gcloud para realizar tarefas de Big Data, como copiar arquivos grandes ou muitos arquivos em paralelo. Para uma introdução ao gcloud, consulte o guia de início rápido do gcloud.
Antes de começar
Para aproveitar ao máximo os exemplos mostrados nesta página, você precisa concluir as etapas a seguir (se ainda não tiver feito isso):
- Instale a CLI gcloud.
- Inicialize a CLI gcloud.
Como copiar muitos arquivos para um bucket
O comando cp
faz o upload eficiente de um grande número de arquivos por meio da execução automática
de cópias paralelas (multithread/multiprocessamento), conforme necessário. Para
copiar subdiretórios de maneira recorrente, use a flag --recursive
no comando.
Por exemplo, para copiar arquivos que incluem subdiretórios de um diretório
local chamado top-level-dir
para um bucket, use o seguinte:
gcloud storage cp top-level-dir gs://example-bucket --recursive
Você pode usar caracteres curinga para corresponder a um conjunto específico de nomes para uma operação. Por exemplo, para copiar somente os arquivos que começam com image
:
gcloud storage cp top-level-dir/subdir/image* gs://example-bucket --recursive
Também é possível remover arquivos usando o mesmo caractere curinga:
gcloud storage rm gs://example-bucket/top-level-dir/subdir/image*
Além de copiar arquivos locais para a nuvem e vice-versa, é possível copiar na nuvem. Por exemplo:
gcloud storage cp gs://example-bucket/top-level-dir/subdir/** gs://example-bucket/top-level-dir/subdir/subdir2
gcloud storage
detecta automaticamente que você está migrando vários arquivos e
os cria em um novo diretório chamado subdir2
.
Como sincronizar um diretório local
Para sincronizar um diretório local com um bucket e vice-versa, use o comando gcloud storage rsync
. Por exemplo, para fazer com que gs://example-bucket
corresponda aos conteúdos do diretório local local-dir
, use o comando:
gcloud storage rsync local-dir gs://example-bucket --recursive
Se você usar a flag --delete-unmatched-destination-objects
, ela indicará ao comando que ele deve excluir arquivos no destino
(gs://example-bucket
no comando acima) que não estão presentes na
origem (local-dir
). Também é possível sincronizar dois buckets.
Como copiar arquivos grandes para um bucket
Em geral, quando se trabalha com muitos dados, uma vez que eles estejam na nuvem, precisam permanecer lá. Quando seus dados estão no Google Cloud, é muito rápido transferi-los para outros serviços no mesmo local, como o Compute Engine.
Para copiar um arquivo local grande em um bucket, use:
gcloud storage cp local-file gs://example-bucket
Para copiar um arquivo grande de um bucket atual, use:
gcloud storage cp gs://example-source-bucket/file gs://example-destination-bucket
gcloud storage
aproveita ao máximo os recursos de upload e download retomáveis do
Cloud Storage. Para arquivos grandes, isso é particularmente importante porque a probabilidade de uma falha de rede no ISP aumenta com o tamanho dos dados que estão sendo transferidos. Ao retomar um upload com base em quantos bytes o servidor
realmente recebeu, gcloud storage
evita
o reenvio desnecessário de bytes e garante que o upload possa ser eventualmente
concluído. A mesma lógica é aplicada aos downloads com base no tamanho do arquivo local.
Como configurar um bucket
É ideal configurar um bucket para tarefas típicas com Big Data, como mover dados para uma classe de armazenamento diferente e configurar o controle de versão de objetos ou uma regra de ciclo de vida.
Para listar os detalhes de configuração de um bucket, use buckets describe
:
gcloud storage buckets describe gs://example-bucket
Na saída, observe as informações de configuração do bucket. A maioria delas
também pode ser configurada por meio de gcloud storage
:
- Compartilhamento de recursos entre origens (CORS, na sigla em inglês): controla as configurações de um bucket de compartilhamento de recursos entre origens diferentes.
- Site da Web: permite que objetos no bucket atuem como páginas da Web ou sejam usados como recursos estáticos em um site.
- Controle de versão: faz com que exclusões em objetos no bucket criem versões arquivadas.
- Classe de armazenamento: permite configurar a classe de armazenamento definida durante a criação do bucket.
- Ciclo de vida: permite que operações periódicas sejam executadas no bucket. A mais comum é a exclusão de objetos obsoletos.
Por exemplo, suponha que você queira manter os arquivos em um determinado bucket por apenas um dia. Para isso, você pode configurar a regra de ciclo de vida para o bucket com:
echo '{ "rule": [{ "action": {"type": "Delete"}, "condition": {"age": 1}}]}' > lifecycle_config.json
gcloud storage buckets update gs://example-bucket --lifecycle-file=lifecycle_config.json
Agora, todos os objetos no seu bucket com mais de um dia serão automaticamente excluídos dele. Verifique a configuração que você acabou de definir com o comando buckets describe
. Outros comandos de configuração funcionam de maneira semelhante:
gcloud storage buckets describe gs://example-bucket
Como compartilhar dados em um bucket
Ao usar Big Data, você provavelmente trabalhará em arquivos de maneira colaborativa e
precisará permitir o acesso de pessoas ou grupos específicos.
As políticas de gerenciamento de identidade e acesso definem quem pode acessar seus arquivos e o que eles podem fazer.
Para visualizar a política de IAM de um bucket, use o
comando buckets get-iam-policy
:
gcloud storage buckets get-iam-policy gs://example-bucket
A resposta ao comando exibe principais, que são contas com acesso ao bucket, e papéis, que são grupos de permissões concedidas aos principais.
Três cenários comuns para o compartilhamento de dados são o compartilhamento público, o compartilhamento com um grupo e o compartilhamento com uma pessoa:
Compartilhamento público: para um bucket com conteúdo que deve ser listado e lido por qualquer pessoa na Internet, você pode configurar a política de IAM usando a classificação "AllUsers":
gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=allUsers --role=roles/storage.objectViewer
Compartilhamento com um grupo: para colaboradores que não têm acesso aos seus outros recursos do Google Cloud, recomendamos que você crie um grupo do Google e adicione grupo do Google ao bucket. Por exemplo, para conceder acesso ao grupo do Google
my-group
, configure a seguinte política do IAM:gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=group:my-group@googlegroups.com --role=roles/storage.objectViewer
Para mais informações, consulte Como usar um grupo para controlar o acesso a objetos.
Compartilhamento com uma pessoa: para muitos colaboradores, use um grupo para conceder acesso em massa. Para uma pessoa, é possível conceder acesso de leitura da seguinte maneira:
gcloud storage buckets add-iam-policy-binding gs://example-bucket --member=user:liz@gmail.com --role=roles/storage.objectViewer
Como limpar um bucket
Você pode limpar um bucket rapidamente com este comando:
gcloud storage rm gs://example-bucket/ --recursive
Como trabalhar com somas de verificação
Ao executar cópias, os comandos gcloud storage cp
e gcloud storage rsync
validam se o checksum do arquivo de origem corresponde ao checksum do
arquivo de destino. No caso raro de checksums não corresponderem,
gcloud storage
exclui a cópia inválida e mostra uma mensagem de aviso. Para mais informações, consulte Validação de checksum.
Use gcloud storage
para conseguir o checksum de um objeto em um bucket. Por
exemplo, suponha que você copie um objeto de dados públicos da Landsat
para seu bucket de trabalho com:
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
Agora, é possível conseguir as somas de verificação da versão do arquivo no bucket público e no seu bucket para garantir que elas coincidem:
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
Também é possível usar gcloud storage
para calcular o checksum de um arquivo local. Agora, imagine que seus dados estejam em um arquivo em um data center local e você os copiou para o Cloud Storage. É possível usar gcloud storage hash
para conseguir o checksum do seu arquivo local e compará-lo ao checksum da cópia do arquivo no bucket. Para conseguir a soma de verificação de um arquivo local, use o comando a seguir:
gcloud storage hash local-file
Valores MD5
No caso de objetos não compostos, executar gcloud storage objects describe
em um
objeto de um bucket retorna uma saída semelhante a esta:
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== ...
Executar gcloud storage hash
em um arquivo local retorna uma saída semelhante a esta:
--- crc32c_hash: IJfuvg== digest_format: base64 md5_hash: +bqpwgYMTRn0kWmp5HXRMw== url: file.txt
Ambas as saídas têm um valor CRC32c e MD5. Não há valor MD5 para objetos compostos, como aqueles criados a partir de uploads compostos paralelos.