前言
本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系
正文
SecurityManager 主要对账号、权限及身份认证进行设置和管理。
如果 Spark 的部署模式为 YARN ,则需要生成 secret key (密钥)并存入 Hadoop UGI 。
而在其他模式下,则需要设置环境变量 _SPARK_AUTH_SECRET (优先级更高)或 spark.authenticate.secret 属性指定 secret key (密钥)。
SecurityManager 还会给当前系统设置默认的口令认证实例。
SecurityManager 源码类注释 (3.2.0-SNAPSHOT)
/**
* spark 中负责安全的类。
*
* 一般来说,这个类应该由SparkEnv实例化,大多数组件应该从SparkEnv访问它。
*
* 有些情况下SparkEnv还没有初始化,必须直接实例化这个类。
*
* 此类实现了与“Security”文档中描述的安全特性相关的所有配置。
*
* 请参阅该文档以了解此处实现的特定功能。
*
* @param sparkConf Spark 的配置对象
* @param ioEncryptionKey IO 加密密钥字节数组
* @param authSecretFileConf 来自配置项:spark.authenticate.secret.driver.file(Driver)或者 spark.authenticate.secret.executor.file(Executor)
*/
private[spark] class SecurityManager(
sparkConf: SparkConf,
val ioEncryptionKey: Option[Array[Byte]] = None,
authSecretFileConf: ConfigEntry[Option[String]] = AUTH_SECRET_FILE)
extends Logging with SecretKeyHolder
SecretKeyHolder 源码解读(3.2.0-SNAPSHOT)
package org.apache.spark.network.sasl;
/**
* 用于获取与某个应用程序相关联的密钥的接口。
*/
public interface SecretKeyHolder {
/**
* 获取给定appId的合适的SASL用户。
* @throws IllegalArgumentException 如果给定的appId未与SASL用户关联
*/
String getSaslUser(String appId);
/**
* 获取给定appId的适当SASL密钥。
* @throws IllegalArgumentException 如果给定的appId未与SASL密钥关联。
*/
String getSecretKey(String appId);
}