apache spark - ¿Qué es Spark Job?
apache-spark batch-processing (2)
Bueno, la terminología siempre puede ser difícil ya que depende del contexto. En muchos casos, puede ser usado para "enviar un trabajo a un clúster", lo que para spark sería enviar un programa controlador.
Dicho esto, Spark tiene su propia definición de "trabajo", directamente del glosario:
Trabajo Un cálculo paralelo que consiste en múltiples tareas que se generan en respuesta a una acción de Spark (por ejemplo, guardar, recopilar); Verás este término usado en los registros del conductor.
Así que en este contexto, digamos que necesitas hacer lo siguiente:
- Cargue un archivo con nombres y direcciones de personas en RDD1
- Cargue un archivo con nombres de personas y teléfonos en RDD2
- Únete a RDD1 y RDD2 por nombre, para obtener RDD3
- Mapa en RDD3 para obtener una tarjeta de presentación HTML agradable para cada persona como RDD4
- Guarde RDD4 en el archivo.
- Mapa RDD1 para extraer códigos postales de las direcciones para obtener RDD5
- Agregue en RDD5 para obtener un recuento de cuántas personas viven en cada código postal como RDD6
- Recoge RDD6 e imprime estas estadísticas en la salida estándar.
Asi que,
- El programa del controlador es todo este código, que ejecuta los 8 pasos.
- Producir el conjunto completo de tarjetas HTML en el paso 5 es un trabajo (claro porque estamos usando la acción de guardar , no una transformación). Lo mismo con la recogida en el paso 8
- Otros pasos se organizarán en etapas , y cada trabajo será el resultado de una secuencia de etapas. Para cosas simples, un trabajo puede tener una sola etapa, pero la necesidad de volver a particionar los datos (por ejemplo, la unión en el paso 3) o cualquier cosa que rompa la localidad de los datos generalmente hace que aparezcan más etapas. Puede pensar en las etapas como cálculos que producen resultados intermedios, que de hecho pueden persistir. Por ejemplo, podemos persistir RDD1 ya que lo usaremos más de una vez, evitando volver a calcularlo.
- Los 3 anteriores hablan básicamente de cómo se romperá la lógica de un algoritmo dado. En contraste, una tarea es un dato particular que pasará por una etapa determinada, en un ejecutor determinado.
Espero que se aclare las cosas ;-)
Ya he terminado con la instalación de chispa y ejecutado algunos testcases configurando nodos maestros y trabajadores. Dicho esto, tengo una gran confusión sobre qué significa exactamente un trabajo en el contexto de Spark (no en SparkContext). Tengo las siguientes preguntas
- ¿Qué tan diferente es el trabajo de un programa de controlador.
- ¿La aplicación en sí es una parte del programa Driver?
- Chispa enviar de una manera es un trabajo?
Leí la documentación de Spark, pero aún así esto no está claro para mí.
Dicho esto, mi implementación es escribir trabajos de spark {programmatically} que serían para un spark-submit.
Por favor ayuda con algún ejemplo si es posible. Sería muy útil.
Nota : Por favor no publique enlaces de chispa porque ya lo he probado. A pesar de que las preguntas suenan ingenuas, pero todavía necesito más claridad en la comprensión.
Oye, aquí hay algo que hice antes, espero que te funcione:
#!/bin/bash
# Hadoop and Server Variables
HADOOP="hadoop fs"
HDFS_HOME="hdfs://ha-edge-group/user/max"
LOCAL_HOME="/home/max"
# Cluster Variables
DRIVER_MEM="10G"
EXECUTOR_MEM="10G"
CORES="5"
EXECUTORS="15"
# Script Arguments
SCRIPT="availability_report.py" # Arg[0]
APPNAME="Availability Report" # arg[1]
DAY=`date -d yesterday +%Y%m%d`
for HOUR in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
do
#local directory to getmerge to
LOCAL_OUTFILE="$LOCAL_HOME/availability_report/data/$DAY/$HOUR.txt"
# Script arguments
HDFS_SOURCE="webhdfs://1.2.3.4:0000/data/lbs_ndc/raw_$DAY''_''$HOUR" # arg[2]
HDFS_CELLS="webhdfs://1.2.3.4:0000/data/cells/CELLID_$DAY.txt" # arg[3]
HDFS_OUT_DIR="$HDFS_HOME/availability/$DAY/$HOUR" # arg[4]
spark-submit /
--master yarn-cluster /
--driver-memory $DRIVER_MEM /
--executor-memory $EXECUTOR_MEM /
--executor-cores $CORES /
--num-executors $EXECUTORS /
--conf spark.scheduler.mode=FAIR /
$SCRIPT $APPNAME $HDFS_SOURCE $HDFS_CELLS $HDFS_OUT_DIR
$HADOOP -getmerge $HDFS_OUT_DIR $LOCAL_OUTFILE
done