Como usar o Google Cloud Storage com o Big Data

O Cloud Storage é uma parte essencial do armazenamento e do trabalho com o Big Data no Google Cloud Platform. Alguns exemplos:

  • Como carregar dados no BigQuery.

  • Como usar o Cloud Dataproc, que instala automaticamente o conector do Cloud Storage compatível com o HDFS, ativando o uso de intervalos do Cloud Storage em paralelo com o HDFS.

  • Como usar um intervalo para reter arquivos de preparo e dados temporários para os canais do Cloud Dataflow.

  • Como usar um intervalo para importar seus dados genômicos para um conjunto de dados do Cloud Genomics.

Para o Cloud Genomics e o Cloud Dataflow, é necessário um intervalo do Cloud Storage. Para o BigQuery e o Cloud Dataproc, usar um intervalo do Cloud Storage é opcional, mas recomendado.

O gsutil é uma ferramenta de linha de comando que permite trabalhar com intervalos e objetos do Cloud Storage de maneira fácil e robusta, principalmente em cenários com muitos dados. Por exemplo, com o gsutil, você pode copiar muitos arquivos em paralelo com um único comando, copiar arquivos grandes com eficiência, calcular somas de verificação nos seus dados e medir o desempenho do seu computador local para o Cloud Storage.

Nesta página, nos concentraremos no uso do gsutil para tarefas com muitos dados. Para uma introdução mais simples ao gsutil, consulte Primeiros passos: como usar a ferramenta gsutil. A documentação detalhada de todos os comandos do gsutil está disponível on-line e na ajuda integrada que você recebe ao executar gsutil help.

Para aproveitar ao máximo os exemplos mostrados nesta página, você precisará ter:

Como copiar muitos arquivos para um intervalo

Se você tiver um grande número de arquivos para fazer upload, use a opção gsutil -m para executar uma cópia paralela (multithread/multiprocessamento). Para copiar os subdiretórios de modo recorrente, use a sinalização -R do comando cp. Por exemplo, para copiar arquivos, incluindo subdiretórios, de um diretório local chamado top-level-dir para um intervalo, você pode usar:

gsutil -m cp -R top-level-dir gs://example-bucket

Você pode usar curingas para corresponder a um conjunto específico de nomes para uma operação. Por exemplo, para copiar apenas arquivos que começam com image:

gsutil -m cp -R top-level-dir/subdir/image* gs://example-bucket

Você pode remover arquivos usando o mesmo curinga:

gsutil -m rm gs://example-bucket/top-level-dir/subdir/image*

Além de copiar arquivos locais para a nuvem e vice-versa, você também pode copiar na nuvem, por exemplo:

gsutil -m cp gs://example-bucket/top-level-dir/subdir/** gs://example-bucket/top-level-dir/subdir/subdir2

O gsutil detecta automaticamente que você está movendo vários arquivos e os cria em um novo diretório chamado subdir2.

Como sincronizar um diretório local

Se você quiser sincronizar um diretório local com um intervalo ou vice-versa, poderá fazer isso com o comando gsutil rsync. Por exemplo, para fazer com que gs://example-bucket corresponda ao conteúdo do diretório local-dir você pode usar:

gsutil -m rsync -r local-dir gs://example-bucket

Se você usar a sinalização rsync -d, ela comunicará ao gsutil para que exclua arquivos no destino (gs://example-bucket no comando acima) que não estão presentes na origem (local-dir). Você também pode sincronizar entre dois intervalos.

Como copiar arquivos grandes para um intervalo

Em geral, quando se trabalha com muitos dados, uma vez que eles estejam na nuvem, precisam permanecer lá. Quando seus dados estiverem na nuvem do Google, é muito rápido transferi-los para outros serviços, como o Compute Engine. Além disso, a saída de intervalos para serviços do Google Cloud no mesmo local ou em um sublocal é gratuita. Para mais informações, consulte Preços da rede.

Para copiar um arquivo local grande em um intervalo, use:

gsutil cp local-file gs://example-bucket

Para copiar um arquivo grande de um intervalo existente (por exemplo, dados públicos do Genomics), use:

gsutil cp gs://example-source-bucket/file  gs://example-destination-bucket

O gsutil aproveita ao máximo os recursos de upload e download recuperáveis ​​do Google 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, o gsutil evita o envio desnecessário de bytes e garante que o upload possa ser concluído. A mesma lógica é aplicada aos downloads com base no tamanho do arquivo local.

Se o gsutil cp não fornecer o desempenho necessário ao fazer o upload de arquivos grandes, será possível considerar a configuração de uploads compostos.

Como configurar um intervalo

Tarefas típicas com Big Data, em que você vai configurar um intervalo, incluem mover dados para uma classe de armazenamento diferente e configurar o acesso ao registro, o controle de versão do objeto ou uma regra de ciclo de vida.

Liste os detalhes de configuração de um intervalo com gsutil ls -L -b:

gsutil ls -L -b gs://example-bucket

Na saída, observe as informações de configuração do intervalo. A maioria delas também é configurável por meio do gsutil:

  • CORS: controla as configurações de compartilhamento de recursos entre origens para um intervalo.
  • Geração de registros: permite que você registre o uso do intervalo.
  • Site: permite que objetos no intervalo 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 intervalo criem versões arquivadas.
  • Classe de armazenamento: permite configurar a classe de armazenamento definida durante a criação do intervalo.
  • Ciclo de vida: permite que operações periódicas sejam executadas no intervalo. A mais comum é a exclusão de objetos obsoletos.

Por exemplo, suponha que você queira manter os arquivos em um determinado intervalo por apenas um dia. Para isso, você pode configurar a regra de ciclo de vida para o intervalo com:

echo '{ "rule": [{ "action": {"type": "Delete"}, "condition": {"age": 1}}]}' > lifecycle_config.json
gsutil lifecycle set lifecycle_config.json gs://example-bucket

Agora, todos os objetos no seu intervalo com mais de um dia serão automaticamente excluídos dele. Verifique a configuração que acabou de definir com o comando gsutil lifecycle (outros comandos de configuração funcionam de maneira semelhante):

gsutil lifecycle get gs://example-bucket

Como compartilhar dados em um intervalo

Ao trabalhar com Big Data, você provavelmente trabalhará em arquivos de maneira colaborativa e precisará permitir o acesso a pessoas ou grupos específicos. Cada objeto tem uma ACL que descreve quem pode acessá-lo. Consulte uma visualização de fácil utilização das ACLs de um objeto usando o comando gsutil acl:

gsutil acl get gs://example-bucket/file

A entidade que enviou o objeto (nesse caso, sua Conta do Google representada pelo token de atualização do OAuth2) recebe automaticamente o acesso PROPRIETÁRIO ao objeto (consulte Permissões e membros de projeto).

O restante da ACL do objeto é determinada pela ACL do objeto padrão no intervalo. Esse é um ponto comum de confusão: a ACL do intervalo controla o acesso ao intervalo (como a capacidade de criar e listar objetos), enquanto a ACL do objeto padrão controla a ACL que os objetos recebem na criação. As duas não são necessariamente a mesma coisa. Para mais informações sobre a diferença entre as duas, consulte Controle de acesso.

Você pode configurar seu intervalo para que qualquer pessoa com uma Conta do Google possa listar os arquivos nele. Observe que isso não lhes dá acesso aos dados. Assim, embora os usuários possam ver que bigfile existe no seu intervalo, eles não podem ver o conteúdo.

gsutil acl ch -g 'AllAuthenticatedUsers:R' gs://example-bucket

Você pode ver a ACL do intervalo com o comando ls -Lb:

gsutil ls -Lb gs://example-bucket

Agora, qualquer pessoa autenticada com uma Conta do Google pode listar arquivos no intervalo.

As três seções a seguir cobrem os três cenários comuns, compartilhamento de dados publicamente, com um grupo e com uma pessoa.

Publicamente

Para um intervalo legível publicamente, você pode configurar:

# Read access on the bucket so that is contents can be listed
gsutil acl ch -g AllUsers:R gs://example-bucket

# Default bucket ACL so any new objects added at a later date are readable.
gsutil defacl ch -g AllUsers:R gs://example-bucket

# Read access to all of its current contents.
gsutil -m acl ch -R -g AllUsers:R gs://example-bucket

Com um grupo

Para os colaboradores que não são membros do seu projeto do Google Cloud Platform, recomendamos que você crie um Grupo do Google e o adicione ao intervalo. Por exemplo, para o Grupo do Google gs-announce, você pode configurar:

# Read access to the bucket so that its contents can be listed.
gsutil acl ch -g 'gs-announce@googlegroups.com:R' gs://example-bucket

# Default bucket ACL so any new objects added at a later date are readable.
gsutil defacl ch -g 'gs-announce@googlegroups.com:R' gs://example-bucket

# Read access to all of a bucket's current contents.
gsutil -m acl ch -R -g 'gs-announce@googlegroups.com:R' gs://example-bucket

Para mais informações, consulte Como usar um grupo para controlar o acesso a objetos.

Com uma pessoa

Para muitos colaboradores, use um grupo. Para uma pessoa, você pode configurar o acesso desta maneira:

# Read access to the bucket so that its contents can be listed.
gsutil acl ch -u liz@gmail.com:R gs://example-bucket

# Default bucket ACL so any new objects added at a later date are readable.
gsutil defacl ch -u liz@gmail.com:R gs://example-bucket

# Read access to all of a bucket's current contents.
gsutil -m acl ch -R -u liz@gmail.com:R gs://example-bucket

Como mostrar quantos dados estão em um intervalo

Você pode usar o comando gsutil du para exibir o espaço total usado por todos os objetos para um intervalo especificado. Exemplo:

gsutil du -sh gs://example-bucket

Consulte a ajuda do comando gsutil du para mais opções que podem ser utilizadas, incluindo como retornar o tamanho de todos os objetos sob um prefixo.

Você também pode configurar a geração de registros de intervalos em que o tamanho total de um intervalo é informado automaticamente uma vez por dia. Para mais informações, consulte Registros de acesso. Se o número de objetos no seu intervalo for grande (por exemplo, centenas de milhares ou milhões), essa é uma maneira muito mais eficiente de rastrear o uso do espaço. O comando gsutil du calcula o uso de espaço fazendo solicitações de listagem de intervalo, que para intervalos grandes podem demorar muito tempo.

Você pode contar o número de arquivos em um intervalo com:

gsutil ls gs://example-bucket/** | wc -l

Como limpar um intervalo

Você pode limpar um intervalo rapidamente com este comando:

gsutil -m rm gs://example-bucket/**

Como trabalhar com somas de verificação

Ao executar cópias, os comandos gsutil cp e gsutil rsync validam que a soma de verificação do arquivo de origem corresponde à soma de verificação do arquivo de destino. No caso raro de as somas de verificação não coincidirem, o gsutil excluirá a cópia inválida e imprimirá uma mensagem de aviso. Para mais informações, consulte Validação da soma de verificação.

Você também pode usar o gsutil para conseguir a soma de verificação de um arquivo em um intervalo ou calcular a soma de verificação de um objeto local. Por exemplo, suponha que você copie um arquivo de dados públicos do Google Genomics para seu intervalo de trabalho com:

gsutil -m cp gs://genomics-public-data/1000-genomes/vcf/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf gs://example-bucket

Agora, você pode conseguir as somas de verificação da versão do intervalo público do arquivo e da versão do arquivo no seu intervalo para garantir que elas correspondam:

gsutil ls -L gs://example-bucket/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf
gsutil ls -L gs://genomics-public-data/1000-genomes/vcf/ALL.chrMT.phase1_samtools_si.20101123.snps.low_coverage.genotypes.vcf

Agora, suponha que seus dados estejam em um arquivo em um data center local e você os tenha copiado no Cloud Storage. Use o gsutil hash para conseguir a soma de verificação do seu arquivo local e, em seguida, compare-o com a soma de verificação do arquivo que você copiou para um intervalo. Para conseguir a soma de verificação de um arquivo local, use:

gsutil hash local-file

Valores MD5

Para objetos não compostos, executar gsutil ls -L em um objeto em um intervalo retorna a saída desta forma:

gs://example-bucket/100MBfile.txt:
        Creation time:          Thu, 26 Mar 2015 20:11:51 GMT
        Content-Length:         102400000
        Content-Type:           text/plain
        Hash (crc32c):          FTiauw==
        Hash (md5):             daHmCObxxQdY9P7lp9jj0A==
        ETag:                   CPjo7ILqxsQCEAE=
        Generation:             1427400711419000
        Metageneration:         1
        ACL:            [
        ....

Executar gsutil hash em um arquivo local retorna a saída desta forma:

Hashing     100MBfile.txt:
Hashes [base64] for 100MBfile.txt:
        Hash (crc32c):          FTiauw==
        Hash (md5):             daHmCObxxQdY9P7lp9jj0A==

Ambas as saídas têm um valor CRC32c e MD5. Não há valor MD5 para objetos carregados como objetos compostos, como é o caso quando você configura uploads compostos para o gsutil.

Como configurar uploads compostos paralelos

Você pode melhorar o desempenho ao fazer o upload de arquivos grandes configurando o gsutil para fazer o upload de cada arquivo dividindo-o em partes, fazendo o upload das partes em paralelo e usando o recurso de objeto composto do Cloud Storage para reunir as partes em um objeto composto. Para mais informações, consulte Uploads compostos paralelos. Os uploads compostos paralelos estão desativados por padrão.

Antes de configurar uploads compostos paralelos, esteja ciente das vantagens e desvantagens. A principal vantagem é que os uploads para arquivos grandes podem ser significativamente mais rápidos se a velocidade da rede e do disco não forem fatores limitantes. As desvantagens dos uploads compostos paralelos são:

  • Quando você (ou seus colaboradores) usa o gsutil para fazer o download de uploads compostos (como aqueles criados com uploads compostos paralelos do gsutil), recomendamos a instalação de um crcmod compilado, conforme abordado em gsutil help crcmod. Caso contrário, você verá uma mensagem avisando que o download de objetos compostos sem um crcmod compilado será executado muito lentamente. Observe que o crcmod compilado é recomendado para download, independentemente de a opção de upload composto paralelo estar ativada ou não.

  • Objetos compostos em um intervalo não têm hash MD5.

Depois de ter configurado e compilado o crcmod seguindo as etapas em gsutil help crcmod, configure seu arquivo .boto para que os uploads compostos paralelos estejam ativados por padrão. Para mais informações, consulte a configuração do gsutil, e em particular as configurações parallel_composite_upload_* na seção GSUtil do arquivo .boto.

Se você tiver ativado uploads compostos paralelos e fizer o upload de um arquivo grande para seu intervalo, perceberá que o arquivo foi enviado em partes de 50 MB em vez de um único upload. Se alguma falha ocorreu, por exemplo, devido a problemas temporários de rede, você pode executar novamente a cópia com a sinalização "sem clobber" (-n) para transmitir apenas os arquivos ausentes.

Lembre-se de que, ao verificar a integridade dos dados de um arquivo em um intervalo que você fez o upload como um objeto composto, existe apenas um valor de hash CRC32c e nenhum valor MD5.

Se você configurou uploads compostos paralelos, pode haver arquivos temporários que sobraram de uploads abortados. Se você não quiser retomar o upload, não há problema em excluir esses arquivos temporários:

gsutil -m rm gs://example-bucket/**/gsutil/tmp/parallel_composite_uploads/for_details_see/gsutil_help_cp**

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.