Hadoop Spark 1.6.Token只能通过kerberos或web身份验证发布

Hadoop Spark 1.6.Token只能通过kerberos或web身份验证发布,hadoop,apache-spark,kerberos,gssapi,keytab,Hadoop,Apache Spark,Kerberos,Gssapi,Keytab,在shell驱动程序脚本中,我在spark提交之前调用kinit keytab。问题是,它自己工作,但当我通过Oozie调用shell驱动程序scrip时,我得到了以下错误: Stdoutput py4j.protocol.Py4JJavaError: An error occurred while calling o49.saveAsTextFile. Stdoutput : org.apache.hadoop.ipc.RemoteException(java.io.IOException)

在shell驱动程序脚本中,我在spark提交之前调用kinit keytab。问题是,它自己工作,但当我通过Oozie调用shell驱动程序scrip时,我得到了以下错误:

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.keytabme@DOMAIN.HAD

编辑:工作解决方案:

我曾经

spark-submit --principal 'me@DOMAIN.HAD' \ --keytab '/home/me/me.keytab' \ 
在oozie中执行pyspark脚本时没有出现错误(甚至写入配置单元表等等)。Log4j logger不工作(使用独立的脚本),但至少打印()(stdout到纱线日志中)是的


我用了--principal'me@DOMAIN.HAD“\--keytab'/home/me/me.keytab'\并且pyspark脚本的执行工作正常(甚至写入配置单元表等等)。记录器不工作,但至少打印()是的

检查以确保您的shell驱动程序脚本知道keytab的绝对路径。在我的脚本中是:kinit-k-t/home/me/me.keytabme@DOMAIN.HADWell,值得一试。尝试以下方法:在类中使用“UserGroupInformation.loginUserFromKeytab”(或在shell脚本的开头运行“kinit-kt”命令)。“TGT应该在所有工作节点上”>>这意味着什么?!?您可以将keytab上传到HDFS,并让Oozie使用
指令在运行时下载它;然后,您可以
kinit
在服务器范围的缓存中为用户创建本地票证,或者在私有缓存中创建本地票证(使用
kinit
w/custom
KRB5CCNAME
)--或使用Spark
--principal/--keytab
或调用Hadoop
UserGroupInformation
的自定义代码的易失性会话票证,但请注意,
UserGroupInformation
适用于在驱动程序中运行的代码,而不是在执行器中运行的代码,因为默认身份验证令牌是在驱动程序启动之前创建和广播的,因此是在您可以执行自定义代码之前创建和广播的。