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

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:

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.

A seguir