Job-Timer
Инструмент для управления задачами по расписанию, в настоящее время поддерживает три типа задач: Spark job, DataX (для импорта и экспорта данных), а также shell-скрипты.
Каждая задача имеет следующие атрибуты: название, описание, тип (Spark, DataX или Shell), параметры запуска, время начала и периодичность выполнения. Задачи управляются группами, и для анализа данных обычно требуется совместная работа нескольких задач. Например, сначала данные экспортируются в HDFS, затем анализируются с помощью Spark, а во время экспорта могут потребоваться дополнительные операции, такие как перемещение файлов, переименование и т. д. Эти задачи выполняются в строгом порядке, образуя группу задач. Если анализ данных простой, группа может содержать только одну задачу.
Функциональные модули:
Среда:
Разработка на Node.js версии 8.9. Для работы требуется Node.js не ниже версии 8.1.
UI-интерфейс основан на Vue и ElementUI, требуется Chrome версии 45 или выше.
Проект запущен на сервере Linux компании. Теоретически поддерживается работа на Windows и Mac, но не тестировалась.
Для Spark: взаимодействие со Spark-кластером осуществляется через Livy, однако журналы выполнения собираются с помощью команды yarn. Таким образом, проект предоставляет полный функционал для режима Spark on Yarn, но для других режимов Spark-кластеров он может только запускать задачи, без сбора журналов (журналы Livy всё ещё доступны).
Для DataX: проект Alipay с открытым исходным кодом, зависит от Python 2.7, требует настройки Python в переменной PATH.
Для Shell: скрипты запускаются из каталога проекта. Если скрипт требует определённых путей, рекомендуется использовать команду cd в начале скрипта для изменения каталога. В среде Windows могут возникнуть проблемы с китайскими символами (Node.js использует формат UTF-8 по умолчанию, а файлы bat в Windows используют системный формат).
Hadoop: функция загрузки файлов использует команду hadoop fs, позволяя загружать файлы непосредственно в HDFS. Отсутствие Hadoop не влияет на запуск задач, только на функцию загрузки файлов.
Зависимости:
Описание задач:
Spark Job:
Вторичная разработка на основе инструмента Apache Livy. Через Livy отправляет jar-файлы в YARN, при этом jar-файл для выполнения должен быть размещён в HDFS.
Для справки см. документацию по REST API Livy: https://livy.incubator.apache.org/docs/latest/rest-api.html.
Процесс установки: http://note.youdao.com/noteshare?id=ca7126842d0abc74c52998fab8e27306&sub=D7CED5916C2748A7BBAA6072297F5174.
DataX Job:
Открытый инструмент Alipay для импорта и экспорта данных, поддерживает обмен данными между большинством хранилищ, обычно используется для переноса данных из Oracle в Hive.
Зависит от Python версии 2.7.
Документация: https://github.com/alibaba/DataX.
Shell Job:
Разработан на основе функции execFile модуля child_process в Node.js. Система сохраняет shell-скрипт как файл sh, а затем выполняет его с помощью функции execFile. Обратите внимание, что вывод скрипта не должен превышать 200 КБ.
Документация: http://nodejs.cn/api/child_process.html#child_process_child_process_execfile_file_args_options_callback.
По умолчанию время ожидания составляет 10 минут. Не поддерживает список аргументов, можно использовать параметры.
Streaming Job:
Поскольку потоковые задачи постоянно находятся в сеансе Livy, в одной группе задач может быть только одна потоковая задача, и она должна быть последней.
Система проверяет состояние всех потоковых задач через определённые промежутки времени. При аварийном завершении задачи система пытается автоматически восстановить её. Интервал проверки настраивается в config.js, а при создании потоковой задачи можно выбрать, следует ли автоматически восстанавливать её после сбоя.
Проект не собирает журналы выполнения потоковых задач.
Так как потоковые задачи работают в сеансе Livy, перезапуск Job-Timer не повлияет на их выполнение.
Конфигурация:
Интерфейс администратора (UI):
Каталог интерфейса — /admin, разработан на Vue. Это проект, созданный с использованием инструмента vue-cli. Если требуется дополнительная разработка, обратитесь к шаблону проекта webpack для Vue.
В интерфейсе администратора используется iframe для отображения консоли Livy, поэтому необходимо настроить адрес URL Livy Host. Конфигурационные переменные: LIVY_HOST. Для разработки и производства используются разные файлы конфигурации:
Конфигурация сервера:
Все конфигурации сервера находятся в файле /config.js. Проект определяет, является ли среда RUN_MODULE = proc производственной, а все остальные значения считаются средой разработки.
Конфигурации в файле представляют собой условные выражения с использованием символа ? :. Если значение не указано, предполагается, что конфигурация одинакова для обеих сред.
Обычно при начальной настройке необходимо изменить следующие параметры:
Запуск:
Интерфейс администратора использует Vue и Element UI. Запустите с помощью следующих команд:
# Производство:
# Запуск Livy и MongoDB, настройка переменных среды Python и Hadoop:
cd admin
npm install # Установить пакеты, связанные с интерфейсом администратора.
npm run build # Собрать систему интерфейса администратора.
./publish.sh # Развертывание в каталоге public.
cd ..
npm install # Установить пакеты, необходимые для сервера.
npm start # Запустить сервер или pm2 start bin/www.
# Разработка:
cd admin
npm install # Установить пакеты, связанные с интерфейсом администратора.
npm run dev # Запустить интерфейс администратора, по умолчанию использует порт 8080. Если порт занят, будет выбран другой порт. Подробности см. в выводе команды.
# Также запустите сервер:
npm install
npm start
Структура таблицы:
Используется база данных MongoDB.
Jobs:
Группа задач.
{
_id: '', // Автоматически генерируется MongoDB.
title: '',
description: '',
beginTime: new Date(''), // Время начала выполнения.
cycle: 10000, // Период выполнения, в миллисекундах.
status: '1', // Статус: 0 — недоступно, 1 — доступно.
lastRunTime: Date,
lastLog: '_id of logs',
group: [{ // Задачи в группе выполняются последовательно.
id: 0, // Идентификатор в группе, уникальный в пределах группы.
title: '',
description: '',
type: 'spark | datax | shell', // Тип задачи, соответствующий различным исполнителям.
args: {}, // Параметры задачи.
lastRunTime: Date
}, ...]
}
Logs:
Журналы.
{
_id: '', // Автоматически генерируется MongoDB.
jobId: '_id of jobs',
title: '',
group: [{
id: 0,
title: '',
type: 'spark | datax | shell',
args: {},
log: 'text | file',
begin_time: Date,
end_time: Date
}],
beginTime: Date,
endTime: Date
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )