Usar o Cloud Storage com o Big Data

O Cloud Storage é um componente essencial para quem armazena e trabalha com Big Data no Trusted Cloud by S3NS. Por exemplo, é possível usar o Cloud Storage para carregar dados no BigQuery.

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 Trusted Cloud by S3NS, é 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.

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.

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