Kettle实现oracle到hbase的数据抽取
本文采用kettle最新版本:7.1 (安装:下载下来后,直接解压就可以)
cdh版本为5.11.0
一、 环境配置操作流程:
(1) 由于最新版本的插件kettle7.1只能支持cdh5.10,所以我们要更改kettle的shim插件,主要操作就是替换jar包,如图:
首先hadoop的jar包:
把client目录的hadoop后缀是cdh5.10的jar包全换掉,换成5.11的包,如下图,其它jar包不用管:
接下来换hbase的jar,同理,在pmr目录下吧后缀为cdh5.10全换掉,如图:
由于我只用到了hbase,所以只替换了hadoop和hbase的jar,如果有用到hive或其它组件,直接像上面方法一样,直接替换jar就可以
接下来,我们要替换hadoop和hbase的xml配置文件,直接把cdh集群的配置文件拽过来就可以了,如图:
路径如图,直接替换掉就可以。
接下来修改config.properties,添加最下面一行,如图:
最后由于我们要连mysql,oracle所以要引入相应的jdbc驱动包:
路径:
jar包:
到这里,kettle基本配置完成。
二、 测试:oracle2hbase
./spoon.sh ,启动kettle client,我们测试oracle2hbase:
(1) 首先我们要从左边插件栏拖出一个表输入和一个
hbase输出,由于数据抽取过程中间可能会有字段格式转换,我们再脱出一个字段选择的插件,如图:
备注:
插件选择如图片左边标记部分,传输过程如图片右边流程图,用到那些组件直接拖过去就可以
(2) 各组件属性设置如下:
1、 表输入
双击表输入,出现如下配置框:
首先我们要新建一个数据库连接,点数据库连接新建,弹出如下可选框:
备注:
根据可选框提示,配置可选项,测试,保存!如果测试通过,如下图结果:
数据库连接配置成功后,写入sql抽取逻辑,点击预览,保存,到这里表输入这个步骤就完成了
2、 hbase output
双击插件如下图:
先配置Hadoop cluster连接:
只连hbase只配zookeeper连接就可以就可以,然后点击测试,出现如下如结果,证明连通:
连通后配置字段映射:
配置流程:(按上图1、2、3、4、5流程)
配置完成,在配置页选择配置完成的mapping,如下图:
配置完成,保存退出,点击启动,测试整个转换作业,如下图:
备注:出现如图结果,整个转换都是对号,且没有抛出error,证明成功
三、 linux开发环境无client情况下配置kettle作业
1、在本地client下配置ktr/kjb作业,保存成相应的ktr/kjb配置文
件,如下图
2、 将该文件上传到环境
3、命令行调用kettle作业
常用kettle job 调度启动程序,主要分两种,如下图:
备注:(windows:bat,linux:sh)
kettle作业主分两种:trasform、job(转换和job的区别不做赘述,在使用中大家可灵活变通),它们的命令行执行器也分为两种:
kitchen:工作(job)执行器 (命令行方式),后缀为.kjb的作业由它执行
Pan:转换(trasform)执行器 (命令行方式) ,后缀为.kt r的作业由它执行
两种执行器的使用,例:
./kitchen.sh -file=/opt/shell/crm/job_detail/crm.kjb >/opt/data-integration/job/log/crm.log
./pan.sh -file=/etc/tracy/kettle/vip_test.ktr > /etc/tracy/kettle/vip_test.log
如果要配定时任务,直接将命令加入crontab就行。
在linux环境下测试我们先前的vip_test.ktr任务:
执行完成,直接看log文件:
如图,证明执行成功
如果遇到如下报错:
缓存问题,每次启动前清一下/opt/data-integration/system/karaf/caches这个路径下的缓存就ok,也可以像我一样直接把清缓存的命令写入pan.sh启动脚本,这样就不用每次手动去清理了:
至此,一个基本的数据采集任务就完成了。
目的:由于项目需要,我们需要从业务系统oracle做准实时切高频率的数据采集到hbase,没5分钟一次,用sqoop抽,压力很大,切效果不好速度慢 ,所以这里选择用kettle
ketlle的优势:本身有利于大数据体系架构之外,sqoop的资源分配要由yarn管理,集群任务多要排队,按部就班,很耗时间,但是kettle不需要,并且kettle在处理小数据量的实时采集方面效率显得更优秀,速度更快,我们实时增量数据量不大的情况下,完全可以用kettle,且速度更快
kettle缺点:大数据量的数据采集显的力不从心,所以数据初始化还是要用sqoop这种工具,增量用kettle