Usar o Cloud Storage com o Big Data

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):

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:

  • CORS: 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.

A seguir