背景
在使用ftp下载插件时,发现进行本地执行时可以正常,但当选择了远程执行并指定了远程服务器后发现出现了错误:从 FTP:User cannot log in 获取文件时发生错误。根据错误信息可以判断是因为ftp登录不上的原因,至于具体的原因无法定位,为了一探究竟,于是便萌生了调试远程作业的想法,顺便深入了解一下了解kettle运行原理以及源码学习。
思路
carte服务器实际上就是一个web server,该web server 是基于 Jetty 这个嵌入式的开源 servlet 容器。这个web server主要是提供转换运行的环境,另外一个重要的功能通过提供servlet来在客户端、主服务器和从属服务器之间进行通讯和控制。主服务器和从属 服务器之间是通过httpClient来进行通讯的,通讯时传递的数据是xml格式。通过提供的servlet,可以实现启动、停止、暂停转换或者作业、 获得转换或者作业的状态、注册子服务器、获得子服务器的列表等等
其实思路以及LZ使用的方法很简单:通过java代码在eclipse中启动一个Carte服务器,然后远程执行作业时指定服务器作为载体。
搭建Carte服务启动环境
首先创建一个普通的java project项目,如果没有kettle源码环境的话可以创建maven project,这样直接从中心仓库上面获得jar包以及源码。刚好LZ之前有编译过kettle源码且已 经作为项目导入了eclipse中,所以 源码以及相关kettle的jar包都已经有了。
创建了项目后,需要把相关的jar包加到java bulid path中,下面的jar包也可以从PDI工具的lib目录下获得:
把依赖包加入到项目中后,创建一个类来启动Carte服务:
public class CarteServer {
publicstaticvoid main(String[] args) throws Exception {
SlaveServerConfig config =new SlaveServerConfig("1921683143", 7088,true);//ip与端口与通过Cartebat启动时指定的参数一样
CarterunCarte(config); //通过该静态方法启动carte
}
}
开始远程调试
1启动carte服务,建好CarteServer类后,直接debug as --> java application,即可启动carte服务,在控制台可以看到以下信息:
2016/08/11 10:55:55 - Carte - 创建 web 服务监听器 @ 地址: 1921683143:7088
2016-08-11 10:55:55912:INFO::jetty-6126
2016-08-11 10:55:55933:INFO::Started SocketConnector@1921683143:7088
2打开spoon工具,创建一个job,下面的job是从ftp服务器上下载文件:
3因为作业用到了FTP下载插件,在源码中对应JobEntryFTP类,打开该类并在execute()方法中打上断点:
4运行job,选择远程执行,选择上述类CarteServer中启动的服务器(要先在spoon工具中新建一个子服务器):
5观察断点位置,看到已经进入了调试:
大功告成,至于ftp下载插件为什么在远程执行中错误另外说明。
远程执行流程
用户运行kettle作业并选择“远程执行”,触发orgpentahodijobJob类的sendToSlaveServer方法
在sendToSlaveServer方法中,首先生成XML格式的作业元数据描述。
调用SlaveServer的sendXML()方法把这些元数据会被发送到远程的carte服务器。
服务器端AddJobServlet接收到请求后,进入doGet()方法通过元数据构造出Job实体并把作业保存到JobMap中。
在sendToSlaveServer方法中,把XML发送到carte服务器后,接着调用SlaveServer的execService()方法进行启动远程的job
此时服务器端StartJobServlet会接收到请求后,会给job(其实是一个Thread)做一堆初始化工作,最后调用job的start方法进行启动。
3141=314
3142=628
3143=942
3144=1256
3145=157
3146=1884
3147=2198
3148=2512
3149=2826
31410=314
31411=3454
31412=3768
31413=4082
31414=4396
31415=471
31416=5024
31417=5338
31418=5652
31419=5926
31420=628
314×25竖式:
乘法竖式计算要注意问题:
1、两个数的最后一位要对齐。
2、尽量把数字多的数写在上面,数字少的数写在下面,以减少乘的次数。
扩展资料
列竖式笔算有两个要点:相同数位对齐,从个位加起。( 不进位可以先加十位,但是为以后的进位加法着想,不提倡)。在练习本上的格式严格按以下要求来进行:
1、算式的横式从数学本横格线的左端开始写;
2、竖式第一个加数写在横式第二个加数下面,加号与横式中的加号对齐,加数、加数、和,三者的相同数位一定要对齐。
3、列竖式算完后,不要漏掉横式上的得数。
314×1²=314
314×2²=1256
314×3²=1884
314×4²=2512
314×5²=314
314×6²=11304
314×7²=15386
314×8²=20096
314×9²=25434
314×10²=314
314
×1=
314
314
×36=
11304
314
×71=
22294
314
×2=
628
314
×37=
11618
314
×72=
22608
314
×3=
942
314
×38=
11932
314
×73=
22922
314
×4=
1256
314
×39=
12246
314
×74=
23236
314
×5=
157
314
×40=
1256
314
×75=
2355
314
×6=
1884
314
×41=
12874
314
×76=
23864
314
×7=
2198
314
×42=
13188
314
×77=
24178
314
×8=
2512
314
×43=
13502
314
×78=
24492
314
×9=
2826
314
×44=
13816
314
×79=
24806
314
×10=
314
314
×45=
1413
314
×80=
2512
314
×11=
3454
314
×46=
14444
314
×81=
25434
314
×12=
3768
314
×47=
14758
314
×82=
25748
314
×13=
4082
314
×48=
15072
314
×83=
26062
314
×14=
4396
314
×49=
15386
314
×84=
26376
314
×15=
471
314
×50=
157
314
×85=
2669
314
×16=
5024
314
×51=
16014
314
×86=
27004
314
×17=
5338
314
×52=
16328
314
×87=
27318
314
×18=
5652
314
×53=
16642
314
×88=
27632
314
×19=
5966
314
×54=
16956
314
×89=
27946
314
×20=
628
314
×55=
1727
314
×90=
2826
314
×21=
6594
314
×56=
17584
314
×91=
28574
314
×22=
6908
314
×57=
17898
314
×92=
28888
314
×23=
7222
314
×58=
18212
314
×93=
29202
314
×24=
7536
314
×59=
18526
314
×94=
29516
314
×25=
785
314
×60=
1884
314
×95=
2983
314
×26=
8164
314
×61=
19154
314
×96=
30144
314
×27=
8478
314
×62=
19468
314
×97=
30458
314
×28=
8792
314
×63=
19782
314
×98=
30772
314
×29=
9106
314
×64=
20096
314
×99=
31086
314
×30=
942
314
×65=
2041
314
×100=
314
314
×31=
9734
314
×66=
20724
314
×32=
10048
314
×67=
21038
314
×33=
10362
314
×68=
21352
314
×34=
10676
314
×69=
21666
314
×35=
1099
314
×70=
2198