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 o Serviço Gerenciado para Apache Spark, 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 Big Data, depois que eles são enviados para a nuvem, o ideal é que permaneçam 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 Google Cloud recursos, recomendamos que você crie um grupo do Google e adicione o 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:jeffersonloveshiking@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:
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.