本文目的:记录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集成问题的更多相关文章

  1. 基于Kafka Connect框架DataPipeline可以更好地解决哪些企业数据集成难题?

    DataPipeline已经完成了很多优化和提升工作,可以很好地解决当前企业数据集成面临的很多核心难题. 1. 任务的独立性与全局性. 从Kafka设计之初,就遵从从源端到目的的解耦性.下游可以有很多 ...

  2. 解决Kettle ETL数据乱码

    首先用insert语句插入一条数据试试是否因为MySQL编码不对引起,如果是MySQL原因,修改MySQL编码即可: 如果不是因为MySQL的编码导致问题,那么在Kettle的表输出中,编辑连接-选项 ...

  3. 记录一次bug解决过程:eclipse集成lombok插件

    一 总结 eclipse集成插件lombok: 启动Spring Boot项目: sublime全局搜索关键字:ctrl + shift + F JDK8中的lambda表达式使用 二 BUG描述:集 ...

  4. 解决Keras在IDE集成环境中找不到nvcc

    在我们正确配置了Keras使用GPU,并在Terminal中运行一切顺利的的时候,转到Pycharm或者Eclipse中运行有可能会出现"nvcc not found on the $PAT ...

  5. Ambari与Kerberos 集成

    Kerberos 介绍 Kerberos 是一个网络认证的框架协议,其设计的初衷便是通过密钥系统为 Client 和 Server 应用程序之间提供强大的认证服务.在使用 Kerberos 认证的集群 ...

  6. 解决kettle在两个mysql之间迁移数据时乱码的问题 和 相关报错 及参数调整, 速度优化

    1. 乱码问题 编辑目标数据库的链接: 配置编码参数即可. 2. 报错 No operations allowed after statement closed. 需要调整wait_timeout:  ...

  7. 解决kettle配置文件中的中文乱码

    在日常开发中有时候配置文件会出现中文(如config.properties 里有中文),为了避免出现乱码,因而要转成unicode编码. 1.在设置变量的javascript(转换中的JavaScri ...

  8. 打造实时数据集成平台——DataPipeline基于Kafka Connect的应用实践

    导读:传统ETL方案让企业难以承受数据集成之重,基于Kafka Connect构建的新型实时数据集成平台被寄予厚望. 在4月21日的Kafka Beijing Meetup第四场活动上,DataPip ...

  9. kettle将Excel数据导入oracle

    导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...

随机推荐

  1. spring boot aop 自定义注解 实现 日志检验 权限过滤

    核心代码: package com.tran.demo.aspect; import java.lang.reflect.Method; import java.time.LocalDateTime; ...

  2. 执行计划:SET AUTOTRACE TRACEONLY

    SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显 ...

  3. Mysql 5 忘记root密码,设置免密登陆

    1.修改my.cnf配置文件 vi /etc/my.cnf #允许免密认证登陆 skip-grant-tables = true 2.重启Mysql数据库并登陆数据库修改root用户密码 system ...

  4. WRF 安装备忘

    ▶ n 年前在笔记本上安装 WRF 的一个过程 ● 安装 cpp,csh,m4,quota,samba # apt-get install cpp csh m4 quota samba ● 网上教程有 ...

  5. python列表中的pop函数

    再python的列表中,有许多的内置方法,而在这里我主要向大家介绍一下pop函数. pop函数主要是用于删除列表中的数据.而其删除值时会返回删除的值.如果没有参数传入时, 则会默认认为删除列表的最后一 ...

  6. jvm(一)类加载器

    1.jvm的生命周期结束的几种情况 a.执行了System.exit()方法 b.程序正常执行结束 c.程序在执行过程中遇到了异常或错误而异常终止 d.操作系统出现错误 2.类加载过程 加载:查找并加 ...

  7. mysql for循环存储过程

    DROP PROCEDURE IF EXISTS test_insert; DELIMITER ;; CREATE PROCEDURE test_insert () BEGIN DECLARE i i ...

  8. Winform 中写代码布局中遇到的控件遮盖问题

    在winform中编程时,需要动态向主窗体中增加菜单栏和用户控件,菜单栏需要设置DockStyle为Top ,而设置用户控件的DockStyle为Fill,之后在加载的时候,出现了菜单栏遮盖用户控件的 ...

  9. FICO-初级会计学

    初级会计学 https://wenku.baidu.com/view/39257b1a59eef8c75fbfb348.html?from=search https://wenku.baidu.com ...

  10. __proto__、prototype和原型对象

    一.__proto__ 对象内部存在一个指针,用来指向上一层函数的原型对象.ECMA-262第五版中关这个指针叫[[prototype]],但Firefox.Safari和Chrome在每个对象上都支 ...