1 Kettle安装与基本概念
1.1 安装介绍
测试完之后发现6.0版本最稳定。本文采用的版本为pdi-ce-6.0.1.0-386.zip。
(1) Windows
首先,安装JDK,一般支持1.6以上版本。然后360解压,运行Soop.bat文件即可。
(2) Linux
首先,安装JDK,然后,使用unzip命令解压,执行Kitchen.sh即可。
1.2 基本概念
Kettle包括三大块:
Spoon——转换/工作(transform/job)设计工具 (GUI方式)
Kitchen——工作(job)执行器 (命令行方式)
Span——转换(trasform)执行器 (命令行方式)
Kettle是一款国外开源的etl工具,纯java编写,绿色无需安装,数据抽取高效稳定。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。
Kettle的ETL操作主要由以下六个部分构成:
(1)资源库:固定存储已建立好的连接、转换或作业的数据库。
(2)数据库连接:用户自定义的,在转换或作业中使用的数据库连接。
(3)转换(Transform):数据抽取、转换、加载流程的封装。
(4)作业(Job):将多个转换或一些任务封装,用于ETL任务的执行。
(5)步骤(steps):转换或作业的组成。
(6)节点连接(Hup):连接转换步骤或者连接Job(实际上就是执行顺序)的连线。
2 基本操作步骤
2.1 浏览和管理资源库
点击Spoon.bat打开kettle即会弹出如图2.1所示界面,点击 编辑已有的资源库连接;点击新增资源库连接。需新建号数据库连接、编辑名称和描述。
图2.1 资源库新建与编辑
最后点击“创建或更新”即可。用户名和密码默认为“admin”。资源库的作用是将制作好的.ktr和.kjb文件都存放到配置好的数据库中。如图2.2所示。
图2.2 资源库的登录
点击“工具”-“资源库”-“探索资源库”可浏览保存在资源库里的文件。如图2.3所示。
图2.3 探索资源库
2.2 新增数据库连接
在新建数据库连接之前,需将对应的数据库连接的驱动放到kettle的安装目录的pdi-ce-6.0.1.0-386\data-intergration\lib文件夹下。然后,点击新建图标,点击下拉框里面的“数据库连接”,选择mysql数据库类型,可新增数据库链接。如图2.4所示。
图2.4 数据库连接
访问方法:推荐使用JDBC。
连接名称:用户自定义。
服务器主机:填写数据库服务器IP地址。
数据库名称:填写数据库名称。
2.3 Hive连接
在创建hive数据库连接之前,需要将安装的hive的lib目录下的hive-common-*.jar文件放到kettle的安装目录pdi-ce-6.0.1.0-386\data-integration\lib下面。然后,启动远程服务开启hiveserver2 &。最后,点击新建图标,点击下拉框里面的“数据库连接”,选择HadoopHive2数据库类型,可新增数据库链接。
2.4 Hdfs连接
在创建Hadoop cluster连接之前,需要将集群的配置文档core-site.xml、mapred-site.xml、hdfs-site.xml复制到kettle安装目录的pdi-ce-6.0.1.0-386\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\cdh54下替换掉原有的文件。然后,修改此目录下的config.properties文件,在文件结尾加一行authentication.superuser.provider=NO_AUTH。最后,修改pdi-ce-6.0.1.0-386\data-integration\plugins\pentaho-big-data-plugin目录下的plugin.properties文件,修改active.hadoop.configuration=cdh54(改为自己安装的hadoop版本),等号右侧为hadoopcluster的版本型号。
点击“核心对象树”下的“hadoopcluster”新建连接。如图2.5所示。
图2.5 hadoop连接
2.5 新增作业和转换
点击,在弹出的下拉框中点击“作业”或“转换”来新建它们,左侧“主对象树”中详细显示了对应功能所包含的步骤,“核心对象”包含了可添加的对象步骤。
2.6 远程部署kettle
在后续的测试工作中发现,当本地的kettle去操作hdfs的时候会报错:could close the output stream for file “hdfs://….”。原因是本地和云服务器不在同一个网段。考虑到云服务器没有图形界面,采取在主节点部署kettle,然后开启远程服务,本地的ETL采用远程执行的方式操作。
a. linux安装kettle,并开启远程服务。
将安装包上传到主节点,然后用unzip命令解压,后续配置工作同上。
b. 开启远程服务。
配置data-integration/pwd/carte-config-*.xml文件。修改里面master和slaver的端口号,因为默认的8080端口与spark冲突。并将所有localhost更改为内网IP:xxxxx。用户名密码默都为cluster。
执行data-integration/carte.sh xxxxx:xxx启动远程服务。如图2.6所示。
图2.6 启动kettle远程服务
c. 配置远程服务
找到“主对象树”-“子服务器”,右击新建,过程如下图2.7所示。
图2.7 配置kettle远程服务器
d. 任务提交
当本地的etl文件写好之后,点击执行,在弹出的运行窗口中选择,“远程执行”,并选择上一步配置好的远程服务器。如下图2.8所示:
图2.8 提交远程作业并执行
e. 登录web端查看kettle远程服务状态
在浏览器登录http://xxxxx:xxxx用默认的用户名/密码cluster登录。
图2.9 Kettle服务器登录
图2. 10 kettle远程服务状态
2.7 调度kitchen.bat参数,写定时更新任务kettle
为了实现ETL任务自动化的定时执行,windows采用任务计划+.bat脚本的方式实现对增量数据的定时抽取的开发。
Kitchen—作业执行器,它是一个作业执行引擎,用来执行作业。这是一个命令行执行工具, 参数说明如下
-rep:Repositoryname 任务包所在存储名
-user:Repositoryusername 执行人
-pass:Repositorypassword 执行人密码
-job:Thenameofthejobtolaunch 任务包名称
-dir:Thedirectory(don'tforgettheleading/or\)
-file:Thefilename(JobXML)tolaunch
-level:Thelogginglevel(Basic,Detailed,Debug,Rowlevel,Error,Nothing)指定日志级别
-log:Theloggingfiletowriteto 指定日志文件
-listdir:Listthedirectoriesintherepository 列出指定存储中的目录结构。
-listjobs:Listthejobsinthespecifieddirectory 列出指定目录下的所有任务
-listrep:Listthedefinedrepositories 列出所有的存储
-norep:Don'tlogintotherepository 不写日志
本文的脚本里面采用的命令为Kitchen.bat /rep root /user admin /pass admin /job 作业名,具体定时任务开发见3.3.3节。