Kettle是一款开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。
Kattle的工程存储方式有(1)以XML形式存储,(2)以资源库方式存储(不同的用户可以共同使用)
Kattle的两种设计:
- Transformation(转换):针对于数据的基础转换(着重于数据的ETL过程)
- Job(作业):完成整个工作流的控制(着重于不同步骤之间的控制流程)
区别:
- 一个Job中可以包含多个Transformation
- Transformation是数据流,Job是步骤流
- Job按照顺序执行,每一个步骤必须等待前一个步骤结束后才会执行
Transformation是一次性启动所有的控件,然后数据流从第一个控件开始,一条记录,一条记录的流向最后一个控件
Kattle的组成
- Spoon(勺子)(Spoon.bat/Spoon.sh):图形化页面
- Pan(煎锅)(Pan.bat/Pan.sh)用命令行的形式调用Transformation
- Kitchen(厨房)(Kitchen.bat/Kitchen.sh)用命令行的形式调用Job
- Carte(菜单)(Carte.bat/Carte.sh)Carte是一个轻量级的Web容器,用于建立专用的、远程的ETL Server
具体使用
MySQL到MySQL
利用Transformation将数据从一张表输出到另一张表里面
在mysql数据库中创建两张表,分别是stu1和stu2,现在要将stu1的数据写入stu2里面
stu1
stu2
然后来到kattle的可视化界面,通过Spoon.bat进入(Windows环境)
分别在左侧的侧边栏中找到表输入和插入/更新,表输入用来从mysql数据库的表中获取数据,而插入/更新用来将获取到的数据插入到另一张表中。这里按照shift即可在两个控件之间画上一条带箭头的线,这样两个控件之间就建立了联系
这里右上角会有绿色的对号图标,是因为我已经成功运行了一遍然后双击第一个表输入图标,编辑配置
这里需要配置的地方有两个,一个是数据库连接配置,一个是sql语句
数据库连接配置用来连接要使用的数据库
而sql语句用来选择从stu1表中获取哪些数据写入到stu2表中然后再双击下一个控件,查看相关的配置信息
数据库连接会自动获取上一个控件 表输入 配置好的信息,而目标表需要自己选择,这里要写入到stu2
用来查询的关键字,用id在stu1表和stu2之间做一个连接,这里指定name和id都可以,但是如果指定age就会报错,因此stu2表中没有age字段,在查询时就会因为查询不到stu2表的age字段而报错
更新字段,用来决定对哪些字段进行更新
用job来完成表数据的写入以及更改
在start里面可以设置任务的定时
转换里面是之前保存的转换文件,即将stu1表里面的数据写入到stu2中
在sql里面编写要执行的sql语句脚本
重新建立数据库的连接,然后在脚本里面编写的sql语句,会在上一步的转换过程结束后执行
最终结果为
mysql到hbase
最开始是两个表输入控件,分别从mysql的student表和score表里面获取数据,使用的sql语句分别是
select * from student
select student_id,sum(score) from score group by student_id对student表需要进行一下过滤,过滤出班级为理科的学生
在记录集连接控件之前,要对所有的表进行排序,这里就按照student的id字段,和score表的student_id字段进行排序然后按照id和student_id进行两张表的连接
在字段选择控件中,可以对表连接后的全部字段进行选择,选择具体将哪些字段的值写入到hbase中
最后的Hbase output控件将两张mysql里面的表连接后的数据写入到hbase中,但是在这个控件里面同样需要配置许多东西
首先是配置hadoop集群
测试的时候,有着打勾的选项就够了,其余的不用配置
然后
然后在hbase中创建一张表,create ‘kettle_demo’,‘info’
来到mappings的选项页下面,配置一下hbase表的映射关系,点击左下角的Save mapping,将映射关系保存为Mapping1
然后再回到原先的选项页下面
保存退出后,点击运行
到hbase中查看一下
写入成功