使用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
- 下载Kettle 8.3的大数据插件源码
git clone https://github.com/pentaho/pentaho-hadoop-shims.git -b 8.3
- 修改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);
}
}
-
修改后代码如下
-
在pentaho-hadoop-shims目录执行命令编译代码
mvn clean install -Dmaven.test.skip=true
使用方法
-
复制编译成功的插件文件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
-
删除插件目录自带的xml文件(core-site.xml, hbase-site.xml, hdfs-site.xml, hive-site.xml, mapred-site.xml, yarn-site.xml)
-
完成后插件目录如下:
-
在MRS的管理界面下载用户的的认证文件,将krb5.conf和user.keytab文件放入某一目录:如: /home/user/下
-
在MRS的管理界面下载HDFS组件的配置文件,将core-site.xml和hdfs-site.xml文件放入hdp30插件目录
-
修改hdfs-site.xml,在末尾增加相关kerberos的配置
-
修改hdfs-site.xml中dfs.client.failover.proxy.provider.hacluster的参数为:org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
-
在
/etc/hosts
中增加MRS集群节点主机名和IP的对应关系
-
打开Kettle,配置Hadoop Distribution为HDP30
-
新建一个转换,新增Hadoop Cluster,配置如下:hostname配置为hacluster,其他全部配置为空
-
点击测试,测试成功
-
拖动一个Hadoop file input对象,选择mrs集群,可以看到hdfs上的文件
- 点赞
- 收藏
- 关注作者
评论(0)