Kettle集群、分区执行顺序与结果
网络感知中心
2014年08月07日
目录
1. Kettle集群、分区的执行顺序... 3
a) 转换中的一个步骤单独使用集群... 3
b) 转换中的两个步骤使用集群... 3
c) 转换中的一个步骤单独使用分区... 4
d) 转换中的两个步骤使用分区... 5
e) 转换中的一个步骤既使用分区又使用集群... 6
i. 分区数和集群的子服务器数一致... 6
ii. 分区数是集群的子服务器的倍数... 7
f) 转换中的两个步骤使用分区和集群... 8
2. Kettle集群、分区的执行结果... 9
a) 转换中的一个步骤既使用分区又使用集群... 9
b) 转换中的一个步骤既使用分区又使用集群,另一个步骤仅使用集群... 10
c) 两个步骤都使用集群和分区... 11
最近测试了一下kettle集群(cluster)、分区(partitioning)的执行顺序和执行结果。
1. Kettle集群、分区的执行顺序
为了验证kettle转换的多个步骤在使用集群、分区的执行顺序是顺序执行还是在两个步骤之间重新分配集群的子服务器再执行,做了如下实验:
a) 转换中的一个步骤单独使用集群
Figure1 一个步骤使用集群
Figure2 主服务器转换步骤
Figure3 子服务器转换步骤
b) 转换中的两个步骤使用集群
Figure4 两个步骤使用集群
Figure5 主服务器转换步骤
Figure6 子服务器转换步骤
从a)部分和b)部分的六张图对比来看,kettle的多个步骤在使用集群时是顺序执行的而不是在两个步骤之间重新分配子服务器这样大大降低了服务器回收、切换的时间消耗。
c) 转换中的一个步骤单独使用分区
Figure7 一个步骤使用分区
Figure8 执行结果日志
Figure9 执行结果步骤度量
d) 转换中的两个步骤使用分区
Figure10 两个步骤使用分区
Figure11 执行结果日志
Figure12 执行结果步骤度量
从c)部分和d)部分的六张图对比和做得多个实验的结果来看,kettle的多个步骤在使用分区时也是顺序执行的而不是在两个步骤之间重新分区,无论这两个分区依据的是哪个字段,都按前一个分区的字段来划分执行。
e) 转换中的一个步骤既使用分区又使用集群
i. 分区数和集群的子服务器数一致
Figure13 一个步骤使用分区和集群
Figure14 主服务器转换步骤
Figure15 子服务器转换步骤
ii. 分区数是集群的子服务器的倍数
Figure16 一个步骤使用分区和集群
Figure17 主服务器转换步骤
Figure18 子服务器转换步骤
从i部分和ii部分的六张图来看,步骤在确定分区数和集群的子服务器数时要保证子服务器是分区数的倍数,才能确保在转换执行时可以给每个服务器分配同等数量的分区数(即分区数/子服务器数)。
f) 转换中的两个步骤使用分区和集群
Figure19 两个步骤使用分区和集群
Figure20 主服务器转换步骤
Figure 21 子服务器转换步骤
从ii部分和f)部分的六张图对比来看,kettle的多个步骤在使用集群和分区时是顺序执行的而不是在两个步骤之间重新分配子服务器,这样大大降低了服务器回收、切换的时间消耗。该种情况跟只使用分区时一样,不管两个分区依据的是哪个字段,都按前一个分区的字段来划分执行。
2. Kettle集群、分区的执行结果
该实验的目的是检验在kettle的转换步骤中使用集群和不同的分区转换后的结果是否是正确的。
a) 转换中的一个步骤既使用分区又使用集群
Figure22 一个步骤使用分区、集群
若分区与分组是同一字段type,结果:
Figure23 执行结果1
若分区与分组是不同字段分组type,分区id,结果:
Figure24 执行结果2
其中type_num是对type个数的使用连接同组字符串,type_all_num是type_num的求和。从图23、24可以看出不管分区时使用哪个字段最终的结果都是正确的,只不过中间会多做一步处理。
b) 转换中的一个步骤既使用分区又使用集群,另一个步骤仅使用集群
Figure25 一个步骤使用分区、集群,另一个步骤使用集群
若分区与分组是同一字段type,结果:
Figure26 执行结果1
若分区与分组是不同字段分组type,分区id,结果:
Figure27 执行结果2
c) 两个步骤都使用集群和分区
Figure28 两个步骤都使用集群、分区
从a)、b)、c)三个步骤的结果来看,不管分区根据哪个字段,不管有几个步骤使用分区,转换的执行结果都是正确的。需要注意的是,若有一个步骤使用了集群(不管有没有使用分区),另一个步骤只要使用分区必须同时使用集群,否在在使用集群方式执行时会报错。