13.1.4. Carte

13.1.4.1. 介绍

job/transformations,但每次运行任务时,kitchen/pan都要启动一次。而应用的启动是有代价的,并且如果服务器上同时跑了很多Kitchen/Pan程序,也不利于资源分配和监控。

Carte是一个轻量级的web服务,允许远程请求HTTP进行监控、启动、停止在Carte服务上运行的job和trans。运行Carte的服务器在kettle术语里称为slave server。

13.1.4.2. 配置

ettle的下载安装就不再赘述,carte的配置文件主要用来配置端口、安全认证等。比如配置文件pwd/carte-config-master.xml。

port:绑定的端口号

hostname: 绑定的IP

username/password:认证用户

启动命令:nohup ./carte.sh pwd/carte-config-master.xml2>&1 &

web地址:http://ip:9080,会提示输入用户名密码,可能Chrome不会有弹出框,多换个浏览器试试。

在carte上跑的任务的日志统一输出到了carte日志里,不能为每个任务设置日志。

13.1.4.3. 调用

远程提交job/trans时,同样支持资料库提交任务,carte服务器上需要提前配置好资料库。执行job的api是kettle/executeJob,通过curl提交命令:

curl -u "cluster:cluster" "http://dev-bi-cdh05:9080/kettle/executeJob/?rep=rep-test01&job=/test01_job&P1=test"

-u :指定用户名和密码

rep参数:指定配置的资料库

job参数:执行的job

P1参数:kettle的参数变量P1的值

访问web url可以看每个任务的运行状态、查看任务的运行日志

13.1.4.4. 监控

在web上可以看到所提交的job/trans运行状态、查看日志,但获得的信息还是太有限,既然carte运行在JVM上,就可以用JMX的方式监控服务。开启JMX,只需在carte.sh文件的OPT这一行末尾新增: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9180 -Dcom.sun.management.jmxremote.ssl=false

上述配置jmx绑定9180端口,为了调试方便,禁用安全认证。开启JMX后,通过第三方服务就能很便捷的对carte应用和服务器各个指标进行监控,如carte内存使用情况、cpu占用率、GC、服务器物理内存等。

13.1.4.5. 分布式

独立部署的多台slave server,可以组成一个类似分布式的架构,各个slave进行抢占式执行任务。实现逻辑:同一时刻多个slave同时提交同一个任务,在任务内加唯一排他锁校验。举个例子,slave1和slave2同时提交任务A,在A中先判断有没有实际开始执行(比如查表中记录),如果没有执行就往数据库写一条记录,任务继续执行;如果判断A任务已经开始执行(比如从表中查到相关记录),任务就直接结束,不再处理后续业务。

这个框架设计重点在唯一排他锁校验,借助数据库表的主键特性也能实现这个功能: 假如任务id是表的主键,任务开始执行时往表里插入id,后来的slave再插入这个任务id时就会异常,就不用再处理后面业务。

缺点:从任务角度看,本质上一个任务还是在一个服务上跑,这样在执行期间就存在单点问题,如果执行任务的slave宕掉,之上的任务不能进行故障转移

优点:slave之间彼此独立,互不影响,如果单台slave宕机,不影响后续任务调度,从整个集群来看是高可用的。而且多个任务平均分布到多台slave上,也能达到负载均衡的效果

13.1.4.6. 集群

多台slave server可以组成一个集群,集群内指定一个节点充当master角色,其他节点是slave角色,kettle集群采用主从结构,由master统一提交任务。后续再写文章细聊集群。