Spark执行环境——安全管理器SecurityManager

SecurityManager主要对账号、权限及身份认证进行设置和管理。如果Spark的部署模式为YARN,则需要生成secret_key(密钥)并存入Hadoop UGI;而在其它模式下,则需要设置环境变量_SPARK_AUTH_SECRET(优先级更高)或spark.lauthenticate.secret属性指定secret key(密钥)。SecurityManager还会给当前系统设置默认的口令认证实例,在SparkEnv中创建SecurityManager的代码如下:

val securityManager = new SecurityManager(conf)

SecurityManager有很多内部属性:

private val authOn = sparkConf.getBoolean(SecurityManager.SPARK_AUTH_CONF, false)
// keep spark.ui.acls.enable for backwards compatibility with 1.0
private var aclsOn =
  sparkConf.getBoolean("spark.acls.enable", sparkConf.getBoolean("spark.ui.acls.enable", false))
private var adminAcls: Set[String] =
  stringToSet(sparkConf.get("spark.admin.acls", ""))
// admin group acls should be set before view or modify group acls
private var adminAclsGroups : Set[String] =
  stringToSet(sparkConf.get("spark.admin.acls.groups", ""))
private var viewAcls: Set[String] = _
private var viewAclsGroups: Set[String] = _
// list of users who have permission to modify the application. This should
// apply to both UI and CLI for things like killing the application.
private var modifyAcls: Set[String] = _
private var modifyAclsGroups: Set[String] = _
// always add the current user and SPARK_USER to the viewAcls
private val defaultAclUsers = Set[String](System.getProperty("user.name", ""),
  Utils.getCurrentUserName())
private val secretKey = generateSecretKey()
  • authOn:是否开启认证。可以通过spark.authenticate属性配置,默认为false
  • aclsOn:是否对账号进行授权检查。可通过spark.acls.enable(优先级较高)或spark.ui.acls.enable(此属性是说为了向前兼容)属性进行配置。aclsOn的默认值为false。
  • adminAcls:管理员账号集合。可以通过spark.admin.acls属性配置,默认为空。
  • adminAclsGroups:管理员账号所在组的集合。可以通过spark.admin.acls.groups属性配置,默认为空。
  • viewAcls:有查看权限的账号集合。包扎AdminAcls、defaultAclusers及spark.ui.view.acls属性配置的用户。
  • viewAclsGroups:拥有查看权限的账号,所在组的集合。包括adminAclsGroups和spark.ui.view.acls.groups属性配置的用户。
  • modifyAcls:有修改权限的账号的集合。包括adminAcls、defaultAclUsers及spark.modify.acls属性配置的用户。
  • modifyAclsGroups:拥有修改权限的账号所在组的集合。包括adminAclsGroups和spark.modify.acls.groups属性配置的用户。
  • defaultAclUsers:默认用户。包括系统属性user.name指定的用户或系统登录用户或者通过系统环境变量SPARK_USER进行设置的用户。
  • secretKey:在YARN模式下,首先使用sparkCookie从Hadoop UGI中获取密钥。如果Hadoop UGI没有保存密钥,则生成新的密钥(密钥长度可以通过spark.authenticate.secretBitLength属性指定)并存入Hadoop UGI。其它模式下,则需要设置环境变量_SPARK_AUTH_SECRET(优先级更高)或spark.authenticate.secret属性指定。

SecurityManager中设置了默认的口令认证实例Authenticator,此实例采用匿名内部类实现,用于每次使用HTTP client从HTTP服务器获取用户的用户名和密码。这是由于Spark的节点间通信往往需要动态协商用户名、密码,这种方式灵活地支持了这种需求。设置默认身份认证器的代码如下:

if (authOn) {
  Authenticator.setDefault(
    new Authenticator() {
      override def getPasswordAuthentication(): PasswordAuthentication = {
        var passAuth: PasswordAuthentication = null
        val userInfo = getRequestingURL().getUserInfo()
        if (userInfo != null) {
          val  parts = userInfo.split(":", 2)
          passAuth = new PasswordAuthentication(parts(0), parts(1).toCharArray())
        }
        return passAuth
      }
    }
  )
}

 

 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值