我们有一个启用了 kerberos 的 EMR 集群。我想通过其他应用程序使用 RM API 终止纱线作业。
curl -v -X PUT -H "Content-Type: application/json" -d '{"state": "KILLED"}' "http://x.x.x.x:8088/ws/v1/cluster/apps/application_id/state?user.name=hadoop"
我们遇到以下错误。
{“RemoteException”:{“异常”:“ForbiddenException”,“消息”:“java.lang.Exception: 默认静态用户无法执行此操作 操作。","javaClassName":"org.apache.hadoop.yarn.webapp.ForbiddenException"}}
您不能简单地在 Kerberized 集群上使用
...?user.name=...
。相反,您的curl应该通过SPNEGO向RM进行身份验证,这意味着使用curl选项--negotiate
和--user :
。您还需要 kinit
作为授权用户,在进行 REST 调用之前可以实际终止应用程序(应用程序所有者或超级用户)。