一、 Kettle集群概述
1) Kettle集群简介
集群技术可以用来水平扩展转换,使得他们能够同时运行在多台服务器上。它将转换的工作量均分到不同的服务器上。这一部分,我们将介绍怎样配置和执行一个转换,让其运行在多台机器上。
一个集群schema由一台主服务器,和一些子服务器组成,主服务器作为一个集群的控制器。简单的说,我们提到的Carte控制服务器就是主服务器,其他的Carte服务器就是子服务器。
2) Kettle集群优劣势
集群的优点
和其它系统的集群一样,有以下优点:
1)多服务器运行,加快处理速度,对于大数据量的操作更明显。
2)防单点失败,一台服务器故障后其它服务器还可以运行。
集群的缺点
1)采用主从结构,不具备自动切换主从的功能。所以一旦主节点宕机,整个系统不可用。
2)对网络要求高,节点之间需要不断的传输数据。
3)需要更多的服务器,而且主节点没有处理能力(在该步骤没有处理能力,在其他的没有使用集群功能的步骤仍具有处理能力)。
适用场景
适合于:
1)需求kettle能时刻保持正常运行的场景。
2)大批量处理数据的场景。
二、 Kettle集群部署方案
1) Window本机部署三节点集群
Window本机部署只适用于本地开发环境。它作为一个伪集群方式进行部署,采用的一个kettle安装文件且用不同的端口进行集群部署。首先采用的环境是Win10,kettle版本采用的5.4.0,jdk采用的1.8.0_91。(当然,首先需要配置java环境变量,保证kettle正常启动)
1.首先确认本机是否有tomcat运行,因为kettle集群的master默认采用8080端口,这和tomcat的默认端口是冲突的,当然可以进行端口修改,自定义使用端口。
2.打开kettle的安装目录,进入到data-integration->pwd目录,找到carte-config-master-8080.xml文件。
3.打开carte-config-master-8080.xml文件,如下图。该文件主要是进行master主机配置。
注意:在本机部署的集群环境中,建议hostname填localhost,因为开发者很多会在本机安装虚拟机,虚拟机NAT网络连接会修改本地的ip地址,如果是熟练使用wmware等虚拟机软件的开发者,请忽略。
4.carte-config-8081.xml文件是子服务器的配置文件。打开该文件,如下图。其中masters中,name、hostname、port需要和carte-config-master-8080.xml中完全一致。然后,同样修改carte-config-8082.xml文件。
注意:username和password并不是指主机的登陆账号和密码,是集群的账号密码,该账号密码是集群连接的依据,账号密码是通过混淆的方式保存在pwd文件,kettle默认的账号密码是cluster/cluster,所以,在本机开发的时候,为了方便,账号密码都不用修改,都使用cluster即可。
5.集群启动。在开始菜单中启动命令提示符(管理员),进入到data-integration目录下,输入carte.bat pwd\carte-config-master-8080.xml,启动master节点。
注意:启动时,出现attemping to load ESAPI.properties等提示为kettle出现的bug,暂时未发现解决方法。
然后,再打开一个命令提示符的窗口,进入到data-integration目录下,执行命令carte.batpwd\carte-config-8081.xml,则启动8081端口的子服务器。重复动作,启动8082端口的子服务器。
在启动了三台集群服务器之后,在浏览器中输入localhost:8080,进入到页面如下:
输入cluster/cluster,进入到页面如下:
表示主节点已经启动完毕。输入localhost:8081及localhost:8082查看子服务器状态。
到此,windows本机三节点集群部署完毕。
2) windows调用linux环境集群组
由于大多数kettle集群开发采用windows本地开发,然后集群环境在linux上。因此,则需要在此环境进行开发,测试及部署。
此文档的开发环境是:Centos7、kettle5.4.0、jdk1.9.0、本机为win10。
网络连接为:
本机:Vmnet8设置192.168.10.100
集群Master:192.168.10.101
集群Slave1:192.168.10.102
集群Slave2:192.168.10.103
需要在centos7上安装好jdk,配置好环境变量,并且把kettle安装好。(kettle不需要启动spoon来启动图形界面,利用kitchen调试好即可,linux上安装kettle网上有很多教程,自行查阅即可)
注意:在集群运行环境中,需要端口打开或者直接关闭防火墙,供主服务器及子服务器互相连通通讯,在centos7中,放火墙采用firewalld的方式,和以前的iptable不一样,检查端口是否开通,可以通过本机进行telnet测试。Centos7防火墙配置见笔记。
首先,像windows开发环境一样,配置pwd中的carte-config-master-8080.xml、carte-config-8081.xml和carte-config-8082.xml文件,配置文件见下图:
注意:再次声明,配置文件中的username和password并不是指主机的登陆账号和密码,是集群的账号密码,该账号密码是集群连接的依据,账号密码是通过混淆的方式保存在pwd文件,kettle默认的账号密码是cluster/cluster,修改该账号密码需要修改pwd文件。
注意:该环境将master、slave1、slave2的pwd的三个配置文件都修改了,并且都修改的一样。理论上是master修改carte-config-master-8080.xml、slave1修改carte-config-8081.xml、slave2修改carte-config-8082.xml即可。如果不修改出现了cannotconnet的报错,请三台linux系统中的pwd配置文件都进行修改。
启动master。在master的虚拟机(192.168.10.101)中,进入到data-integration目录下,运行./carte.sh192.168.10.101 8080。启动服务,启动192.168.10.101为carte-config-master-8080.xml设置的ip,8080为carte-config-master-8080.xml设置端口。
注意:启动时,出现attemping to load ESAPI.properties等提示为kettle出现的bug,暂时未发现解决方法。
启动之后,在浏览器输入192.168.10.101:8080,出现如下图:
输入cluster/cluster,登陆进入。
表示master启动成功。
启动slave1,在salve1(192.168.10.102)中,进入到data-integration目录下,运行./carte.sh192.168.10.102 8081。
启动之后,在浏览器输入192.168.10.102:8081,输入cluster/cluster出现如下图:
表示slave1启动成功。
启动slave2,在salve2(192.168.10.103)中,进入到data-integration目录下,运行./carte.sh192.168.10.103 8082。
启动之后,在浏览器输入192.168.10.102:8081,输入cluster/cluster出现如下图:
表示slave2启动成功。
在windows本机新建子服务器及集群。在主对象树中新建子服务器,配置分别如下图,
在主对象树中,在“kettle集群schmas”中右键,新建,点击“选择子服务器”,添加刚才新建的子服务器,然后确定。
到此,集群搭建完毕。
集群远程执行开发。在kettle开发中,通常是需要远程调用测试环境的kettle集群来进行开发测试的。现在,集群环境在linux环境,采用远程执行的方式进行运行设计好的带有集群的kettle代码。
点击运行,选择远程执行,选择远程主机为master,然后启动。
出现如下界面:
刷新下192.168.10.101:8080、192.168.10.102:8081和192.168.10.103:8083页面,出现如下页面
如上图所见,排序记录被salve1和salve2分开执行了,表示,集群运行无误。
三、 Kettle集群开发
kettle集群开发的方式,是通过job及trans开发过程中使用集群的方式。子服务器中新建三个子服务器。
1) trans集群开发
在主对象树子服务器中右键,新建,填写服务器连接信息
注意:该部分配置信息需要和carte-config-m、aster,-8080.xml配置信息一致,由于是主服务器,需要勾选最后一栏。
然后填写两个子服务器信息,需要和carte-config-master-8081.xml和carte-config-master-8082.xml中的信息一致。
在主对象树中的kettle集群Schemas,右键,新建,选择子服务器,将刚刚配置好的三台子服务器添加到Schemas中。
然后点击确定,这样trans中的集群配置就完成了。
然后为了测试,做了一个trans进行集群测试,如下图。在排序的时候右键,选择集群,选择配置好的集群,该步骤右上方会有一个Cx2标识,表示有两台子服务器的集群。
点击“执行”,选择“提交转换”、“准备执行”、“开始执行”,“显示转换”如果选择则会在spoon中显示相应的运行日志。
在trans执行过程中,刷新打开的localhost:8080/kettle/status和localhost:8081/kettle/status和localhost:8082/kettle/status,会发现我们刚才做的trans正在执行。
执行的日志同样也可以在命令提示符中可以查看。
2) job集群开发
job的集群开发,并不是和trans一样,job的集群开主要是将trans分配到不同的子服务器中执行。
首先配置子服务器的方法和trans一样,如下图:
在转换的步骤,高级选项,选择远程从服务器,选择要执行的服务器,确定,即可。
注:如果trans是需要在在集群的环境下执行,则需要勾选上面的“在集群模式下运行这个转换”。
四、 Kettle集群笔记
1) Centos7防火墙开端口
Centos7放火墙功能由iptables替换为firewalld。在firewalld的各种服务里,是以区域为定义进行设定的,设定的区域和网络接口关联起来生效。
防火墙的开启/关闭
#systemctl start firewalld
#systemctl enable firewalld
停止Firewalld,及关闭开机自启。
# systemctl stop firewalld
# systemctl disable firewalld
打开端口
firewall-cmd –zone=public –add-port=80/tcp –permanent(-permanent是永久开放端口,没有该配置在重启后开启端口失效。)
查看打开端口
firewall-cmd --list-all
打开端口之后建议重启放火墙
2) Cater安全-账号密码设置
在上面提到pwd文件夹中的master等配置文件中的username和password默认是cluster/cluster,如果需要修改密码,则需要到pwd文件夹中的kettle.pwd文件修改参数。
如图:在pwd文件中,第一未注释的行是cluster的账号密码。其中加了OBF的意思是字符串是被混淆了的(但是并不等同于加密)。
如果要新建一个账号密码。则只需要在下面另起一行以username:password的形式添加即可,如图。
如果需要进行混淆,可以利用kettle自带的encr工具来进行混淆。
kettle 连接mysql出错 Driver class 'org.git.mm.mysql.Driver' could not be found, make sure the ........
解决方法: 下载mysql-connector-java.jar 放置到data-integration\lib\目录下