使用Kettle 8.3对接开启Kerberos认证的MRS集群的HDFS组件

一枚核桃 发表于 2021/04/02 17:18:28 2021/04/02
【摘要】 开源Kettle版本不支持Kerberos认证的Hadoop集群,本文通过简单的插件改造,使得Kettle 8.3能够连接开启Kerberos认证的MRS集群的HDFS组件

背景

Kettel是一款比较最容易上手的开源ETL工具,在很多数据集成的项目中都有使用,
Kettel商业化以后改名为Pentaho,Pentaho推出了商业化的付费产品套件,在商用版本中增强了很多企业级的能力,当前Kettle支持Kerberos认证Hadoop集群的能力是放在其商用版本中的,开源版本不支持Kerberos认证的Hadoop集群
本文通过简单的插件改造,使得Kettle 8.3能够连接开启Kerberos认证的MRS集群的HDFS组件

前提条件

已经安装Maven, version 3+
已经安装Java JDK 1.8
将Pentaho的mvn配置文件settings.xml (https://raw.githubusercontent.com/pentaho/maven-parent-poms/master/maven-support-files/settings.xml) 放入 <user-home>/.m2 目录

编译步骤

懒得自行编译的,可以直接从github下载修改好的插件文件kettle8.3-hdp26和kettle8.3-hdp30

https://github.com/fengyunyx/KettlePluginKerberos
  1. 下载Kettle 8.3的大数据插件源码
git clone https://github.com/pentaho/pentaho-hadoop-shims.git -b 8.3
  1. 修改pentaho-hadoop-shims/common/common-shim/src/main/java/org/pentaho/hadoop/shim/common/CommonHadoopShim.java,增加如下kerberos认证部分代码,并修改return new FileSystemProxy这一行最后get的参数
JobConf jobconf = ShimUtils.asConfiguration(conf);
if (jobconf.getBoolean("hadoop.security.authorization", false)) {
  String krb5conf = jobconf.get("krb5conf", "/etc/krb5.conf");
  String user_principal = jobconf.get("user_principal");
  String user_keytab = jobconf.get("user_keytab");

  System.setProperty("java.security.krb5.conf", new File(krb5conf).getCanonicalPath());
  UserGroupInformation.setConfiguration(jobconf);
  try {
    UserGroupInformation.loginUserFromKeytab(user_principal, new File(user_keytab).getCanonicalPath());
  } catch (IOException e) {
    throw new RuntimeException("Failed to login in Kerberos.", e);
  }
}
  1. 修改后代码如下
    image.png

  2. 在pentaho-hadoop-shims目录执行命令编译代码

mvn clean install -Dmaven.test.skip=true

使用方法

  1. 复制编译成功的插件文件pentaho-hadoop-shims/shims/hdp30/impl/target/pentaho-hadoop-shims-hdp30-8.3.0.0-SNAPSHOT.jar 到 kettle8.3的hdp30插件目录data-integration/plugins/pentaho-big-data-plugin/hadoop-configurations/hdp30/,并删除原有插件文件pentaho-hadoop-shims-hdp30-8.3.2019.05.00-371.jar

  2. 删除插件目录自带的xml文件(core-site.xml, hbase-site.xml, hdfs-site.xml, hive-site.xml, mapred-site.xml, yarn-site.xml)

  3. 完成后插件目录如下:

    image.png

  4. 在MRS的管理界面下载用户的的认证文件,将krb5.conf和user.keytab文件放入某一目录:如: /home/user/下

  5. 在MRS的管理界面下载HDFS组件的配置文件,将core-site.xml和hdfs-site.xml文件放入hdp30插件目录

    image.png

  6. 修改hdfs-site.xml,在末尾增加相关kerberos的配置

    image.png

  7. 修改hdfs-site.xml中dfs.client.failover.proxy.provider.hacluster的参数为:org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

    image.png

  8. /etc/hosts中增加MRS集群节点主机名和IP的对应关系
    image.png

  9. 打开Kettle,配置Hadoop Distribution为HDP30

image.png

  1. 新建一个转换,新增Hadoop Cluster,配置如下:hostname配置为hacluster,其他全部配置为空

    image.png

  2. 点击测试,测试成功

    image.png

  3. 拖动一个Hadoop file input对象,选择mrs集群,可以看到hdfs上的文件
    image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。