kettle集成kerberos认证hadoop

这里写自定义目录标题

需求

由于公司使用了kerberos认证的hadoop。在使用kettle的过程中发现访问hadoop的hdfs时会出现权限错误。故需要寻找一种能够通过kettle访问带kerberos认证hadoop的方法。
查找了网上的文章,发现可以通过自己修改kettle大数据连接源码的方式达到目标,但是网上并没有详细过程。故将详细过程进行分享。

过程

选择对应的目录,修改其中的jar包中的CommonHadoopShim类的getFileSystem方法。
kettle大数据插件目录源码
修改后内容如下:

public FileSystem getFileSystem(Configuration conf) throws IOException {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());

JobConf jobConf = ShimUtils.asConfiguration(conf);

//认证kerberos
if (jobConf.getBoolean("hadoop.security.authorization", false)) {
//设置java安全krb5配置,其中krb5.conf文件可以从成功开启kerberos的集群任意一台节点/etc/krb5.conf拿到,放置本地
String krb5File = jobConf.get("krb5_file_location", "/etc/krb5.conf");
// kerberos principal
String kerUser = jobConf.get("krb5_user_principal");
// 对应kerberos principal的keytab文件,从服务器获取放置本地
String keyPath = jobConf.get("krb5_user_keytab");
// 设置krb5.conf到环境变量
System.setProperty("java.security.krb5.conf", krb5File);
// 设置安全认证方式为kerberos
UserGroupInformation.setConfiguration(jobConf);
try {
UserGroupInformation.loginUserFromKeytab(kerUser, keyPath);
} catch (IOException e) {
throw new RuntimeException("kerberos login failed:", e);
}
}

// FileSystemProxy var3;
// try {
// var3 = new FileSystemProxy(org.apache.hadoop.fs.FileSystem.get(ShimUtils.asConfiguration(conf)));
// } finally {
// Thread.currentThread().setContextClassLoader(cl);
// }

FileSystemProxy var3;
try {
var3 = new FileSystemProxy(org.apache.hadoop.fs.FileSystem.get(jobConf));
} finally {
Thread.currentThread().setContextClassLoader(cl);
}

return var3;
}

修改方法:

在idea中新建一个project,导入所需jar包,包括:
在这里插入图片描述引入以上jar包后,在源码中新建一个CommonHadoopShim.java。包和所需修改的class一致,内容直接拷贝反编译的源码,对getFileSystem方法进行对应的修改。
在这里插入图片描述
修改完成后,将其build成class,在target里即可找到新编译的class文件,替换之前jar里的class文件即可。
编译
jar修改完成后,将hadoop服务器上配置文件拷贝到对应附录下,并对core-site.xml和hdfs-site.xml进行修改。
配置文件
core-site.xml 增加kerberos认证相关配置

<property>
    <name>hadoop.security.authentication</name>
    <value>kerberos</value>
  </property>
  <property>
    <name>hadoop.security.authorization</name>
    <value>true</value>
  </property>

hdfs-site.xml 增加

<property>
    <name>krb5_file_location</name>
    <value>C:/ProgramData/MIT/Kerberos5/krb5.ini</value>    修改为自己的
  </property>
  <property>
    <name>krb5_user_principal</name>
    <value>hive@SZSWDW.COM</value>                          修改为自己的
  </property>
  <property>
    <name>krb5_user_keytab</name>
    <value>E:/keytabs/hive.keytab</value>                  修改为自己的
  </property>

重启spoon。增加hadoop_clusters 点击“测试”即可完成访问kerberos的hdfs。
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值