2017-02-21 7 views
0

фонВыполнение кучу улья запросов (Построение DAG)

Я ищу, чтобы выполнить кучу улья запросов (около 20-30 запросов, и растет число). Некоторые из этих запросов зависят от результата нескольких других, тогда как некоторые из них могут выполняться параллельно. (DAG)

Вопрос

Есть менеджер рабочего процесса, который может позаботиться о строительстве DAG (учитывая кучу запросов в качестве входных данных) и выполнение этих запросов паралельно/последовательно (в наиболее optimium образом) ,

Каковы наилучшие практики для того же.

ответ

1

Вы можете использовать любой инструмент для управления рабочими процессами. Наилучшая практика зависит от варианта использования и опыта.

Традиционно в корпоративном режиме: - Может использоваться планировщик Control-M или cron.

От Большой экосистемы данных: oozie или Азкабан

Есть несколько других инструментов, которые там могут быть использованы для управления рабочими процессами.

+0

Благодаря Ashish .. Я думаю oozie и Азкабан позволяют пользователю строить DAG, но вмешательство пользователя требуется для DAG здание. (Это мое понимание их.). Есть ли такая система, которая берет ряд запросов в качестве входных данных, интерпретирует запросы и сама создает DAG. – Harshit

0

Также это может быть легко реализовано в сценарии оболочки Вы можете запускать параллельные процессы, ждать их, а затем запускать другие процессы. Амперсанд в конце команды инструктирует оболочку запускать фоновый процесс. Смотрите этот пример:

#!/bin/bash 

LOG_DIR=/tmp/my_log_dir 

#Set fail counter before parallel processes 
FAIL=0 
echo "Parallel loading 1, 2 and 3..." 

hive -hiveconf "some_var"="$some_value" -f myscript_1.hql 2>&1 | tee $LOG_DIR/myscript_1.log & 
hive -hiveconf "some_var"="$some_value" -f myscript_2.hql 2>&1 | tee $LOG_DIR/myscript_2.log & 
hive -hiveconf "some_var"="$some_value" -f myscript_3.hql 2>&1 | tee $LOG_DIR/myscript_3.log & 

#Wait for three processes to finish 
for job in `jobs -p` 
do 
echo $job 
wait $job || let "FAIL+=1" 
done 

#Exit if some process has failed 
if [ "$FAIL" != "0" ]; 
then 
echo "Failed processes=($FAIL) Giving up..." 
exit 1 
fi 

#Set fail counter before parallel processes 
FAIL=0 
echo "Continue with next parallel steps 4,5..." 
hive -hiveconf "some_var"="$some_value" -f myscript_4.hql 2>&1 | tee $LOG_DIR/myscript_4.log & 
#and so on 

Также существуют и другие способы для запуска фоновых процессов: https://www.codeword.xyz/2015/09/02/three-ways-to-script-processes-in-parallel/

+0

Спасибо. Но меня больше интересует аутсорсинг создания DAG. Здесь вы запускаете myscript_1, myscript_2, myscript_3 в первом кадре. Опубликуйте, что вы запускаете шаги 4 и 5. Есть ли стандартный инструмент, который освобождает пользователя от создания DAG. (то есть, как выглядит DAG, как создается DAG, я хочу полностью абстрагироваться от нее). Это слишком большая проблема. Предполагая, что это будет очень распространенным требованием. – Harshit

+0

Используйте сценарий оболочки для генерации DAG из вашего представления для большей абстракции. В настоящее время я работаю над подобной задачей. Необходимо генерировать DAG из базы данных, содержащей запросы/скрипты и порядок уровня +. Я собираюсь сгенерировать сценарии оболочки DAG, а затем запустить их. – leftjoin

+0

Идея заключается в том, что у вас уже есть некоторое представление о DAG. Вам просто нужно перевести это представление на runnable script – leftjoin

Смежные вопросы