求木之长者,必固其根本;
欲流之远者,必浚其泉源;
思国之安者,必积其德义。
魏征《谏太宗十思疏》
摘要:本文由以数据之名分享,正所谓“想要树木生长,一定要稳固它的根;想要泉水流得远,一定要疏通它的源泉;想要国家安定,一定要厚积道德仁义”。正如“谏太宗十思疏”所示:要想ETL写得六,基础原理要吃透。前面的两篇文章“Kettle知识库问答系列之三十而立、四十不惑”,叙述了使用Kettle作为ETL开发的常见组件使用说明、业务场景实现逻辑以及组件性能优化相关内容名。今天,我们跟着小编的节奏,继续探讨Kettle知识库问答系列之五十而耳顺篇,做到“面试官围困千万重,我自岿然不动”。
第041问:kettle任务和作业血缘分析如何做?
第041答:元数据重点,元数据的分类拆解:技术元数据、业务元数据、管理元数据等,具体体系的管理,datax框架就可以实现啦。
后续任务元数据解析,也就是需要用到血缘解析引擎,底层基于antlr或者calcite构建血缘解析引擎体系。再者,就是元数据血缘关系解析引擎,元数据血缘影响性分析解析,这里最好用neo4j单机或者hugegraph分布式图数据库,更加方便与直观存储关系数据,……
那么kettle数据血缘元数据解析,也可以基于antlr、calcite等语法树解析引擎,同时还要加上kettle某些组件的天然属性,定义并区分输入和输出组件范围,构建可以支撑原始的ktr或kjb文件的综合解析引擎,来实现整个血缘元数据的基础解析;
定义作业任务的作业和转换调用关系解析
定义转换的元数据输入和输出组件
第042问:kettle单转换多输入和多转换单输入的区别?
第042答:从功能上来看:如果步骤一致,没什么区别。
从性能上来看:有区别。在启动内存固定相同的前提下,
单独运行
一、启动资源占用角度:
单个转换,只需要启动一个jvm进程,每个组件单独线程执行,清洗过程中数据流内存占用很大;但存在oom风险(推荐)
多个转换并行执行,需要启动多个jvm进程,启动内存就占用很大,内存=n*单个转换,初始化占用资源更高(不推荐)
多个转换串行执行,启动单个jvm进程,清洗过程中数据流占用内存较小,大约为1步骤的1/n(推荐)
二、数据库连接初始化角度:
单个转换,多个输入连接只需要初始化一次
多个转换,每个输入连接都需要初始化一次
容器或集群服务化运行
一、启动资源占用角度,由容器或集群本身确定:
1、单个转换,只能在单个节点执行,清洗效率相对2要低,清洗过程内存资源占用很大,容易oom;(不推荐)
2、多个转换并行执行,可以分散到不同执行节点运行,清洗效率更高(推荐)
二、数据库连接,推荐使用连接池
第043问:kettle的java脚本组件,为什么不支持Map<String,Object> itbigbirdMap = new HashMap<>()定义?
第043答:Kettle的Java脚本组件,不能识别java的泛型操作。如果需要用到类泛型<>定义,建议直接打个jar使用。
第044问:kettle的使用MySQL类型数据库,查询时报如下异常:
“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘OPTION SQL_SELECT_LIMIT=DEFAULT’ at line 1”
第044答:MySQL的jdbc驱动包版本太低,比如5.1.7版本。推荐升级JDBC包为5.1.3x、5.1.4x
第045问:
Incorrect integer value: ‘N’ for column ‘flag’ at row 1?
第045答:数据库表字段类型为:tinyint 长度为1
在java中对应的类型是boolean。查询时直接在页面展示成true或false 如果是2,3,4 这样的也是默认成true,非常不友好。
解决方案:在jdbc连接添加 tinyInt1isBit=false
第046问:kettleMySQL数据库连接出现如下异常:
1、Caused by: javax.net.ssl.SSLException: Unsupported record version Unknown-0.0?2、Caused by: javax.net.ssl.SSLException: closing inbound before receiving peer’s close_notify?
第046答:首先,检查下服务端数据库,应该是开启了SSL的状态:
SHOW VARIABLES LIKE ‘%ssl%’;
其次,这个问题有两个解决方案:
一、客户端连接配置调整(推荐)
关闭使用ssl协议,jdbc连接配置新增选项->命名参数
useSSL=false
二、服务端数据库配置调整
在mysql的配置文件my.cnf中加上一行:
# disable_sslskip_ssl
重启MySQL:
service mysqld restart
第047问:Kettle批量加载组件Oracle Bulkload使用时,sqlloder各个文件完好,权限也具备,但导入oracle数据库的时候报如下异常:
SQL*Loader-704: Internal error: ulconnect: OCIServerAttach [0]ORA-12154: TNS:could not resolve the connect identifier specified
第047答:原因一般是本地远程tns服务未开通问题,但是sqlloader必须要用本地tns连接远程数据库。具体解决方案有如下两种:
本地重装oracle的tns服务,并且在tnsnames.ora里面配置好远程服务器的tns连接,这个耗费比较大,但也是可行的。
直接在sid里面加上远程数据库服务器的ip,如:sid=数据库名/密码@//远程数据库ip\:端口/远程数据库的sid
第048问:Kettle文件资源库迁移到数据库资源库,目录创建异常?
第048答:首先,线上已验证。如果文件资源库是新创建的,且作业和转换都是在新的资源库上,完成开发的。那么文件资源库导出和迁移到数据库资源库,是可以的。
其次,如果目录出现异常。那真相只有一个,就是你是前期开发好的作业和转换,只是通过新创建文件资源库,来指向对应文件目录。这是通过资源库管理查看,文件目录结构是正常的。但实际的作业或者转换的原始xml文件,<directory>标签,对应的真实目录并未真正归属到文件资源库的对应目录。导致迁移出现原始的目录结构创建异常。
第049问:kettle手动连接数据库时,能连接成功!但是到连接资源库时就连接不上,报:“You don’t seem to be getting a connection to the server. Please check the pa……” 如图
第049答:应该是连的数据库资源库里面少了R_USER这张表!用命令行或其他工具进入数据库,并创建R_USER这张表,并插入数据
INSERT INTO R_USER(ID_USER, LOGIN, PASSWORD, NAME, DESCRIPTION, ENABLED) VALUES (1,’admin’,’2be98afc86aa7f2e4cb79ce71da9fa6d4′,’Administrator’,’User manager’,1);INSERT INTO R_USER(ID_USER, LOGIN, PASSWORD, NAME, DESCRIPTION, ENABLED) VALUES (2,’guest’,’2be98afc86aa7f2e4cb79ce77cb97bcce’,’Guest account’,’Read-only guest account’,1);再连接资源库用admin/admin或guest/guest登陆即可。
第050问:kettle Linux环境调用资源库中的Job报如下异常?
-ERROR: No repository provided, can’t load job.
第050答:首先,在登录用户kettle下检查资源库是否正常检测到,具体脚本如下:
./kitchen.sh -listrep
从日志看,资源库列表为空,或者未找到自己的资源库信息
其次,把windows路径下的.kettle文件夹上传到Linux的”/home/kettle/”目录下(比如:Linux用户kettle)
最后,重新执行./kitchen.sh -listrep脚本,正常检查到资源库列表。就可以执行后面的job或者trans的调用啦。
Kettle插件开发之Splunk篇
Kettle插件开发之Elasticsearch篇
Kettle插件开发之KafkaConsumerAssignPartition篇
Kettle插件开发之KafkaProducer篇
Kettle插件开发之KafkaConsumer篇
Kettle插件开发之KafkaConsumerAssignPartition篇
Kettle插件开发之MQToSQL篇
Kettle插件开发之Redis篇
基于Kettle快速构建基础数据仓库平台
Kettle知识库问答系列之三十而立
Kettle知识库问答系列之四十不惑
Kettle实战系列之Carte集群应用
Kettle实战系列之动态邮件
虽小编一己之力微弱,但读者众星之光璀璨。小编敞开心扉之门,还望倾囊赐教原创之文,期待之心满于胸怀,感激之情溢于言表。一句话,欢迎联系小编投稿您的原创文章!
回复1,获取全平台解压缩密钥
回复2,获取kettle快速入门示例
回复kettle,获取离线和实时数据仓库资料和视频
回复code,获取全平台Kettle插件及实例源码
回复plugin,获取全平台插件Release包
回复ppt,获取全平台分享精彩PPT模板
回复etl,获取Kettle知识库系列资料
回复mysql,获取MySQL中英文指导学习手册
回复mail,获取Kettle实战系列之动态邮件附件
回复block,获取Kettle阻塞组件使用示例
回复multidir,获取Kettle Excel多级目录测试使用示例