Executar uma carga de trabalho em lote do Apache Spark

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Instalação

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

  4. Ative a API Dataproc.

    Ative a API

  5. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

  7. Ative a API Dataproc.

    Ative a API

Enviar uma carga de trabalho em lote do Spark

Console

Acesse os lotes do Dataproc no console do Google Cloud. Clique em CRIAR para abrir a página Criar lote.

Selecione e preencha os seguintes campos na página para enviar uma carga de trabalho em lote do Spark que calcula o valor aproximado de pi:

  • Informações em lote
    • ID do lote: especifique um ID para a carga de trabalho em lote. Esse valor precisa ter de 4 a 63 caracteres em letras minúsculas. Os caracteres válidos são /[a-z][0-9]-/.
    • Região: selecione uma região para executar a carga de trabalho.
  • Contêiner
    • Tipo de lote: Spark
    • Classe principal:
      org.apache.spark.examples.SparkPi
    • Arquivos jar:
      file:///usr/lib/spark/examples/jars/spark-examples.jar
    • Argumentos: 1.000
  • Configuração de execução É possível especificar uma conta de serviço a ser usada para executar sua carga de trabalho. Se você não especificar uma conta de serviço, a carga de trabalho será executada na conta de serviço padrão do Compute Engine.
  • Configuração de rede: a sub-rede VPC que executa cargas de trabalho do Spark sem servidor precisa atender aos requisitos listados em Configuração de rede do Dataproc sem servidor para o Spark. A lista de sub-redes exibe as sub-redes na rede selecionada que estão ativadas para o Acesso privado do Google.
  • Propriedades: insira o valor da chave (nome da propriedade) de qualquer propriedade do Spark com suporte que você queira que a carga de trabalho em lote do Spark use. Observação: diferentemente das propriedades de cluster do Dataproc em Compute Engine, as propriedades de carga de trabalho sem servidor do Dataproc para Spark não incluem um prefixo "spark:".
  • Outras opções

Clique em ENVIAR para executar a carga de trabalho em lote do Spark.

gcloud CLI

Para enviar uma carga de trabalho em lote do Spark para calcular o valor aproximado de pi, execute o comando gcloud dataproc batch submit spark (em inglês) da CLI gcloud localmente em uma janela do terminal ou no Cloud Shell.

gcloud dataproc batches submit spark \
    --region=region \
    --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
    --class=org.apache.spark.examples.SparkPi \
    -- 1000

Observações:

  • Sub-rede: a sub-rede VPC que executa cargas de trabalho do Spark sem servidor precisa atender aos requisitos listados em Configuração de rede do Dataproc sem servidor para o Spark. Se a sub-rede da rede default da região especificada no comando gcloud dataproc batches submit não estiver ativada para o Acesso privado do Google, siga um destes procedimentos:
    1. Ativar a sub-rede da rede padrão para a região do Acesso privado do Google ou
    2. Use a sinalização --subnet=[SUBNET_URI] no comando para especificar uma sub-rede com o Acesso privado do Google ativado. É possível executar o comando gcloud compute networks describe [NETWORK_NAME] para listar os URIs das sub-redes em uma rede.
  • --jars: o arquivo jar de exemplo é pré-instalado, e o argumento do comando 1000 transmitido para a carga de trabalho do SparkPi especifica 1.000 iterações da lógica de estimativa de pi. Os argumentos de entrada da carga de trabalho são incluídos após "-- ").
  • --properties: é possível adicionar a sinalização --properties para inserir qualquer propriedade Spark compatível que a carga de trabalho em lote do Spark use.
  • --deps-bucket: é possível adicionar essa sinalização para especificar um bucket do Cloud Storage em que o Dataproc Serverless for Spark fará upload das dependências da carga de trabalho. O prefixo de URI gs:// do bucket não é obrigatório. Só é possível especificar o caminho/nome do bucket, por exemplo, "mybucketname". Exceção: se a carga de trabalho em lote referenciar arquivos na máquina local, a sinalização --deps-bucket será necessária. O Dataproc Serverless para Spark fará upload dos arquivos locais em uma pasta /dependencies no bucket antes de executar a carga de trabalho em lote.
  • Outras opções:
    • É possível adicionar outras sinalizações de comando opcionais. Por exemplo, o comando a seguir configura a carga de trabalho em lote para usar um Metastore do Hive autogerenciado externo com uma configuração Spark padrão:
      gcloud dataproc batches submit \
          --properties=spark.sql.catalogImplementation=hive,spark.hive.metastore.uris=METASTORE_URI,spark.hive.metastore.warehouse.dir=WAREHOUSE_DIR> \
          other args ...
                 
      Consulte gcloud dataproc batches submit para ver as sinalizações de comando compatíveis.
    • Usar um Persistent History Server.
      1. Criar um servidor do Persistent History (PHS) em um cluster do Dataproc de nó único. Observação: o bucket-name do Cloud Storage precisa existir.
        gcloud dataproc clusters create PHS-cluster-name \
            --region=region \
            --single-node \
            --enable-component-gateway \
            --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/phs/*/spark-job-history
                     
      2. Enviar uma carga de trabalho em lote, especificando o servidor do histórico permanente em execução.
        gcloud dataproc batches submit spark \
            --region=region \
            --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
            --class=org.apache.spark.examples.SparkPi \
            --history-server-cluster=projects/project-id/regions/region/clusters/PHS-cluster-name
            -- 1000
                      

REST

Nesta seção, mostramos como criar uma carga de trabalho em lote para calcular o valor aproximado de pi usando a API Dataproc sem servidor do batches.create.

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • project-id: ID do projeto do Google Cloud
  • region: região
  • Observações:
    • Custom-container-image: especifique a imagem do contêiner personalizada usando o formato de nomenclatura de imagem do Docker: {hostname}/{project-id}/{image}:{tag}. Por exemplo, "gcr.io/my-project-id/my-image:1.0.1". Observação:é preciso hospedar seu contêiner personalizado no Container Registry.
    • Sub-rede:se a sub-rede da rede default para a region especificada não estiver ativada para Acesso privado do Google, siga um destes procedimentos:
      1. Ativar a sub-rede da rede padrão para o region para o Acesso privado do Google, ou
      2. Use o campo ExecutionConfig.subnetworkUri para especificar uma sub-rede com o Acesso privado do Google ativado. É possível executar o comando gcloud compute networks describe [NETWORK_NAME] para listar os URIs das sub-redes em uma rede.
    • sparkBatch.jarFileUris: o arquivo jar de exemplo é pré-instalado no ambiente de execução do Spark. O "1.000" sparkBatch.args é transmitido para a carga de trabalho do SparkPi e especifica 1.000 iterações da lógica de estimativa pi.
    • Spark properties: é possível usar o campo RuntimeConfig.properties para inserir qualquer propriedade do Spark compatível que a carga de trabalho em lote do Spark use.
    • Outras opções:

    Método HTTP e URL:

    POST https://dataproc.googleapis.com/v1/projects/project-id/locations/region/batches

    Corpo JSON da solicitação:

    {
      "sparkBatch":{
        "args":[
          "1000"
        ],
        "jarFileUris":[
          "file:///usr/lib/spark/examples/jars/spark-examples.jar"
        ],
        "mainClass":"org.apache.spark.examples.SparkPi"
      }
    }
    

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
    "name":"projects/project-id/locations/region/batches/batch-id",
      "uuid":",uuid",
      "createTime":"2021-07-22T17:03:46.393957Z",
      "sparkBatch":{
        "mainClass":"org.apache.spark.examples.SparkPi",
        "args":[
          "1000"
        ],
        "jarFileUris":[
          "file:///usr/lib/spark/examples/jars/spark-examples.jar"
        ]
      },
      "runtimeInfo":{
        "outputUri":"gs://dataproc-.../driveroutput"
      },
      "state":"SUCCEEDED",
      "stateTime":"2021-07-22T17:06:30.301789Z",
      "creator":"account-email-address",
      "runtimeConfig":{
        "properties":{
          "spark:spark.executor.instances":"2",
          "spark:spark.driver.cores":"2",
          "spark:spark.executor.cores":"2",
          "spark:spark.app.name":"projects/project-id/locations/region/batches/batch-id"
        }
      },
      "environmentConfig":{
        "peripheralsConfig":{
          "sparkHistoryServerConfig":{
          }
        }
      },
      "operation":"projects/project-id/regions/region/operation-id"
    }
    

Estime os custos da carga de trabalho.

O Dataproc sem servidor para cargas de trabalho do Spark consomem dados de unidade de computação (DCU, na sigla em inglês) e recursos de armazenamento de embaralhamento. Consulte Preços sem servidor do Dataproc para um exemplo que gera UsageMetrics para estimar o consumo e os custos do recurso da carga de trabalho.