如 security 所讲的,Kerberos 被应用在安全的 Hadoop 集群中去验证与服务和客户端相关联的 principals。 这允许客户端请求这些已验证的服务; 向授权的 principals 授予请求服务的权利。
Hadoop 服务发出 hadoop tokens 去授权访问服务和数据。 客户端必须首先获取它们将要访问的服务的 tokens,当启动应用程序时,将它和应用程序一起发送到 YAYN 集群中。
如果 Spark 应用程序与 HDFS,HBase 和 Hive 进行交互,它必须使用启动应用程序的用户的 Kerberos 凭据获取相关 tokens,也就是说身份将成为已启动的 Spark 应用程序的 principal。
这通常在启动时完成 : 在安全集群中,Spark 将自动为集群的 HDFS 文件系统获取 tokens,也可能为 HBase 和 Hive 获取。
如果 HBase 在类路径中,HBase 配置声明应用程序是安全的(即 hbase-site.xml 将 hbase.security.authentication 设置为 kerberos),并且 spark.yarn.security.tokens.hbase.enabled 未设置为 false,HBase tokens 将被获得。
类似地,如果 Hive 在类路径上,其配置包括元数据存储的 URI(hive.metastore.uris),并且 spark.yarn.security.tokens.hive.enabled 未设置为 false,则将获得 Hive token(令牌)。
如果应用程序需要与其他安全 HDFS 集群交互,则在启动时必须显式请求访问这些集群所需的 tokens。 这是通过将它们列在 spark.yarn.access.namenodes 属性中来实现的。
spark.yarn.access.namenodes hdfs://ireland.example.org:8020/,hdfs://frankfurt.example.org:8020/
Spark 支持通过 Java Services 机智(请看 java.util.ServiceLoader)与其它的具有安全性的服务来进行集成。为了实现该目标,通过在 jar 的 META-INF/services 目录中列出相应 org.apache.spark.deploy.yarn.security.ServiceCredentialProvider 的实现的名字就可应用到 Spark。这些插件可以通过设置 spark.yarn.security.tokens.{service}.enabled 为 false 来禁用,这里的 {service} 是 credential provider(凭证提供者)的名字。