Pode enviar uma tarefa para um cluster do Dataproc existente
através de um pedido HTTP ou programático jobs.submit
da API Dataproc, usando a ferramenta de linha de comandos gcloud
da CLI do Google Cloud numa janela de terminal local ou no
Cloud Shell, ou a partir da Google Cloud consola aberta num navegador local. Também pode usar SSH na instância principal no cluster e, em seguida, executar uma tarefa diretamente a partir da instância sem usar o serviço Dataproc.
Como enviar um trabalho
Consola
Abra a página Dataproc Enviar uma tarefa na Google Cloud consola no seu navegador.
Exemplo de tarefa do Spark
Para enviar um exemplo de tarefa do Spark, preencha os campos na página Enviar uma tarefa, da seguinte forma:
- Selecione o nome do cluster na lista de clusters.
- Defina o Tipo de serviço como
Spark
. - Defina Main class or jar como
org.apache.spark.examples.SparkPi
. - Defina Arguments para o argumento único
1000
. - Adicione
file:///usr/lib/spark/examples/jars/spark-examples.jar
a ficheiros JAR:file:///
denota um esquema Hadoop LocalFileSystem. O Dataproc instalou o/usr/lib/spark/examples/jars/spark-examples.jar
no nó principal do cluster quando criou o cluster.- Em alternativa, pode especificar um caminho do Cloud Storage (
gs://your-bucket/your-jarfile.jar
) ou um caminho do sistema de ficheiros distribuídos do Hadoop (hdfs://path-to-jar.jar
) para um dos seus ficheiros JAR.
Clique em Enviar para iniciar a tarefa. Assim que a tarefa for iniciada, é adicionada à lista de tarefas.

Clique no ID do trabalho para abrir a página Trabalhos, onde pode ver o resultado do controlador do trabalho. Uma vez que esta tarefa produz linhas de saída longas que excedem a largura da janela do navegador, pode selecionar a caixa Quebra de linha para apresentar todo o texto de saída dentro da vista, de modo a apresentar o resultado calculado para pi
.

Pode ver o resultado do controlador da tarefa a partir da linha de comandos através do comando
gcloud dataproc jobs wait
apresentado abaixo (para mais informações, consulte
Ver resultado da tarefa – COMANDO GCLOUD).
Copie e cole o ID do projeto como o valor da flag --project
e o ID do trabalho (apresentado na lista de trabalhos) como o argumento final.
gcloud dataproc jobs wait job-id \ --project=project-id \ --region=region
Seguem-se fragmentos do resultado do controlador para o exemplo de SparkPi
tarefa enviado acima:
... 2015-06-25 23:27:23,810 INFO [dag-scheduler-event-loop] scheduler.DAGScheduler (Logging.scala:logInfo(59)) - Stage 0 (reduce at SparkPi.scala:35) finished in 21.169 s 2015-06-25 23:27:23,810 INFO [task-result-getter-3] cluster.YarnScheduler (Logging.scala:logInfo(59)) - Removed TaskSet 0.0, whose tasks have all completed, from pool 2015-06-25 23:27:23,819 INFO [main] scheduler.DAGScheduler (Logging.scala:logInfo(59)) - Job 0 finished: reduce at SparkPi.scala:35, took 21.674931 s Pi is roughly 3.14189648 ... Job [c556b47a-4b46-4a94-9ba2-2dcee31167b2] finished successfully. driverOutputUri: gs://sample-staging-bucket/google-cloud-dataproc-metainfo/cfeaa033-749e-48b9-... ...
gcloud
Para enviar uma tarefa para um cluster do Dataproc, execute o comando gcloud dataproc jobs submit localmente numa janela de terminal ou no Cloud Shell.
gcloud dataproc jobs submit job-command \ --cluster=cluster-name \ --region=region \ other dataproc-flags \ -- job-args
- Apresente uma lista dos
hello-world.py
acessíveis publicamente localizados no Cloud Storage. Ficheiro de listagem:gcloud storage cat gs://dataproc-examples/pyspark/hello-world/hello-world.py
#!/usr/bin/python import pyspark sc = pyspark.SparkContext() rdd = sc.parallelize(['Hello,', 'world!']) words = sorted(rdd.collect()) print(words)
- Envie a tarefa Pyspark para o Dataproc.
Resultado do terminal:gcloud dataproc jobs submit pyspark \ gs://dataproc-examples/pyspark/hello-world/hello-world.py \ --cluster=cluster-name \ --region=region
Waiting for job output... … ['Hello,', 'world!'] Job finished successfully.
- Execute o exemplo SparkPi pré-instalado no nó principal do cluster do Dataproc.
Resultado do terminal:gcloud dataproc jobs submit spark \ --cluster=cluster-name \ --region=region \ --class=org.apache.spark.examples.SparkPi \ --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \ -- 1000
Job [54825071-ae28-4c5b-85a5-58fae6a597d6] submitted. Waiting for job output… … Pi is roughly 3.14177148 … Job finished successfully. …
REST
Esta secção mostra como enviar uma tarefa do Spark para calcular o valor aproximado de pi
através da API jobs.submit do Dataproc.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- project-id: Google Cloud ID do projeto
- region: região do cluster
- clusterName: nome do cluster
Método HTTP e URL:
POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/jobs:submit
Corpo JSON do pedido:
{ "job": { "placement": { "clusterName": "cluster-name" }, "sparkJob": { "args": [ "1000" ], "mainClass": "org.apache.spark.examples.SparkPi", "jarFileUris": [ "file:///usr/lib/spark/examples/jars/spark-examples.jar" ] } } }
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{ "reference": { "projectId": "project-id", "jobId": "job-id" }, "placement": { "clusterName": "cluster-name", "clusterUuid": "cluster-Uuid" }, "sparkJob": { "mainClass": "org.apache.spark.examples.SparkPi", "args": [ "1000" ], "jarFileUris": [ "file:///usr/lib/spark/examples/jars/spark-examples.jar" ] }, "status": { "state": "PENDING", "stateStartTime": "2020-10-07T20:16:21.759Z" }, "jobUuid": "job-Uuid" }
Java
- Instale a biblioteca cliente
- Configure as credenciais padrão da aplicação
- Execute o código
Python
- Instale a biblioteca cliente
- Configure as credenciais padrão da aplicação
- Execute o código
Go
- Instale a biblioteca cliente
- Configure as credenciais padrão da aplicação
- Execute o código
Node.js
- Instale a biblioteca cliente
- Configure as credenciais padrão da aplicação
- Execute o código
Envie um trabalho diretamente no seu cluster
Se quiser executar uma tarefa diretamente no cluster sem usar o serviço Dataproc, inicie sessão no nó principal do cluster através de SSH e, em seguida, execute a tarefa no nó principal.
Depois de estabelecer uma ligação SSH à instância principal da VM, execute comandos numa janela de terminal no nó principal do cluster para:
- Abra um shell do Spark.
- Execute uma tarefa simples do Spark para contar o número de linhas num ficheiro "hello-world" do Python (com sete linhas) localizado num ficheiro do Cloud Storage acessível publicamente.
Saia da shell.
user@cluster-name-m:~$ spark-shell ... scala> sc.textFile("gs://dataproc-examples" + "/pyspark/hello-world/hello-world.py").count ... res0: Long = 7 scala> :quit
Execute tarefas bash no Dataproc
Pode querer executar um script bash como tarefa do Dataproc, porque os motores que usa não são suportados como um tipo de tarefa do Dataproc de nível superior ou porque precisa de fazer uma configuração ou um cálculo adicional de argumentos antes de iniciar uma tarefa com hadoop
ou spark-submit
a partir do seu script.
Exemplo de porco
Suponha que copiou um script bash hello.sh para o Cloud Storage:
gcloud storage cp hello.sh gs://${BUCKET}/hello.sh
Uma vez que o comando pig fs
usa caminhos do Hadoop, copie o script do
armazenamento na nuvem para um destino especificado como file:///
para se certificar de que
está no sistema de ficheiros local em vez do HDFS. Os comandos sh
subsequentes
fazem referência automaticamente ao sistema de ficheiros local e não requerem o prefixo file:///
.
gcloud dataproc jobs submit pig --cluster=${CLUSTER} --region=${REGION} \
-e='fs -cp -f gs://${BUCKET}/hello.sh file:///tmp/hello.sh; sh chmod 750 /tmp/hello.sh; sh /tmp/hello.sh'
Em alternativa, uma vez que as tarefas do Dataproc enviam argumentos --jars
para um ficheiro
num diretório temporário criado durante a duração da tarefa, pode especificar
o seu script de shell do Cloud Storage como um argumento --jars
:
gcloud dataproc jobs submit pig --cluster=${CLUSTER} --region=${REGION} \
--jars=gs://${BUCKET}/hello.sh \
-e='sh chmod 750 ${PWD}/hello.sh; sh ${PWD}/hello.sh'
Tenha em atenção que o argumento --jars
também pode referenciar um script local:
gcloud dataproc jobs submit pig --cluster=${CLUSTER} --region=${REGION} \
--jars=hello.sh \
-e='sh chmod 750 ${PWD}/hello.sh; sh ${PWD}/hello.sh'