Что такое Spark Job?
Я уже сделал с установкой spark и выполнил несколько тестовых наборов, устанавливающих основные и рабочие узлы. Тем не менее, у меня очень жирная путаница в том, что именно означает работа в контексте Spark(а не SparkContext). У меня есть ниже вопросы
- насколько отличается работа от программы драйвера.
- само приложение является частью программы драйвера?
- Spark представить в пути это работа?
прочитал Spark documention но все равно мне это непонятно.
сказав, моя реализация заключается в написании заданий spark{программно}, которые будут отправляться в spark-submit.
пожалуйста, помогите с примером, если это возможно . Было бы очень helpdful.
Примечание: пожалуйста, не публикуйте ссылки spark, потому что я уже пробовал. Хотя вопросы звучат наивно, но все же мне нужно больше ясности в понимании.
2 ответов
ну, терминология всегда может быть сложной, поскольку она зависит от контекста. Во многих случаях вы можете использовать "отправить задание в кластер", который для spark будет представлять программу драйвера.
тем не менее, Spark имеет свое собственное определение для "работы", прямо из глоссария:
задание параллельное вычисление, состоящее из нескольких задач, которое получает порожденный в ответ на действие Spark (например, save, collect); вы увидите этот термин используется в системный журнал.
Так я в этом контексте, скажем, вам нужно сделать следующее:
- загрузите файл с именами и адресами людей в RDD1
- загрузите файл с именами людей и телефонами в RDD2
- Присоединяйтесь к RDD1 и RDD2 по имени, чтобы получить rdd3
- карта на RDD3, чтобы получить хороший HTML презентационную карту для каждого человека, как RDD4
- сохранить RDD4 в файл.
- карта RDD1 для извлечения zipcodes из адресов в вам RDD5
- Aggregate на RDD5, чтобы получить количество людей, живущих на каждом zipcode как RDD6
- соберите RDD6 и распечатайте эту статистику в stdout.
и
- на программы драйвер это весь фрагмент кода, выполняющий все 8 шагов.
- создание всего набора HTML-карт на шаге 5-это задание (ясно, потому что мы используем сохранить действие, а не трансформации). То же самое с собрать на шаге 8
- другие шаги будут организованы в этапы, причем каждое задание является результатом последовательности этапов. Для простых вещей задание может иметь один этап, но необходимость перераспределения данных (например, соединение на Шаге 3) или что-либо, что нарушает локальность данных, обычно вызывает появление большего количества этапов. Вы можете думать о стадиях как вычисления, которые дают промежуточные результаты, которые на самом деле могут быть сохранены. Например, мы можем сохранить RDD1, так как мы будем использовать его более одного раза, избегая пересчета.
- все 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