Что такое Spark Job?

Я уже сделал с установкой spark и выполнил несколько тестовых наборов, устанавливающих основные и рабочие узлы. Тем не менее, у меня очень жирная путаница в том, что именно означает работа в контексте Spark(а не SparkContext). У меня есть ниже вопросы

  • насколько отличается работа от программы драйвера.
  • само приложение является частью программы драйвера?
  • Spark представить в пути это работа?

прочитал Spark documention но все равно мне это непонятно.

сказав, моя реализация заключается в написании заданий spark{программно}, которые будут отправляться в spark-submit.

пожалуйста, помогите с примером, если это возможно . Было бы очень helpdful.

Примечание: пожалуйста, не публикуйте ссылки spark, потому что я уже пробовал. Хотя вопросы звучат наивно, но все же мне нужно больше ясности в понимании.

2 ответов


ну, терминология всегда может быть сложной, поскольку она зависит от контекста. Во многих случаях вы можете использовать "отправить задание в кластер", который для spark будет представлять программу драйвера.

тем не менее, Spark имеет свое собственное определение для "работы", прямо из глоссария:

задание параллельное вычисление, состоящее из нескольких задач, которое получает порожденный в ответ на действие Spark (например, save, collect); вы увидите этот термин используется в системный журнал.

Так я в этом контексте, скажем, вам нужно сделать следующее:

  1. загрузите файл с именами и адресами людей в RDD1
  2. загрузите файл с именами людей и телефонами в RDD2
  3. Присоединяйтесь к RDD1 и RDD2 по имени, чтобы получить rdd3
  4. карта на RDD3, чтобы получить хороший HTML презентационную карту для каждого человека, как RDD4
  5. сохранить RDD4 в файл.
  6. карта RDD1 для извлечения zipcodes из адресов в вам RDD5
  7. Aggregate на RDD5, чтобы получить количество людей, живущих на каждом zipcode как RDD6
  8. соберите RDD6 и распечатайте эту статистику в stdout.

и

  1. на программы драйвер это весь фрагмент кода, выполняющий все 8 шагов.
  2. создание всего набора HTML-карт на шаге 5-это задание (ясно, потому что мы используем сохранить действие, а не трансформации). То же самое с собрать на шаге 8
  3. другие шаги будут организованы в этапы, причем каждое задание является результатом последовательности этапов. Для простых вещей задание может иметь один этап, но необходимость перераспределения данных (например, соединение на Шаге 3) или что-либо, что нарушает локальность данных, обычно вызывает появление большего количества этапов. Вы можете думать о стадиях как вычисления, которые дают промежуточные результаты, которые на самом деле могут быть сохранены. Например, мы можем сохранить RDD1, так как мы будем использовать его более одного раза, избегая пересчета.
  4. все 3 выше в основном говорят о том, как логика данного алгоритма будет нарушена. В отличие от этого,задание в частности данные это пройдет через данный этап, на данном исполнителе.

надеюсь, что это делает вещи яснее ;-)


Эй, вот что я сделал раньше, Надеюсь, это сработает для вас:

#!/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