Python开发Kettle做大数据ETL,这回事要上线的了。前期准备kettle任务,本地阶段。
老规矩,交代一下业务场景,因为所有的框架和技术组件都一定要基于需求,解决实际问题,否则那就是闭门造车,没有丝毫意义。
应用场景介绍。
这回,我们记录下来了,从整体架构上来说,我们出现了一种同步情况,当前台页面访问页面时,出现了数据集合为空:
移除点击此处添加图片说明文字
可以看到,今天是13号,6月13号,我们需要跑12号的数据,却没有,问题就出现在当我们跑这块python脚本做任务调度的时候,出现了表数据还没有跑过来,会跑空表,但是表结构都有的,字段和数据结构都有,并不会报错的,请不要疑惑。那么你又要问,为什么不校验为空,那带你看看这个任务调度吧,
移除点击此处添加图片说明文字是不是挺复杂的,这还不算啥,当时开发是我们大数据经理开发的,现在如我所说,他走了,我要顶上来,也不要抱怨了,当时没做的事情,我们现在可以做了。就像我把他的studio做restful给推翻了一样,但是kettle目前不推翻,因为,如果全部写mapreduce的话,估计,要累翻了。不过,之前我的老大的上一任大数据经理,带领的团队就是全部靠代码完成这些工作的,没有用任何开源集成技术,王经理上任后就整合了kettle,不知道下一任来了会做怎样的改变。
闲言少说,直接开发了。还是那样,先把系统时间开发好:
移除点击此处添加图片说明文字接着开发业务表,从hive的日活跃用户表转移到库:
移除点击此处添加图片说明文字 请注意这里的id=id,这将触发事物,决定是否更新和插入,如果id一致,说明需要update。
移除点击此处添加图片说明文字注意这里使用了很多udf函数,当数据库的函数不够用时,我们往往开发udf,或者udaf,熟悉大数据的同学应该清楚,如果不熟悉也无妨,一般是用java编写的函数方法,那稍后,我们可以去看一下怎么写udf,然后怎么发布到数据库引用里,在后期我们都要尝试的。
业务清楚了,接下来就是整合了,写一个job:
移除点击此处添加图片说明文字start不定时,
移除点击此处添加图片说明文字然后创建转换:
移除点击此处添加图片说明文字邮箱设置也看一下吧,
移除点击此处添加图片说明文字
然后可以跑了:
移除点击此处添加图片说明文字到目前为止,这些都是在本地先开发,可以看到,hive跑的很慢的,正在跑着在,我们能做的,就是等。
移除点击此处添加图片说明文字之前被我删掉的测试库数据(几乎和生产数据一模一样)约有2万多条,交给hive了,而且还有函数拼装。然后看一下,应该就有了。
移除点击此处添加图片说明文字并且,邮件也已经发送过来了:
移除点击此处添加图片说明文字
到这里,我们虽然看到很简单,但是测试部分,我是认真私下里测试了2个小时了,所以说为什么看书觉得东西简单,自己做题目做项目觉得都是问题,因为,作者已经把遇到的坑解决过了,然后整理的一个没有问题的东西。
另外,我感觉要写很多了,因为马上还得去生产库上开发,刚才开发用的localhost,生产上还得写python脚本,所以,用两篇来记录吧。不然没办法了,写不完。
对哦,再说一个细节,这里我们没有用kettle的时间调度,因为马上我们会用python来写任务调度。