Передача файла свойств в Oozie Java Action

У меня настроен рабочий процесс действия Java Oozie, который я планирую использовать для планирования координатора Oozie. Действие java запускает задание Camus, чей файл конфигурации jar и свойств я поместил в каталог workflow/lib. Любые идеи о том, как я передал бы аргумент -P этому? В настоящее время я делаю что-то вроде этого:

<workflow-app xmlns="uri:oozie:workflow:0.5" name="camus-wf">
    <start to="camusJob"/>
    <action name="camusJob">
        <java>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
            <property>
                    <name>mapred.job.name</name>
                    <value>camusJob</value>
                </property>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <main-class>com.linkedin.camus.etl.kafka.CamusJob</main-class>
    <arg>-P</arg>
    <arg>${camusJobProperties}</arg>
        </java>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    <kill name="fail">
        <message>${wf:errorMessage(wf:lastErrorNode())}</message>
    </kill>
    <end name="end"/>
</workflow-app>

Как выглядит camusJobProperties

hdfs://10.0.2.15:8020/coordCamusJob/workflowAppPath/lib/config.properties

Но рабочий процесс, похоже, не запускается (зависает на ПОДГОТОВКЕ). Любые идеи, как это исправить?

Спасибо!

РЕДАКТИРОВАТЬ: после исправления моего URL-адреса nameNode я вижу, что получаю следующую ошибку:

ACTION[0000002-150804091125207-oozie-oozi-W@camusJob] Launcher exception: java.lang.IllegalArgumentException: Wrong FS: hdfs://10.0.2.15:8020/user/root/app/workflow/lib/config.properties, expected: file:///
org.apache.oozie.action.hadoop.JavaMainException: java.lang.IllegalArgumentException: Wrong FS: hdfs://10.0.2.15:8020/user/root/app/workflow/lib/config.properties, expected: file:///
    at org.apache.oozie.action.hadoop.JavaMain.run(JavaMain.java:58)
    at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:39)
    at org.apache.oozie.action.hadoop.JavaMain.main(JavaMain.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:226)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:450)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.IllegalArgumentException: Wrong FS: hdfs://10.0.2.15:8020/user/root/app/workflow/lib/config.properties, expected: file:///
    at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:645)
    at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:82)
    at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:603)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:821)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:598)
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:414)
    at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:140)
    at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:341)
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:766)
    at com.linkedin.camus.etl.kafka.CamusJob.run(CamusJob.java:679)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at com.linkedin.camus.etl.kafka.CamusJob.main(CamusJob.java:646)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.oozie.action.hadoop.JavaMain.run(JavaMain.java:55)
    ... 15 more

Итак, в основном мой вопрос заключается в том, как передать аргумент файла свойств, когда файл свойств находится в HDFS (в частности, в каталоге workflow/lib)


person Jake Chase    schedule 04.08.2015    source источник
comment
Вы уверены, что это из-за свойств arg? что произойдет, если вы удалите этот arg. он запускает работу и выдает какую-то ошибку?   -  person vishnu viswanath    schedule 04.08.2015
comment
@sonic Нет, вы правы, он остается в стадии подготовки даже без аргумента. Так что, наверное, что-то другое. Я попробую реализовать это по-другому (возможно, как действие уменьшения карты).   -  person Jake Chase    schedule 04.08.2015
comment
проверьте свой трекер вакансий и URL namenode   -  person vishnu viswanath    schedule 04.08.2015
comment
Спасибо! Похоже, что мой URL-адрес nameNode был неправильным, и теперь он работает, но по-прежнему выдает другую ошибку, которая действительно связана с проблемой, которую я подозревал изначально (забавно, как это работает). Я получаю следующую ошибку: hdfs://10.0.2.15:8020/user/root/app/workflow/lib/config.properties, ожидаемый: file:/// org.apache.oozi.action.hadoop.JavaMainException: java .lang.IllegalArgumentException: Неправильная FS: hdfs://10.0.2.15:8020/user/root/app/workflow/lib/config.properties, ожидается: file:///, но когда я пытаюсь передать /user/root/ app/workflow/lib/config.properties напрямую выдает файл не найден.   -  person Jake Chase    schedule 04.08.2015
comment
Это потому, что вы не настроили свой core-site.xml для использования hdfs. По умолчанию на основном сайте будет настроена файловая система.   -  person vishnu viswanath    schedule 04.08.2015
comment
Спасибо, можно ли это сделать без настройки core-site.xml? А если нет, то как мне настроить core-site.xml? В настоящее время для fs.defaultFS установлено значение true для hdfs://sandbox.hortonworks.com:8020.   -  person Jake Chase    schedule 04.08.2015
comment
Похоже, ваш core-site.xml верен, проблема может заключаться в том, что в действии Java объект конфигурации не знает об этих деталях. Что вам нужно сделать, так это установить путь core-site.xml в вашем объекте конфигурации.   -  person vishnu viswanath    schedule 04.08.2015
comment
Конструктор конфигурации Hadoop ищет core-site.xml и hdfs-site.xml в CLASSPATH ; если они отсутствуют (или ПУТЬ К КЛАССУ не включает /etc/hadoop/conf/), то он автоматически возвращается к локальной файловой системе. И вы получаете именно это глупое сообщение об ошибке.   -  person Samson Scharfrichter    schedule 06.08.2015
comment
Запоздалая мысль: вы можете упаковать пользовательские файлы конфигурации XML в рабочий процесс, использовать альтернативный конструктор Configuration duh =new Configuration(false) ;, а затем явно попросить объект конфигурации использовать источник из пользовательских файлов XML. Но опять же, если файлы отсутствуют или отсутствуют некоторые важные свойства, он автоматически вернется к LocalFilesystem.   -  person Samson Scharfrichter    schedule 06.08.2015


Ответы (1)


Для первой части вопроса: это может быть связано с неправильным URL-адресом namenode или jobtracker.

Для второй части: вы должны настроить core-site.xml, свойство fs.defaultFS на hdfs://host:port/

Кроме того, в вашей программе Java укажите путь к файлу core-site.xml в вашем объекте config.

person vishnu viswanath    schedule 04.08.2015
comment
Спасибо !, так что я думаю, что я уже настроил это так. У меня fs.defaultFS установлено значение hdfs://sandbox.hortonworks.com:8020 со свойством true - person Jake Chase; 04.08.2015
comment
я изменил ответ - person vishnu viswanath; 04.08.2015
comment
Можно ли сделать это, добавив fsDefault в качестве свойства действия рабочего процесса Oozie? - person Jake Chase; 04.08.2015
comment
@JakeChase: ты смог в конце концов решить эту вторую проблему? - person Paul Praet; 07.10.2015