securityManager主要用于權限設置,比如在使用yarn作為資源調度框架時,用于生成secret key進行登錄。該類默認只用一個實例,所以的app使用同一個實例,下面是該類的所有源代碼:
[java] view plaincopy
private[spark]?class?SecurityManager(sparkConf:?SparkConf)????extends?Logging?with?SecretKeyHolder?{??????????private?val?sparkSecretLookupKey?=?"sparkCookie"??????private?val?authOn?=?sparkConf.getBoolean("spark.authenticate",?false)????????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",?""))??????private?var?viewAcls:?Set[String]?=?_??????????????private?var?modifyAcls:?Set[String]?=?_??????????private?val?defaultAclUsers?=?Set[String](System.getProperty("user.name",?""),??????Utils.getCurrentUserName())??????setViewAcls(defaultAclUsers,?sparkConf.get("spark.ui.view.acls",?""))????setModifyAcls(defaultAclUsers,?sparkConf.get("spark.modify.acls",?""))??????private?val?secretKey?=?generateSecretKey()????logInfo("SecurityManager:?authentication?"?+?(if?(authOn)?"enabled"?else?"disabled")?+??????";?ui?acls?"?+?(if?(aclsOn)?"enabled"?else?"disabled")?+??????";?users?with?view?permissions:?"?+?viewAcls.toString()?+??????";?users?with?modify?permissions:?"?+?modifyAcls.toString())??????????????????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??????????}????????}??????)????}??????????private?val?defaultSSLOptions?=?SSLOptions.parse(sparkConf,?"spark.ssl",?defaults?=?None)??????????????val?fileServerSSLOptions?=?SSLOptions.parse(sparkConf,?"spark.ssl.fs",?Some(defaultSSLOptions))????val?akkaSSLOptions?=?SSLOptions.parse(sparkConf,?"spark.ssl.akka",?Some(defaultSSLOptions))??????logDebug(s"SSLConfiguration?for?file?server:?$fileServerSSLOptions")????logDebug(s"SSLConfiguration?for?Akka:?$akkaSSLOptions")??????val?(sslSocketFactory,?hostnameVerifier)?=?if?(fileServerSSLOptions.enabled)?{??????val?trustStoreManagers?=????????for?(trustStore?<-?fileServerSSLOptions.trustStore)?yield?{??????????val?input?=?Files.asByteSource(fileServerSSLOptions.trustStore.get).openStream()????????????try?{????????????val?ks?=?KeyStore.getInstance(KeyStore.getDefaultType)????????????ks.load(input,?fileServerSSLOptions.trustStorePassword.get.toCharArray)??????????????val?tmf?=?TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm)????????????tmf.init(ks)????????????tmf.getTrustManagers??????????}?finally?{????????????input.close()??????????}????????}????????lazy?val?credulousTrustStoreManagers?=?Array({????????logWarning("Using?'accept-all'?trust?manager?for?SSL?connections.")????????new?X509TrustManager?{??????????override?def?getAcceptedIssuers:?Array[X509Certificate]?=?null????????????override?def?checkClientTrusted(x509Certificates:?Array[X509Certificate],?s:?String)?{}????????????override?def?checkServerTrusted(x509Certificates:?Array[X509Certificate],?s:?String)?{}????????}:?TrustManager??????})????????val?sslContext?=?SSLContext.getInstance(fileServerSSLOptions.protocol.getOrElse("Default"))??????sslContext.init(null,?trustStoreManagers.getOrElse(credulousTrustStoreManagers),?null)????????val?hostVerifier?=?new?HostnameVerifier?{????????override?def?verify(s:?String,?sslSession:?SSLSession):?Boolean?=?true??????}????????(Some(sslContext.getSocketFactory),?Some(hostVerifier))????}?else?{??????(None,?None)????}????????????private?def?stringToSet(list:?String):?Set[String]?=?{??????list.split(',').map(_.trim).filter(!_.isEmpty).toSet????}?????????????def?setViewAcls(defaultUsers:?Set[String],?allowedUsers:?String)?{??????viewAcls?=?(adminAcls?++?defaultUsers?++?stringToSet(allowedUsers))??????logInfo("Changing?view?acls?to:?"?+?viewAcls.mkString(","))????}??????def?setViewAcls(defaultUser:?String,?allowedUsers:?String)?{??????setViewAcls(Set[String](defaultUser),?allowedUsers)????}??????def?getViewAcls:?String?=?viewAcls.mkString(",")?????????????def?setModifyAcls(defaultUsers:?Set[String],?allowedUsers:?String)?{??????modifyAcls?=?(adminAcls?++?defaultUsers?++?stringToSet(allowedUsers))??????logInfo("Changing?modify?acls?to:?"?+?modifyAcls.mkString(","))????}??????def?getModifyAcls:?String?=?modifyAcls.mkString(",")?????????????def?setAdminAcls(adminUsers:?String)?{??????adminAcls?=?stringToSet(adminUsers)??????logInfo("Changing?admin?acls?to:?"?+?adminAcls.mkString(","))????}??????def?setAcls(aclSetting:?Boolean)?{??????aclsOn?=?aclSetting??????logInfo("Changing?acls?enabled?to:?"?+?aclsOn)????}??????????????????private?def?generateSecretKey():?String?=?{??????if?(!isAuthenticationEnabled)?return?null????????????val?sCookie?=?if?(SparkHadoopUtil.get.isYarnMode)?{????????val?secretKey?=?SparkHadoopUtil.get.getSecretKeyFromUserCredentials(sparkSecretLookupKey)????????if?(secretKey?!=?null)?{??????????logDebug("in?yarn?mode,?getting?secret?from?credentials")??????????return?new?Text(secretKey).toString????????}?else?{??????????logDebug("getSecretKey:?yarn?mode,?secret?key?from?credentials?is?null")????????}????????val?cookie?=?akka.util.Crypt.generateSecureCookie????????????????????????SparkHadoopUtil.get.addSecretKeyToUserCredentials(sparkSecretLookupKey,?cookie)????????logInfo("adding?secret?to?credentials?in?yarn?mode")????????cookie??????}?else?{????????????????sparkConf.getOption("spark.authenticate.secret")?match?{??????????case?Some(value)?=>?value??????????case?None?=>?throw?new?Exception("Error:?a?secret?key?must?be?specified?via?the?"?+????????????"spark.authenticate.secret?config")????????}??????}??????sCookie????}?????????????def?aclsEnabled():?Boolean?=?aclsOn??????????????????def?checkUIViewPermissions(user:?String):?Boolean?=?{??????logDebug("user="?+?user?+?"?aclsEnabled="?+?aclsEnabled()?+?"?viewAcls="?+????????viewAcls.mkString(","))??????!aclsEnabled?||?user?==?null?||?viewAcls.contains(user)????}??????????????????def?checkModifyPermissions(user:?String):?Boolean?=?{??????logDebug("user="?+?user?+?"?aclsEnabled="?+?aclsEnabled()?+?"?modifyAcls="?+????????modifyAcls.mkString(","))??????!aclsEnabled?||?user?==?null?||?modifyAcls.contains(user)????}???????????????def?isAuthenticationEnabled():?Boolean?=?authOn??????????????def?getHttpUser():?String?=?"sparkHttpUser"??????????????def?getSaslUser():?String?=?"sparkSaslUser"?????????????def?getSecretKey():?String?=?secretKey??????????override?def?getSaslUser(appId:?String):?String?=?getSaslUser()????override?def?getSecretKey(appId:?String):?String?=?getSecretKey()??}?
總結
以上是生活随笔為你收集整理的深入理解Spark 2.1 Core (十四):securityManager 类源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。