解决Kettle与Kerberos集成问题
本文目的:记录Kerberos环境下,通过Kettle将MySQL数据清洗到HDFS过程解决的2个问题,希望对大家有所帮助。
Kettle版本:pdi-ce-7.1.0.0-12
1、在Kerberos与Kettle集成过程中,我们有如下场景:将数据从MySQL定时抽出,然后写到HDFS。

在从MySQL取数并写入HDFS过程中,需要Kettle取得KDC认证,但无论怎么配置,还是无法解决写入HDFS的时候安全认证问题。我们最终定位是Kettle与Kerberos集成的问题。(在Kettle中通过Hive写HDFS依然有问题,不过我们自己解决了)。所以,如果要解决这个问题,方案有2:
a、通过StreamSets或者NiFi实时拉取MySQL数据到HDFS,而StreamSets或者NiFi本身和Kerberos能较好的集成在一起。
b、通过sqoop实现。
a方案看起来很美好,但是在我们的场景下,有几个问题需要解决:
a、从MySQL写入HDFS只是整个ETL任务的其中一环,如果用方案1,那么任务的前后衔接如何处理?
b、从MySQL写入HDFS的任务中,需要一些输入参数(需要读取的MySQL表,读取数据的时间),而目前1方案还无法支持灵活的输入参数配置。
所以我们选择了b方案。在这个方案中,
a、通过Kerberos配置可以保证Client有sqoop访问数据库和文件系统的权限
b、将Kettle中的MySQL抽数并写入HDFS的过程包装成shell脚本,将sqoop需要的输入参数query和target-dir等参数外部传入。
2、在实现方案b的时候,我们将sqoop import的参数动态传入,类似
./xxx.sh sql target-dir值
xxx.sh 的内容非常简单:
sqoop import --connect jdbc:mysql://ip:3306/db --username userXXX --password passXXX --target-dir $2 --fields-terminated-by '|' --split-by 'ID' --m 1 --as-textfile --num-mappers 10 --query $1
注意sqoop import的格式是--query '...'/--query "..." ,query内容前后用了引号,所以在$1引用的时候必须用"$1",否则sqoop会报"uncategorized parameter ..."
sqoop import --connect jdbc:mysql://ip:3306/db --username userXXX --password passXXX --target-dir $2 --fields-terminated-by '|' --split-by 'ID' --m 1 --as-textfile --num-mappers 10 --query "$1"
另外需要注意的是shell中,'$1'和"$1"是有区别的,如果某个变量赋值为'$1',则打印的结果还是'$1';如果是"$1",则会打印$1的引用。
解决Kettle与Kerberos集成问题的更多相关文章
- 基于Kafka Connect框架DataPipeline可以更好地解决哪些企业数据集成难题?
DataPipeline已经完成了很多优化和提升工作,可以很好地解决当前企业数据集成面临的很多核心难题. 1. 任务的独立性与全局性. 从Kafka设计之初,就遵从从源端到目的的解耦性.下游可以有很多 ...
- 解决Kettle ETL数据乱码
首先用insert语句插入一条数据试试是否因为MySQL编码不对引起,如果是MySQL原因,修改MySQL编码即可: 如果不是因为MySQL的编码导致问题,那么在Kettle的表输出中,编辑连接-选项 ...
- 记录一次bug解决过程:eclipse集成lombok插件
一 总结 eclipse集成插件lombok: 启动Spring Boot项目: sublime全局搜索关键字:ctrl + shift + F JDK8中的lambda表达式使用 二 BUG描述:集 ...
- 解决Keras在IDE集成环境中找不到nvcc
在我们正确配置了Keras使用GPU,并在Terminal中运行一切顺利的的时候,转到Pycharm或者Eclipse中运行有可能会出现"nvcc not found on the $PAT ...
- Ambari与Kerberos 集成
Kerberos 介绍 Kerberos 是一个网络认证的框架协议,其设计的初衷便是通过密钥系统为 Client 和 Server 应用程序之间提供强大的认证服务.在使用 Kerberos 认证的集群 ...
- 解决kettle在两个mysql之间迁移数据时乱码的问题 和 相关报错 及参数调整, 速度优化
1. 乱码问题 编辑目标数据库的链接: 配置编码参数即可. 2. 报错 No operations allowed after statement closed. 需要调整wait_timeout: ...
- 解决kettle配置文件中的中文乱码
在日常开发中有时候配置文件会出现中文(如config.properties 里有中文),为了避免出现乱码,因而要转成unicode编码. 1.在设置变量的javascript(转换中的JavaScri ...
- 打造实时数据集成平台——DataPipeline基于Kafka Connect的应用实践
导读:传统ETL方案让企业难以承受数据集成之重,基于Kafka Connect构建的新型实时数据集成平台被寄予厚望. 在4月21日的Kafka Beijing Meetup第四场活动上,DataPip ...
- kettle将Excel数据导入oracle
导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...
随机推荐
- Python:笔记2
[文件操作] 1.fileopen = open(file).readlines() //type是list 2.filewrite = open(file,'w') filewrite ...
- CSS:手机页面,常用字号和布局(工作中用)
{literal} {/literal} 公用css .cOrange,.cOrange:visited,.cOrange > a {color: #ff7200;} .border1-to ...
- base编码解码
function b64EncodeUnicode(str) { return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, func ...
- 使用Dom4j对XML文档创建与解析
创建XML文件: public class Dom4jCreateXml { public void testCreatXml() { //创建文档对象 Document document = Doc ...
- MySQL Windows环境变量设置
问题:MySQL无法全局使用 1.查找MySQL路径 2.添加环境变量 3.验证功能
- .net core 2.2 修改IdentityUser主键标识类型
.net core2.2,生成WebApi或者MVC项目后,Identity 1.增加ApplicationUser.cs文件,内容如下 public class ApplicationUser : ...
- ARTS打卡计划第一周-Algorithm
7. Reverse Integer import math class Solution: def reverse(self, x: int) -> int: ret = 0 if x > ...
- 上位机与三菱FX3U通过FX-232-BD通信
PLC侧设置: 和校验+协议4 读D200单字: 05 30 30 46 46 57 52 30 44 30 32 30 30 30 31 返回“201”:02 30 30 46 46 30 ...
- layui xtree 实现一级节点单选 ,子节点复选
在外部定义变量和方法 //定义变量 接收顶级节点的值 var topValue; // 获取顶级节点值的方法 function getParent(value) { var val = project ...
- hbuilder 打包 vueAPP
1:设置状态栏颜色 在manifest.json 找到 plus 下添加 "statusbar": { "immersed": true/*沉浸式状态栏*/ 设 ...