2016-08-12 6 views
0

Сначала немного фона. У меня есть тестовый CDH-кластер с двумя узлами. Я пытаюсь выполнить работу Oozie, загрузить файл, обработать его с помощью SPARK, а затем проиндексировать его в Solr.Проблема с работой Oozie, работающей на Hadoop - Разрешения on/user/history/done_intermediate

Кластер настроен на использование аутентификации Kerberos. версия CDH является 5.7.1

Когда я пытаюсь запустить работу с Oozie, используя следующую команду:

oozie job --oozie https://host:11443/oozie/ -run --config oozieExample/job.properties 

Он терпит неудачу за исключением следующего:

2016-08-12 12:29:40,415 WARN org.apache.oozie.action.hadoop.JavaActionExecutor: SERVER[it4364-cdh01.novalocal] USER[centos] GROUP[-] TOKEN[] APP[stackOverflow] JOB[0000012-160808110839555-oozie-clou-W] ACTION[[email protected]_Current_Data] Exception in check(). Message[JA017: Could not lookup launched hadoop Job ID [job_1470672690566_0027] which was associated with action [[email protected]_Current_Data]. Failing this action!] 
org.apache.oozie.action.ActionExecutorException: JA017: Could not lookup launched hadoop Job ID [job_1470672690566_0027] which was associated with action [[email protected]_Current_Data]. Failing this action! 
     at org.apache.oozie.action.hadoop.JavaActionExecutor.check(JavaActionExecutor.java:1277) 
     at org.apache.oozie.command.wf.ActionCheckXCommand.execute(ActionCheckXCommand.java:182) 
     at org.apache.oozie.command.wf.ActionCheckXCommand.execute(ActionCheckXCommand.java:56) 
     at org.apache.oozie.command.XCommand.call(XCommand.java:286) 
     at org.apache.oozie.service.CallableQueueService$CallableWrapper.run(CallableQueueService.java:175) 
     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) 

С быстрый поиск Google, кажется, что это происходит, когда сервер истории заданий не запущен или не может обнаружить промежуточную директорию для заданий.

При выполнении команды ls на каталог истории, я получил следующее:

[[email protected] ~]$ hadoop fs -ls /user/history 
Found 2 items 
drwxrwx--- - mapred hadoop   0 2016-08-12 10:36 /user/history/done 
drwxrwxrwt - mapred hadoop   0 2016-08-12 12:29 /user/history/done_intermediate 

Что хорошо, я думаю. Теоретически, пользователь mapred должен быть владельцем папки с историей, основанной на документации CDH.

Однако, когда я проверяю содержимое done_intermediate:

[[email protected] ~]$ hadoop fs -ls /user/history/done_intermediate 
Found 1 items 
drwxrwx--- - centos hadoop   0 2016-08-12 12:29 /user/history/done_intermediate/centos 

Это означает, что пользователь centos (один выполняет задание Oozie) является владельцем этого каталога. Это предотвращает чтение файла журнала заданий, чтобы отметить задание как завершенное, а затем Оози пометить его как потерпевшее неудачу. Бревна утверждают именно это:

<ommited for brevity> 
... 
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=mapred, access=READ_EXECUTE, inode="/user/history/done_intermediate/centos":centos:hadoop:drwxrwx--- 
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkFsPermission(DefaultAuthorizationProvider.java:281) 
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:262) 
... 
<ommited for brevity> 

Если изменить право собственности на все содержимое на папке журнала, с hadoop fs -ls -R /user/history сервер истории признает работу и пометить его как завершенный.

Я попытался запустить задание в качестве отображаемого пользователя, изменив файл .properties для задания, однако это также не удается, теперь, поскольку у наведенного пользователя нет разрешений на запись в папкувнутри HDFS, так что кажется что это не правильное решение.

Есть ли какая-то конфигурация, чтобы избежать конфликта пользователей между centos и mapred, в папке с историей?

Заранее спасибо

+0

Эта настройка должна работать - если пользователь 'mapred' действительно является членом группы' hadoop'. Можете ли вы попытаться создать билет Kerberos для «mapred @ YOUR.REALM», а затем запустить «hdfs groups», чтобы быть уверенным? –

+0

Спасибо @SamsonScharfrichter. У меня было два вопроса. Во-первых, наведенный пользователь не существовал в Active Directory, который используется для Kerberos. Во-вторых, пользователь не был в правильной группе. После исправления, что работа выполняется без проблем. Можете ли вы опубликовать этот комментарий в качестве ответа, чтобы я мог его принять? –

ответ

1

Короче говоря: этот конкретный HDFS разрешения вопроса для сбора журнала истории задания может иметь разные первопричины ...

  1. система счета mapred не могут быть решены «Группа Mapping "
    (по умолчанию config => отображать имена пользователей Hadoop для локальных пользователей Linux на хосте NameNode и извлекать их группы Linux, но в свою очередь пользователи/группы Linux могут привязываться к AD, OpenLDAP и т. Д.)
  2. Системная учетная запись mapred может быть разрешена, но не является членом группы hadoop(...)
  3. Разрешения в подкаталогах hdfs:///user/history/ запутаны по неизвестной причине - например. в «липкие бит» переходит от t к T без уведомления

Аналогичная проблема описана в этой должности: historyserver not able to read log after enabling kerberos(диагностируется как причина № 2)

PS: Я упомянул «липкий бит» flip (причина № 3) из личного опыта. Между прочим, все еще озадачен тем, что вызвало изменение.

+0

Да, вы должны были наметить пользователя и наменода. Также добавьте зарегистрированного пользователя в группу hadoop – snow04

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

  • Нет связанных вопросов^_^