既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
Caused by: javax.security.auth.login.LoginException: null (68)
Caused by: KrbException: null (68)
Caused by: KrbException: Identifier doesn’t match expected value (906)
#### 2、hadoop conf信息配置
Hadoop configuration配置(类`org.apache.hadoop.conf.Configuration`)
文档中明确了:会默认加载类路径下的`core-default.xml`文件内容。
Unless explicitly turned off, Hadoop by default specifies two resources, loaded in-order from the classpath:
core-default.xml: Read-only defaults for hadoop.
core-site.xml: Site-specific configuration for a given hadoop installation.
`core-default.xml`中含有hadoop的安全配置`hadoop.security.authentication`,在`UserGroupInformation`中依据此项配置,查询集群是否启动kerberos。
HADOOP\_SECURITY\_AUTHENTICATION路径如下:
`org.apache.hadoop.fs.CommonConfigurationKeysPublic#HADOOP_SECURITY_AUTHENTICATION`
public static AuthenticationMethod getAuthenticationMethod(Configuration conf) {
String value = conf.get(HADOOP_SECURITY_AUTHENTICATION, “simple”);
try {
return Enum.valueOf(AuthenticationMethod.class,
StringUtils.toUpperCase(value));
} catch (IllegalArgumentException iae) {
throw new IllegalArgumentException("Invalid attribute value for " +
HADOOP_SECURITY_AUTHENTICATION + " of " + value);
}
}
所以如果在环境变量中配置了`HADOOP_HOME`或者`HADOOP_CONF_DIR`对于`UserGroupInformation`是没有用的。
必须将`core-site.xml`放在类路径下,或者直接调用`org.apache.hadoop.security.UserGroupInformation#setConfiguration`设置加载过core-site.xml的conf对象。
#### 3、UserGroupInformation认证
##### 3.1 、apache原生的UserGroupInformation验证:
UserGroupInformation类中使用静态变量存放hadoop conf和已认证用户信息,所以只需要程序中认证一次,不同类不需要传递认证的user,只需要都到UserGroupInformation取即可。
private static Configuration conf;
private static UserGroupInformation loginUser = null;
private static String keytabPrincipal = null;
private static String keytabFile = null;
调用`org.apache.hadoop.security.UserGroupInformation#loginUserFromKeytab`传入principal和keytab就可以完成认证。
##### 3.2、cloudera改良过的UserGroupInformation验证:
当然,可以调用原生的`loginUserFromKeytab`也可以。
改良内容就是通过配置环境变量的方法,`隐性`完成kerberos用户认证。无需UserGroupInformation认证,在调用`getLoginUser`可以自动完成认证。
具体过程如下:
`org.apache.hadoop.security.UserGroupInformation#getLoginUser`方法获取用户
public static UserGroupInformation getLoginUser() throws IOException {
…
if (loginUser == null) {
UserGroupInformation newLoginUser = createLoginUser(null);
…
}
}
实际是调用了`doSubjectLogin(null, null)`
UserGroupInformation createLoginUser(Subject subject) throws IOException {
UserGroupInformation realUser = doSubjectLogin(subject, null);
…
}
如下代码`subject == null && params == null`判断true
private static UserGroupInformation doSubjectLogin(
Subject subject, LoginParams params) throws IOException {
ensureInitialized();
// initial default login.
if (subject == null && params == null) {
params = LoginParams.getDefaults();
}
HadoopConfiguration loginConf = new HadoopConfiguration(params);
try {
HadoopLoginContext login = newLoginContext(
authenticationMethod.getLoginAppName(), subject, loginConf);
login.login();
…
}
获取环境变量:`KRB5PRINCIPAL`、`KRB5KEYTAB`、`KRB5CCNAME`
private static class LoginParams extends EnumMap<LoginParam,String>
implements Parameters {
…
static LoginParams getDefaults() {
LoginParams params = new LoginParams();
params.put(LoginParam.PRINCIPAL, System.getenv(“KRB5PRINCIPAL”));
params.put(LoginParam.KEYTAB, System.getenv(“KRB5KEYTAB”));
params.put(LoginParam.CCACHE, System.getenv(“KRB5CCNAME”));
return params;
}
}
结果是利用环境变量设置的pricipal+keytab或者cache认证。
环境变量配置:
(1)每个程序单独配置:
在`-DKRB5PRINCIPAL=xxx -DKRB5KEYTAB=xxx` 或者 `-DKRB5CCNAME=xxx`
(2)系统环境默认配置:
win环境如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/3c44a1ff436444c9a78675b001eaf921.png)
linux环境下/etc/profile添加:
`export KRB5PRINCIPAL=xxx -DKRB5KEYTAB=xxx`或者`export KRB5CCNAME=xxx`
![img](https://img-blog.csdnimg.cn/img_convert/2ea211b2f2b48427680333e448312348.png)
![img](https://img-blog.csdnimg.cn/img_convert/a8afb0c6b612e2bbc5e8056e66b873bb.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**