Spark 1.6.Token может быть выдан только с помощью Kerberos или веб-аутентификации.

Я вызываю kinit keytab прямо перед spark-submit в моем сценарии драйвера оболочки. Дело в том, что он работает сам по себе, но когда я вызываю скрипт драйвера оболочки через Oozie, я получаю эту ошибку:

Stdoutput py4j.protocol.Py4JJavaError: An error occurred while calling 
o49.saveAsTextFile.
Stdoutput : org.apache.hadoop.ipc.RemoteException(java.io.IOException): 
Delegation Token can be issued only with kerberos or web authentication

Проблема скорее всего здесь

file.coalesce(1,True).saveAsTextFile(FQDNofHadoop+output) 

РЕДАКТИРОВАТЬ: В моем сценарии: kinit -k -t /home/me/me.keytab [email protected]

РЕДАКТИРОВАТЬ: Рабочее решение:

я использовал

spark-submit --principal '[email protected]' \ --keytab '/home/me/me.keytab' \ 

и выполнение скрипта pyspark в oozie работало без ошибок (даже запись в таблицу кустов и т. д.). Регистратор Log4j не работал (с автономными сценариями он работает), но, по крайней мере, print () (stdout в журналы пряжи) да ...

Спасибо


person la_femme_it    schedule 28.07.2017    source источник
comment
Убедитесь, что ваш скрипт драйвера оболочки знает абсолютный путь к keytab.   -  person T-Heron    schedule 28.07.2017
comment
В моем сценарии это: kinit -k -t /home/me/me.keytab [email protected]   -  person la_femme_it    schedule 28.07.2017
comment
Что ж, попробовать стоило. Попробуйте следующее: используйте «UserGroupInformation.loginUserFromKeytab» внутри вашего класса (или запустите команду «kinit -kt» в начале сценария оболочки).   -  person T-Heron    schedule 28.07.2017
comment
На самом деле я это сделал, я запускаю kinit -kt, а также tgt должен быть на всех рабочих узлах...   -  person la_femme_it    schedule 28.07.2017
comment
TGT должен быть на всех рабочих узлах ›› что это значит?!? Вы можете загрузить keytab в HDFS, и Oozie загрузит его во время выполнения с помощью инструкции <file>; затем вы можете kinitсоздать локальный билет в общесерверном кеше для вашего пользователя -- или локальный билет в частном кеше (используя kinit с пользовательским KRB5CCNAME) -- или изменчивый билет сеанса, используя либо Spark --principal / --keytab, либо пользовательский код, вызывающий Hadoop UserGroupInformation   -  person Samson Scharfrichter    schedule 29.07.2017
comment
Но обратите внимание, что UserGroupInformation будет работать для кода, работающего в драйвере, а не в исполнителях, потому что токены аутентификации по умолчанию создаются и транслируются до запуска драйвера, следовательно, до того, как вы сможете выполнить собственный код.   -  person Samson Scharfrichter    schedule 29.07.2017
comment
Я использовал --principal '[email protected]' \ --keytab '/home/me/me.keytab' \, и выполнение скрипта pyspark работало без ошибок (даже при записи в таблицу кустов и т. д.). Логгер не сработал, но хотя бы print() да...   -  person la_femme_it    schedule 01.08.2017
comment
@la_femme_it - Вы можете сделать свой собственный ответ, используя добавленное вами рабочее решение. Таким образом, вопрос четко помечается как ответ на него, чтобы помочь другим, просто просматривающим только резюме.   -  person T-Heron    schedule 20.11.2017


Ответы (1)


Я использовал --principal '[email protected]' \ --keytab '/home/me/me.keytab' \, и выполнение скрипта pyspark работало без ошибок (даже при записи в таблицу кустов и т. д.). Логгер не сработал, но хотя бы print() да...

person la_femme_it    schedule 29.11.2017