Executar uma carga de trabalho em lote do Apache Spark

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 o Dataproc Batch no Console do Google Cloud. Clique em CRIAR para abrir a página Criar lote.

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

  • Informações do lote
    • ID do lote: especifique um ID para sua carga de trabalho em lote. Esse valor precisa ter de 4 a 63 caracteres minúsculos. Os caracteres válidos são /[a-z][0-9]-/.
    • Região: selecione uma região em que a carga de trabalho será executada.
  • 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: 1000
  • Configuração de execução: especifique 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 exibirá as sub-redes na rede selecionada ativadas para Acesso privado do Google.
  • Propriedades: insira o valor da chave (nome da propriedade) de qualquer propriedade compatível do Spark que você queira usar na carga de trabalho em lote do Spark. Observação: ao contrário das propriedades de cluster do Dataproc no Compute Engine, as propriedades de carga de trabalho sem servidor do Dataproc para o Spark não incluem um prefixo "quoquo;spark:".
  • Outras opções

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

gcloud

Para enviar uma carga de trabalho em lote do Spark para calcular o valor aproximado de pi, execute o comando gcloud dataproc lotes send spark da CLI do gcloud localmente em uma janela de 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 na página Configuração de rede do Dataproc sem servidor para o Spark. Se a sub-rede da rede default para a região especificada no comando gcloud dataproc batches submit não estiver ativada para Acesso privado do Google, será necessário:
    1. Ative a sub-rede padrão da rede 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. Você pode 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 de 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 o ""-- ").
  • --properties: é possível adicionar a sinalização --properties para inserir qualquer propriedade compatível do Spark que a carga de trabalho em lote do Spark usará.
  • --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. É possível especificar somente o caminho/nome do bucket, por exemplo, "mybucketname". Exceção: se a carga de trabalho em lote fizer referência a arquivos na máquina local, a sinalização --deps-bucket será obrigatória. O Dataproc sem servidor para o Spark fará upload dos arquivos locais em uma pasta /dependencies no bucket antes de executar a carga de trabalho em lote.
  • --container-image: é possível especificar uma imagem de contêiner personalizado 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. É preciso hospedar seu contêiner personalizado no Container Registry.
  • 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 uma Metastore Hive gerenciada automaticamente usando uma configuração padrão do Spark:
      gcloud beta 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 servidor de histórico permanente
      1. Criar um servidor permanente de histórico (PHS, na sigla em inglês) 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. Envie 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 e linha de comando

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

Antes de usar qualquer um dos dados da solicitação, faça as seguintes substituições:

  • project-id: ID do projeto do Google Cloud
  • region: region
  • 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 o region especificado não estiver ativada para Acesso privado do Google, será necessário seguir um destes procedimentos:
      1. Ative a sub-rede padrão da rede para o region para o Acesso privado do Google.
      2. Use o campo ExecutionConfig.subnetworkUri para especificar uma sub-rede com o Acesso privado do Google ativado. Você pode executar o comando gcloud compute networks describe [NETWORK_NAME] para listar os URIs das sub-redes em uma rede.
    • sparkBatch.jarFileUris: o arquivo de exemplo jar é pré-instalado no ambiente de execução do Spark. O método sparkBatch.args é transmitido para a carga de trabalho do SparkPi e especifica 1.000 iterações da lógica de estimativa de pi.
    • Spark properties: use o campo RuntimeConfig.properties para inserir as propriedades Spark compatíveis que a carga de trabalho em lote do Spark usará.
    • 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"
    }