Планирование рабочего процесса Oozie через Java API

Можно ли планировать рабочий процесс Oozie динамически? То есть указывать параметры через Java API вместо конфигурационных файлов?

Например, я хотел бы иметь возможность планировать выполнение рабочего процесса каждый день в 22:00, но указывать это время через веб-интерфейс, так как его можно изменить. Как это сделать?


person Kobe-Wan Kenobi    schedule 22.12.2015    source источник
comment
Я не очень понимаю, к чему ты клонишь. Вы хотите использовать внешний планировщик для отправки рабочих процессов Oozie (напрямую или через одноразового координатора)? Или вы хотите сбросить правила планирования работающего координатора Oozie (например, из-за перехода на летнее время с crontab Oozie UTC)?   -  person Samson Scharfrichter    schedule 23.12.2015
comment
В моей системе есть пользователь, который может указать, когда задания должны выполняться через веб-интерфейс. Они не знают ни об Oozie, ни о Hadoop. Таким образом, они должны иметь возможность войти в систему и сказать — делайте это каждый день в X-время. Я хочу сделать это с помощью Oozie. Возможно ли это и как это сделать?   -  person Kobe-Wan Kenobi    schedule 23.12.2015
comment
Ну да, отправьте координатора с расписанием в стиле crontab. Но остерегайтесь преобразования времени UTC, особенно если в вашей стране используется летнее время. И если пользователь когда-нибудь передумает, убейте координатора и создайте его заново с новым правилом планирования.   -  person Samson Scharfrichter    schedule 23.12.2015
comment
Не могли бы вы указать мне какую-нибудь ссылку, которая объясняет, как выполнить такое планирование в коде Java? Что ж, это может быть непросто, поскольку пользователи могут быть из разных стран. Есть ли какое-то стандартное решение для такого рода проблем с разными часовыми поясами?   -  person Kobe-Wan Kenobi    schedule 23.12.2015
comment
Мы не используем клиент Java, только CLI. В любом случае логика та же: отправьте список свойств, содержащих путь к файлу XML, определяющему либо рабочий процесс, либо координатор (со свойством, содержащим путь к XML, определяющему рабочий процесс). Посмотрите документы Oozie для координатора.   -  person Samson Scharfrichter    schedule 23.12.2015


Ответы (1)


Привет, вы можете использовать следующее:

public class Oozie {

    public static void main(String[] args) {
        OozieClient wc = new OozieClient("http://oozieserver:11000/oozie");

        Properties conf = wc.createConfiguration();

        conf.setProperty("nameNode", "hdfs://namenode:8020");
        conf.setProperty("jobTracker", "resourcemanager:8032");
        conf.setProperty("queueName", "default");
        conf.setProperty("oozie.libpath", "${nameNode}/user/oozie/share/lib");
        conf.setProperty("oozie.use.system.libpath", "true");
        conf.setProperty("oozie.wf.rerun.failnodes", "true");

        conf.setProperty("oozieProjectRoot",
                "${nameNode}/user/bijoy/oozieProject");
        conf.setProperty("appPath",
                "${oozieProjectRoot}/workflowJavaMainAction");
        conf.setProperty(OozieClient.APP_PATH, "${appPath}");

        conf.setProperty("inputDir", "${oozieProjectRoot}/data/*/*/*/*/*");
        conf.setProperty("outputDir", "${appPath}/output");

        try {
            String jobId = wc.run(conf);
            System.out.println("Workflow job, " + jobId + " submitted");

            while (wc.getJobInfo(jobId).getStatus() == WorkflowJob.Status.RUNNING) {
                System.out.println("Workflow job running ...");
                Thread.sleep(10 * 1000);
            }
            System.out.println("Workflow job completed ...");
            System.out.println(wc.getJobInfo(jobId));
        } catch (Exception r) {
            System.out.println("Errors " + r.getLocalizedMessage());
        }
    }
}
person Bijoy    schedule 29.04.2016