2015-11-23 3 views
1

У меня есть координатор Oozie, который работает рабочий процесс каждый час. Рабочий процесс состоит из двух последовательных действий: действия оболочки и действия Java. Когда я бегу координатор, действие оболочки, кажется, успешно выполнить, однако, когда пришло время для действия Java, браузер Работа в Хюэ всегда показывают:Oozie job expired on Java action при записи в HDFS

There was a problem communicating with the server: Job application_<java-action-id> has expired. 

Когда я нажимаю на APPLICATION_ID, вот снимок: Oozie java action fail

Это, кажется, указывает на views.py и api.py. Когда я смотрел на сервере журналы:

[23/Nov/2015 02:25:22 -0800] middleware INFO  Processing exception: Job application_1448245438537_0010 has expired.: Traceback (most recent call last): 
    File "/usr/lib/hue/build/env/lib/python2.6/site-packages/Django-1.6.10-py2.6.egg/django/core/handlers/base.py", line 112, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/usr/lib/hue/build/env/lib/python2.6/site-packages/Django-1.6.10-py2.6.egg/django/db/transaction.py", line 371, in inner 
    return func(*args, **kwargs) 
    File "/usr/lib/hue/apps/jobbrowser/src/jobbrowser/views.py", line 67, in decorate 
    raise PopupException(_('Job %s has expired.') % jobid, detail=_('Cannot be found on the History Server.')) 
PopupException: Job application_1448245438537_0010 has expired. 

Действия Java состоит из двух частей: REST API вызова и записи на HDFS (с помощью клиентской библиотеки Hadoop) разобранного результата. Несмотря на то, что действие Java-действия истекает/терпит неудачу в Job Browser, запись в HDFS была успешной. Вот фрагмент части записи HDFS кода Java.

FileSystem hdfs = FileSystem.get(new URI(hdfsUriPath), conf); 
OutputStream os = hdfs.create(file); 
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 
... 
br.write(toWriteToHDFS); 
br.flush(); 
br.close(); 
hdfs.close(); 

При запуске рабочего процесса в качестве отдельного, у меня есть 50-50 шанса на успех и выдох на действие части Java, но на координаторе, все Java действий являются истекающим.

Бревна ПРЯЖИ показывает это:

Job commit failed: java.io.IOException: Filesystem closed 
at org.apache.hadoop.hdfs.DFSClient.checkOpen(DFSClient.java:794) 
at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1645) 
at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1587) 
at org.apache.hadoop.hdfs.DistributedFileSystem$6.doCall(DistributedFileSystem.java:397) 
at org.apache.hadoop.hdfs.DistributedFileSystem$6.doCall(DistributedFileSystem.java:393) 
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) 
at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:393) 
at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:337) 
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:908) 
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:889) 
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:786) 
at org.apache.hadoop.mapreduce.v2.app.commit.CommitterEventHandler$EventProcessor.touchz(CommitterEventHandler.java:265) 
at org.apache.hadoop.mapreduce.v2.app.commit.CommitterEventHandler$EventProcessor.handleJobCommit(CommitterEventHandler.java:271) 
at org.apache.hadoop.mapreduce.v2.app.commit.CommitterEventHandler$EventProcessor.run(CommitterEventHandler.java:237) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 

Так это выглядит, как он имеет проблемы с закрытием FileSystem на окончание моего Java кода (я должен держать FileSystem открыть?).

Я использую Cloudera Quickstart CDH 5.4.0 и 4.1.0 Oozie

+0

Что вы видите в журналах YARN для задания 'application_1448245438537_0010'? Нет журнала вообще, не удалось init, ошибка, успех? –

+0

Где я могу искать журналы YARN? – menorah84

+0

Ouch ... в Hue, панель инструментов Oozie, выберите «Выполнение рабочего процесса», вкладка «Действия», ссылка «Внешний идентификатор» >>> должна перенаправить на интерфейс Hue на задания YARN –

ответ

1

Проблема уже решена. В моем действии Java используется экземпляр (скажем, переменная fs) класса org.apache.hadoop.fs.FileSystem. В конце действия Java я использую fs.close(), что вызовет проблему в следующий период работы Oozie. Поэтому, когда я удалил эту линию, все прошло хорошо.

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