Hadoop Spark 1.6.Token只能通过kerberos或web身份验证发布
在shell驱动程序脚本中,我在spark提交之前调用kinit keytab。问题是,它自己工作,但当我通过Oozie调用shell驱动程序scrip时,我得到了以下错误: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)
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/customKRB5CCNAME
)--或使用Spark--principal/--keytab
或调用HadoopUserGroupInformation
的自定义代码的易失性会话票证,但请注意,UserGroupInformation
适用于在驱动程序中运行的代码,而不是在执行器中运行的代码,因为默认身份验证令牌是在驱动程序启动之前创建和广播的,因此是在您可以执行自定义代码之前创建和广播的。