Conector do Cloud Storage

A biblioteca Java de código aberto do conector do Cloud Storage permite executar jobs do Apache Hadoop ou do Apache Spark diretamente em dados no Cloud Storage.

O Lightning Engine melhora a conectividade com o Cloud Storage para otimizar o desempenho do mecanismo nativo. O conector aprimorado do Cloud Storage minimiza as operações de metadados para reduzir custos, enquanto um committer de saída de arquivo otimizado desbloqueia o desempenho e a confiabilidade para cargas de trabalho do Spark. Preencha o formulário de acesso antecipado para solicitar acesso antecipado a esse recurso de pré-lançamento particular.

Benefícios do conector do Cloud Storage

  • Acesso direto a dados:armazene seus dados no Cloud Storage e acesse-os diretamente. Não é necessário transferi-lo antes para o HDFS.
  • Compatibilidade com HDFS:você pode acessar seus dados no Cloud Storage usando o prefixo gs:// em vez de hdfs://.
  • Interoperabilidade:armazenar dados no Cloud Storage permite interoperabilidade ininterrupta entre os serviços do Spark, do Hadoop e outros do Google.
  • Acessibilidade de dados:ao encerrar um cluster do Hadoop, ao contrário do HDFS, você continua tendo acesso aos seus dados no Cloud Storage.
  • Alta disponibilidade de dados:os dados armazenados no Cloud Storage estão amplamente disponíveis e são replicados globalmente sem perda de desempenho.
  • Não há sobrecarga de gerenciamento de armazenamento:diferentemente do HDFS, o Cloud Storage não exige uma rotina de manutenção, como verificação do sistema de arquivos, upgrade ou downgrade para versões anteriores do sistema de arquivos.
  • Inicialização rápida:no HDFS, um job do MapReduce não pode iniciar até que o NameNode esteja fora do modo de segurança, um processo que pode levar de alguns segundos ou muitos minutos, dependendo do tamanho e do estado dos seus dados. Com o Cloud Storage, inicie o job assim que os nós de tarefa começarem, o que gera uma economia significativa no longo prazo.

Configuração do conector em clusters do Serviço Gerenciado para Apache Spark

O conector do Cloud Storage é instalado por padrão em todos os nós do cluster do Serviço Gerenciado para Apache Spark no diretório /usr/local/share/google/managed-spark/lib/. As subseções a seguir descrevem as etapas que você pode seguir para concluir a configuração do conector em clusters do Serviço Gerenciado para Apache Spark.

Conta de serviço da VM

Ao executar o conector em nós de cluster do Serviço Gerenciado para Apache Spark e outras VMs do Compute Engine, a propriedade google.cloud.auth.service.account.enable é definida como false por padrão. Isso significa que não é necessário configurar as credenciais da conta de serviço da VM para o conector. As credenciais da conta de serviço da VM são fornecidas pelo servidor de metadados da VM.

A conta de serviço da VM do Serviço Gerenciado para Apache Spark precisa ter permissão para acessar seu bucket do Cloud Storage.

Se você usa uma conta de serviço personalizada com um cluster de jobs do Spark 2.2+: se você selecionar uma conta de serviço personalizada ao criar um cluster de versão de imagem do Serviço Gerenciado para Apache Spark 2.2+ em que você envia jobs do Spark, e se os jobs do Spark lerem ou gravarem no Cloud Storage, para evitar problemas de permissão que podem causar falhas no job, adicione a seguinte configuração (mostrada em negrito) ao código de criação da sessão do Spark:

spark = SparkSession.builder \
.appName(appName) \
.config("fs.gs.auth.type", "SERVICE_ACCOUNT_JSON_KEYFILE") \
.config("fs.gs.auth.service.account.json.keyfile", "path/to/your/keyfile.json") \
.getOrCreate()

Para verificar se as permissões estão definidas corretamente, confira se a conta de serviço personalizada tem as permissões storage.objects.get e storage.objects.create:

  1. Ver acesso atual para listar os papéis concedidos à conta de serviço personalizada.
  2. Encontre um papel ou uma permissão para pesquisar as permissões associadas a um papel.

Versões de conector selecionadas pelo usuário

As versões padrão do conector do Cloud Storage usadas nas imagens mais recentes instaladas em clusters do Serviço gerenciado para Apache Spark estão listadas nas páginas de versão da imagem. Se o aplicativo depender de uma versão de conector não padrão implantada no cluster, faça uma destas ações para usar a versão selecionada:

  • Crie um cluster com a flag --metadata=GCS_CONNECTOR_VERSION=x.y.z, que atualiza o conector usado por aplicativos em execução no cluster para a versão especificada do conector.
  • Inclua e realoque as classes e dependências do conector para a versão que você está usando no jar do aplicativo. A mudança é necessária para evitar um conflito entre a versão do conector implantada e a versão padrão instalada no cluster do Serviço Gerenciado para Apache Spark. Consulte também o exemplo de realocação de dependências do Maven.

Configuração do conector em clusters que não são do Serviço Gerenciado para Apache Spark

Siga estas etapas para configurar o conector do Cloud Storage em um cluster que não seja do Managed Service para Apache Spark, como um cluster do Apache Hadoop ou Spark que você usa para mover dados HDFS locais para o Cloud Storage.

  1. Fazer o download do conector

  2. Instalar o conector.

    Siga as instruções do GitHub para instalar, configurar e testar o conector do Cloud Storage.

Uso do conector

É possível usar o conector para acessar dados do Cloud Storage das seguintes maneiras:

Uso do Java

O conector do Cloud Storage requer o Java 8.

Confira a seguir uma seção de exemplo de gerenciamento de dependências do Maven POM para o conector do Cloud Storage. Para mais informações, consulte Gerenciamento de dependências.

<dependency>
    <groupId>com.google.cloud.bigdataoss</groupId>
    <artifactId>gcs-connector</artifactId>
    <version>hadoopX-X.X.XCONNECTOR VERSION</version>
    <scope>provided</scope>
</dependency>

Para uma versão sombreada:

<dependency>
    <groupId>com.google.cloud.bigdataoss</groupId>
    <artifactId>gcs-connector</artifactId>
    <version>hadoopX-X.X.XCONNECTOR VERSION</version>
    <scope>provided</scope>
    <classifier>shaded</classifier>
</dependency>

Suporte para conectores

O conector do Cloud Storage tem o suporte do Google Cloud para uso com produtos e casos de uso doGoogle Cloud . Quando usado com o Serviço Gerenciado para Apache Spark, ele tem o mesmo nível de suporte. Para mais informações, consulte Receber suporte.

Conectar-se ao Cloud Storage usando gRPC

Por padrão, o conector do Cloud Storage no Serviço gerenciado para Apache Spark usa a API JSON do Cloud Storage. Esta seção mostra como ativar o conector do Cloud Storage para usar o gRPC.

Considerações de uso

Ao usar o conector do Cloud Storage com o gRPC, considere o seguinte:

  • Local do bucket regional:o gRPC só pode melhorar as latências de leitura quando as VMs do Compute Engine e os buckets do Cloud Storage estão localizados na mesma região do Compute Engine.
  • Jobs de leitura intensiva:o gRPC pode oferecer latências de leitura aprimoradas para leituras de longa duração e ajudar em cargas de trabalho de leitura intensiva. Não é recomendado para aplicativos que criam um canal gRPC, executam um cálculo curto e fecham o canal.
  • Solicitações não autenticadas:o gRPC não aceita solicitações não autenticadas.

Requisitos

Os requisitos a seguir se aplicam ao usar o gRPC com o conector do Cloud Storage:

Ativar o gRPC no conector do Cloud Storage

É possível ativar o gRPC no conector do Cloud Storage no nível do cluster ou do job. Depois de ativado no cluster, as solicitações de leitura do conector do Cloud Storage usam gRPC. Se ativado em um job em vez do nível do cluster, as solicitações de leitura do conector do Cloud Storage usarão gRPC apenas para o job.

Ativar um cluster

Para ativar o gRPC no conector do Cloud Storage no nível do cluster, defina a propriedade core:fs.gs.client.type=STORAGE_CLIENT ao criar um cluster do Serviço Gerenciado para Apache Spark. Depois que o gRPC é ativado no nível do cluster, as solicitações de leitura do conector do Cloud Storage feitas por jobs em execução no cluster usam o gRPC.

Exemplo da CLI gcloud:

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT_ID \
    --region=REGION \
    --properties=core:fs.gs.client.type=STORAGE_CLIENT

Substitua:

  • CLUSTER_NAME: especifique um nome para o cluster.
  • PROJECT_NAME: o ID do projeto em que o cluster está localizado. Os IDs do projeto estão listados na seção Informações do projeto no painel do console Google Cloud .
  • REGION: especifique uma região do Compute Engine em que o cluster será localizado.

Ativar um job

Para ativar o gRPC no conector do Cloud Storage para um job específico, inclua --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT ao enviar um job.

Exemplo: execute um job em um cluster que usa gRPC para ler do Cloud Storage.

  1. Crie um script PySpark /tmp/line-count.py local que use gRPC para ler um arquivo de texto do Cloud Storage e gerar o número de linhas no arquivo.

    cat <<EOF >"/tmp/line-count.py"
    #!/usr/bin/python
    import sys
    from pyspark.sql import SparkSession
    path = sys.argv[1]
    spark = SparkSession.builder.getOrCreate()
    rdd = spark.read.text(path)
    lines_counter = rdd.count()
    print("There are {} lines in file: {}".format(lines_counter,path))
    EOF
    
  2. Crie um arquivo de texto /tmp/line-count-sample.txt local.

    cat <<EOF >"/tmp/line-count-sample.txt"
    Line 1
    Line 2
    line 3
    EOF
    
  3. Faça upload dos arquivos /tmp/line-count.py e /tmp/line-count-sample.txt locais para o bucket no Cloud Storage.

    gcloud storage cp /tmp/line-count* gs://BUCKET
    
  4. Execute o job line-count.py no cluster. Defina --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT para ativar o gRPC nas solicitações de leitura do conector do Cloud Storage.

    gcloud dataproc jobs submit pyspark gs://BUCKET/line-count.py \
    --cluster=CLUSTER_NAME \
    --project=PROJECT_ID  \
    --region=REGION \
    --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT \
    -- gs://BUCKET/line-count-sample.txt
    

    Substitua:

    • CLUSTER_NAME: o nome de um cluster atual.
    • PROJECT_NAME: o ID do projeto. Os IDs do projeto estão listados na seção Informações do projeto do painel do console Google Cloud .
    • REGION: a região do Compute Engine em que o cluster está localizado.
    • BUCKET: o bucket do Cloud Storage.

Gerar métricas do lado do cliente gRPC

É possível configurar o conector do Cloud Storage para gerar métricas relacionadas ao gRPC no Cloud Monitoring. As métricas relacionadas ao gRPC podem ajudar você a fazer o seguinte:

  • Monitore e otimize a performance das solicitações gRPC para o Cloud Storage
  • Resolver e depurar problemas
  • Receba insights sobre o uso e o comportamento dos aplicativos

Para informações sobre como configurar o conector do Cloud Storage para gerar métricas relacionadas ao gRPC, consulte Usar métricas do lado do cliente gRPC.

Recursos