Use o Cloud Storage com grandes volumes de dados

O Cloud Storage é uma parte fundamental do armazenamento e do trabalho com Big Data no Trusted Cloud by S3NS. Por exemplo, pode usar o Cloud Storage para carregar dados no BigQuery.

Esta página descreve como usar a ferramenta de linha de comandos gcloud para realizar tarefas de Big Data, como copiar ficheiros grandes ou copiar muitos ficheiros em paralelo. Para uma introdução à gcloud, consulte o início rápido da gcloud.

Antes de começar

Para tirar o máximo partido dos exemplos apresentados nesta página, tem de concluir o seguinte (se ainda não o tiver feito):

Copiar muitos ficheiros para um contentor

O comando cp carrega eficientemente um grande número de ficheiros executando automaticamente cópias paralelas (com várias linhas de execução/vários processamentos) conforme necessário. Para copiar subdiretórios recursivamente, use a flag --recursive no comando. Por exemplo, para copiar ficheiros, incluindo subdiretórios, de um diretório local com o nome top-level-dir para um contentor, pode usar:

gcloud storage cp top-level-dir gs://example-bucket --recursive

Pode usar carateres universais para fazer corresponder um conjunto específico de nomes para uma operação. Por exemplo, para copiar apenas ficheiros que começam com image:

gcloud storage cp top-level-dir/subdir/image* gs://example-bucket --recursive

Pode remover ficheiros usando o mesmo caráter universal:

gcloud storage rm gs://example-bucket/top-level-dir/subdir/image*

Além de copiar ficheiros locais para a nuvem e vice-versa, também pode 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 deteta automaticamente que está a mover vários ficheiros e cria-os num novo diretório denominado subdir2.

Sincronizar um diretório local

Se quiser sincronizar um diretório local com um contentor ou vice-versa, pode fazê-lo com o comando gcloud storage rsync. Por exemplo, para fazer com que gs://example-bucket corresponda ao conteúdo do diretório locallocal-dir, pode usar:

gcloud storage rsync local-dir gs://example-bucket --recursive

Se usar a flag --delete-unmatched-destination-objects, indica ao comando que elimine os ficheiros no destino (gs://example-bucket no comando acima) que não estão presentes na origem (local-dir). Também pode sincronizar entre dois contentores.

Copiar ficheiros grandes para um contentor

Em geral, quando trabalha com Big Data, assim que os dados estão na nuvem, devem permanecer aí. Depois de os dados estarem no Trusted Cloud by S3NS, é muito rápido transferi-los para outros serviços na mesma localização, como o Compute Engine.

Para copiar um ficheiro local grande para um contentor, use:

gcloud storage cp local-file gs://example-bucket

Para copiar um ficheiro grande de um contentor existente, use:

gcloud storage cp gs://example-source-bucket/file  gs://example-destination-bucket

gcloud storage tira total partido das funcionalidades de carregamento e download retomáveis do Cloud Storage. Isto é particularmente importante para ficheiros grandes, porque a probabilidade de uma falha de rede no seu ISP aumenta com o tamanho dos dados que estão a ser transferidos. Ao retomar um carregamento com base no número de bytes que o servidor recebeu efetivamente, o gcloud storage evita reenviar bytes desnecessariamente e garante que o carregamento pode ser concluído. A mesma lógica é aplicada às transferências com base no tamanho do ficheiro local.

Configurar um contentor

As tarefas típicas de Big Data em que vai querer configurar um contentor incluem quando move dados para uma classe de armazenamento diferente, configura a aplicação de versões de objetos ou configura uma regra do ciclo de vida.

Pode listar os detalhes de configuração de um contentor com buckets describe:

gcloud storage buckets describe gs://example-bucket

Na saída, repare nas informações de configuração do contentor, a maioria das quais também é configurável através de gcloud storage:

  • CORS: controla as definições de partilha de recursos de origem cruzada para um contentor.
  • Website: permite que os objetos no contentor atuem como páginas Web ou sejam usados como recursos estáticos num Website.
  • Controlo de versões: faz com que as eliminações de objetos no contentor criem versões não atuais.
  • Classe de armazenamento: permite-lhe definir a classe de armazenamento durante a criação do contentor.
  • Ciclo de vida: permite a execução de operações periódicas no contentor. A mais comum é a eliminação de objetos obsoletos.

Por exemplo, suponhamos que só quer manter os ficheiros num determinado contentor durante um dia. Nesse caso, pode configurar a regra do ciclo de vida para o contentor 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 contentor com mais de um dia são eliminados automaticamente deste contentor. Pode validar a configuração que acabou de definir com o comando buckets describe (outros comandos de configuração funcionam de forma semelhante):

gcloud storage buckets describe gs://example-bucket

Partilhar dados num contentor

Quando trabalha com grandes volumes de dados, é provável que trabalhe em ficheiros de forma colaborativa e tem de poder conceder acesso a pessoas ou grupos específicos. As políticas de gestão de identidade e de acesso definem quem pode aceder aos seus ficheiros e o que tem autorização para fazer. Pode ver a política de IAM de um contentor através do comando buckets get-iam-policy:

gcloud storage buckets get-iam-policy gs://example-bucket

A resposta ao comando mostra os principais, que são contas às quais foi concedido acesso ao seu contentor, e as funções, que são grupos de autorizações concedidas aos principais.

Limpar um depósito

Pode limpar um contentor rapidamente com o seguinte comando:

gcloud storage rm gs://example-bucket/ --recursive

Trabalhar com somas de verificação

Quando faz cópias, os comandos gcloud storage cp e gcloud storage rsync validam se a soma de verificação do ficheiro de origem corresponde à soma de verificação do ficheiro de destino. No caso raro de as somas de verificação não corresponderem, o gcloud storage elimina a cópia inválida e imprime uma mensagem de aviso. Para mais informações, consulte a validação da soma de verificação.

Também pode usar gcloud storage para calcular a soma de verificação de um ficheiro local. Por exemplo, suponhamos que os seus dados estão num ficheiro num centro de dados local e que os copiou para o Cloud Storage. Pode usar gcloud storage hash para obter a soma de verificação do seu ficheiro local e, em seguida, compará-la com a soma de verificação do ficheiro que copiou para um contentor. Para obter a soma de verificação de um ficheiro local, use:

gcloud storage hash local-file

Valores MD5

Para objetos não compostos, a execução de gcloud storage objects describe num objeto num contentor devolve um resultado semelhante ao seguinte:

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==
...

A execução de gcloud storage hash num ficheiro local devolve um resultado semelhante ao seguinte:

---
crc32c_hash: IJfuvg==
digest_format: base64
md5_hash: +bqpwgYMTRn0kWmp5HXRMw==
url: file.txt

Ambos os resultados têm um valor CRC32c e MD5. Não existe um valor MD5 para objetos compostos, como os criados a partir de carregamentos compostos paralelos.

O que se segue?