datastage常用Stage

发布时间:2014-03-30 09:16:33

Ascential DataStage Enterprise Edition

综合使用参考手册



编写说明 1

i

1. 引言 1

1.1. 编写目的 1

1.2. 帮助使用 1

2. 产品概述 2

3. 安装与初始化 3

3.1. Server安装 4

3.1.1. Server安装前准备 4

3.1.2. Server启动和停止 16

3.1.3. DataStage Administrator配置 17

3.2. Client安装 18

4. 常规应用 18

4.1. 常用组件使用方法 18

4.1.1. Sequential file 18

4.1.2. Annotation 21

4.1.3. Change Capture Stage 23

4.1.4. Copy Stage 25

4.1.5. Filter Stage 26

4.1.6. Funnel Stage 27

4.1.7. Tansformer Stage 28

4.1.8. Sort Stage 29

4.1.9. LookUp Stage 30

4.1.10. Join Stage 30

4.1.11. LookUp Stage Join Stage的区别 32

4.1.12. Merge Stage 32

4.1.13. Modify Stage 33

4.1.14. Data Set Stage 34

4.1.15. File Set Stage 35

4.1.16. Lookup File Set Stage 37

4.1.17. Oracle Enterprise Stage 39

4.1.18. Aggregator Stage 40

4.1.19. Remove Duplicates Stage 42

4.1.20. Compress Stage 43

4.1.21. Expand Stage 44

4.1.22. Difference Stage 45

4.1.23. Compare Stage 47

4.1.24. Switch Stage 48

4.1.25. Column Import Stage 49

4.1.26. Column Export Stage 51

4.2. 常用数据库的连接 53

4.2.1. Informix数据库连接 53

4.2.2. Oracle数据库连接 54

4.2.3. DB2数据库连接 54

5. 高级应用 54

5.1. 自定义Stage Type 54

5.1.1. Wrapped Stage 54

5.1.2. Build Stage 54

5.1.3. Customer Stage 54

5.2. 性能调优 54

5.2.1. 优化策略 54

5.2.2. 关键问题分析 65

5.2.3. 并行度 65

5.2.4. 处理建议 65

5.2.5. 其它 66

5.2.6. 内存的释放 66

5.2.7. 机器的对称性 66

5.2.8. 并行调度测试说明: 67



1. 引言

1.1. 编写目的

Ascential DataStage作为UDI项目所使用的主要开发工具,在项目中得到了比较充分的应用,对Ascential DataStage产品方方面面的功能,都有所涉及。作为对我们使用本产品的一个技术沉淀,我们编写了这个总结性质的手册,旨在综合描述该产品的安装、常规应用、高级开发等等项目所涉及到的各个方面。为项目组内部或其他使用该产品的项目组提供一个全面而综合的产品操作指导,帮助使用者能够在最短的时间内了解该产品,并上手使用。

1.2. 帮助使用

由于DataStage产品功能强大,配置复杂,我们不可能在本手册中涉及到所有功能,也无法对每一个描述的能够都给出详尽的例子。能够为阅读者穿针引线的整理产品的开发思路,通过对常用、基本的功能的描述,让大家掌握到该产品的使用精髓,并能够举一反三的掌握其它本手册没有介绍的功能。这就是我们的目的。

我们通常使用的帮助有如下两个途径。

a. 智能化的帮助功能;产品在几乎所有的操作窗口都有一个Help键,点击该键可以显示出当前使用的界面的功能和各项选项的具体的说明和操作方法。DataStage独有的智能化的帮助能够指引你方面的查找到你想要得到的帮助。

b. Online Manuals;就是产品安装后程序组中的DataStage Documents,里面更加综合、全面的对整个产品从普通到高级,从Server版到Enterprise Edition版,从For WindowsFor Unix等等方面的详尽叙述。能够帮助更加系统、全面的掌握该产品。

2. 产品概述

DataStage企业版是Ascential Software公司所有企业整合系列产品中关键产品。企业版支持大容量数据的收集、整合和转换,数据从简单结构到很复杂的结构。基于高可扩展性的软件架购,企业版使得企业能够通过高性能来解决大部分业务问题,并行处理大容量数据。强大的企业元数据管理能力使得可以在数据整合生命周期中在所有工具中共享和使用工具。

DataStage企业版发布了四个核心功能来成功实施企业数据整合:先进的开发和简单化的维护;企业级别的开发、监测和管理;在吞吐量和性能方面提供了无限制的高扩展的体系架构;端对端的企业级元数据管理。

DataStage企业版提供了全面的功能去最优化用户在建立、升级和管理数据整合架构时的速度、灵活性和效率。DataStage企业版增强的功能减少了学习的周期、简单化了管理和优化了开发资源的使用,减少了数据整合应用的开发和维护周期。结果,DataStage企业版使得企业能够花更少的时间开发他们的整合应用,更多的时间是不断的从中受益。

DataStage企业版使用了Client-server架构,如下所示。

图一、DataState企业版Client-Server架构

用户通过各个客户端工具访问DataStage企业版的开发、配置和维护功能。这些工具包括:

Designer:用来建立和编辑DataStage作业和表的定义。Designer中的“Job Sequencer”控制作业的执行,其他作业成功完成(或失败,等)的条件。

Administrator:用来执行管理任务,如建立DataStage用户、建立和删除工程并且建立清洗标准。

Manager:用来编辑管理用户工程的DataStage资料库。

Director:用来验证、时序安排、运行和监测企业版作业。

如图一所示,DataSage企业版的服务器组件运行在一系列的流行服务器上,如UnixWindows等。

3. 安装与初始化

DataStage的安装分Server端和Client端两部分,我们以DataStage 7.5 for Aix 5.1/5.2为例,来详细说明其安装步骤。

3.1. Server安装

3.1.1. Server安装前准备

1) 硬件及软件准备

准备内容

具体要求描述

1.

硬件环境

CPU

(建议每个node分配2CPU)

内存

(建议每个node分配2G内存)

磁盘空间

至少1.5G硬盘空间

4.

软件环境

IBM AIX 5.1, 5.2

2) 创建用户及组

1) 在安装机器上创建dstage, ADMINISTRATIVE USER 选项为true

Primary GROUPGroup SETADMINISTRATIVE GROUPS均为dstage

2) 创建用户dsadm,主属为dstage ADMINISTRATIVE USER 选项为true

确保主机重启时datastage server也同样自动重启。

3.1.1.1. Server安装步骤

1) 确保以超级用户root进入系统(非常重要)

2) 如果是硬盘包,则执行命令:gunzip 2105-ds-75a-aix.tar.Z

进入/home/udietl目录Tar *.tar

进入/home/udietl/Ascential.media/aix目录

如果是光盘包,则执行命令: Mount /cdrom

进入 /cdrom目录

3) 执行 ./install.sh,会出现下图所示:每步安装都附有图片,图片上方为本图注释:

检测用户是否为root,输入 y 继续

提示这是一个新的安装过程,输入 y 继续

确认安装,输入 n 继续

输入 n 继续

license agreement,输入 y 继续

选择安装文件临时存放目录,此目录必须存在,dsadm用户要有存取权限,且目录必须为空,输入 c 改变临时目录

确认临时目录路径,输入 n 继续

输入serial number,CPU countexpiration dateenterprise edition code, server code,输入 n 继续,MVS edition code不用输入

确认信息,输入 n 继续

因为未购买RTI Agent,SAS Integration,IMS Source,所以不用输入以下三个code 输入 n 继续

默认安装路径,输入 n 继续

选择语言,输入 c ,改变语言

输入 5 ,选择简体中文

输入 n 继续

选择插件,输入 a 选择全部

输入 n 继续

输入project name: UDI,回车继续

project默认存放路径,回车继续

输入 U 选择unprotected project,继续

输入 n 继续

DataStage引擎安装路径,输入 n 继续

输入 n 继续

输入 n 继续

输入 n 开始安装

3.1.1.2. 检查后台Server是否启动正常

输入 Ps –ef|grep dsrpcd

后台Server进程名 dsrpcd

3.1.2. Server启动和停止

dsadm用户进入,执行以下命令:

1) Server启动命令:$HOMEDIR/uv –admin -start

注意启动前,需要查看端口是否被释放,通过netstat –af inet |grep ds查看,如果有连接,则需要等待操作系统自动释放后在启动服务。

2) Server停止命令:$HOMEDIR/uv –admin /stop

注意:停止前最好确保没有Client连接,可以通过onstat –a |grep ds查看,是否还存在Client连接,否则要通知相应登录的client端彻底退出。

3.1.3. DataStage Administrator配置

3.1.3.1. 进入到Administrator

3.1.3.1.1. General

1. 设置Inactivity项,值为‘7200’。(待探讨,依据实际需求设置)

3.1.3.2. 进入到需要设置的Project

3.1.3.2.1. General

1. 选中:Enable job administration features in the DataStage Director

2. 选中:Enable runtime column propagation for parallel jobs(待探讨,但为了展现比较清晰的逻辑,不推荐使用。)

3. 选中:Auto-purge of job log,设定Over7 days old(待探讨,依据实际需求设置)

3.1.3.2.2. General->Enviroment…

1. General类型下:

TMPDIR=XXX (将其指向一个相对较大的目录,不填写就是指缺省的/tmp目录,此处需要讨论)

2. Parallel类型下:

APT_CONFIG_FILE,缺省情况下是指/home/udi_etl/dsadm/Ascential/DataStage/Configurations/default.apt,这里需要检查一下指向的内容是否正确。

APT_STRING_PADCHAR= (缺省值是0x0,我们需要填写一个空格)

3. Parallel->Operator Specific类型下

APT_COPY_TRANSFORM_OPERATOR设置为True,在做多结点运行时需要设置。

4. User Defined类型下:

APT_IMPEXP_ALLOW_ZERO_LENGTH_FIXED_NULL设置为1。(如果目前数据统一为定长无分隔符,或者说不要设置定长的Null值,就不需要设置)

3.1.3.2.3. Permissions

1. 此处建议将与平台无关的操作用户都设置为

3.1.3.3. Aix操作系统中的设置

1. 运行$lsps –a,得到本机的Paging SpaceGroup Size之和,对于CPU数量少于20个的机器,最好整个Paging Space500M×CPU数,如机器配置了8CPU,则至少需要配置4GBPaging Space空间。(具体可以参照《Install and Upgrade Guide》中,123 页左右)

2. smit->System Enviroments->Change / Show Characteristics of Operating System->Maximum number of PROCESSES allowed per user 中设置到较大的值,如:8192。改参数的值也可以通过如下命令得到:$lsattr –E –l sys0 | grep maxuproc(具体可以参照《Install and Upgrade Guide》中,119 页左右)

3. 运行$ulimit –a,得到本机的一些参数的限制量,依据我们的经验,我们建议将里面的所有参数,都设置为unlimit。具体可以参照《Install and Upgrade Guide》中,120 页左右)

3.1.4. 其它

1. 建议在建立好Project以后,导入Project以前,就先将以上的参数设置好。因为一些参数只对设置好以后导入的Job生效。

2. 对于Aix操作系统的设置,由于不同的数据量和Job复杂程度,以及Job的并行数,会对系统的配置有不同的需求,所以需要计算峰值,以上的建议是我们在数据量较大的情况下推荐的配置。

3.2. Client安装

1) 执行datastage client文件夹中执行 setup,选择client端安装

注意:Client需要安装Microsoft .Net Framework支持如未安装Frameworkclient安装程序开始后会提示是否从安装光盘安装Framework,选择是安装Framework。安装结束后,请重新执行安装光盘中的setup,继续安装client.

2) 依次输入客户端的输入 Serial numberUser LimitEnterprise Code, Authorization Code

3) 选择安装文件夹,点击 Next 直到安装完成。

4. 常规应用

4.1. 常用组件使用方法

4.1.1. Sequential file

功能特点:适用于一般顺序文件(定长或不定长),可识别文本文件或IBM大机ebcdic文件。

使用要点:

按照命名规范命名

点住文件,双击鼠标,在general说明此文件内容,格式,存储目录等

修改文件属性,文件名称,reject方式等到

修改文件格式,比如记录结束符是什么,字段分隔符,字符串是用什么区别等

输入此文件字段内容

                

4.1.2. Annotation

功能特点:一般用于注释,可利用其背景颜色在job中分颜色区别不同功能块

使用要点:

                 

4.1.3. Change Capture Stage

功能特点:Change Capture Stage有两个输入,分别标记为before link after link。输出的数据表示before linkafter link的区别,我们称作change setChange Capture Stage可以和Change Apply Stage配合使用来计算after set

keyvalue的说明

key值是比较的关键值,value是当key值相同是作进一步比较用的。

change mode选项说明:

All keysExplicit Values 需要指定value,其余字段为key

Explicit Keys&Values keyvalue都需要指定

Explicit KeysAll Values 需要指定key,其余的字段为value

输出策略说明

Drop Output For Copy False:保留beforeafte linkkey值相同的行

True:删除beforeafte linkkey值相同的行

Drop Output For Delete False:保留before link中有但是after link中没有的key值所在的行

True:删除before link中有但是afte link中没有的key值所在的行

Drop Output For Edit False:保留key值相同,value不同的行

True:删除key值相同,value不同的行

Drop Output For Insert False:保留before link中没有但afte link中有的key值所在的行

True:删除before link中没有但afte link中有的key值所在的行

4.1.4. Copy Stage

功能说明:Copy Stage可以有一个输入,多个输出。它可以在输出时改变字段的顺序,但是不能改变字段类型。

注意:当只有一个输入及一个输出时最好Force设置为True,这样可以在Designer里看到运行结束,否则将无法标识运行结束,但不会影响运行结果数据。

4.1.5. Filter Stage

功能说明:Filter Stage只有一个输入,可以有多个输出。根据不同的筛选条件,可以将数据输出到不同的output link

4.1.6. Funnel Stage

功能说明:将多个字段相同的数据文件合并为一个单独的文件输出

合并策略说明

Continuous Funnel从每一个input link中循环取一条记录

Sort Funnel按照Key值排序合并输出

Sequence先输出第一个input link的数据,输出完毕后再输出第二个input link的数据,依此类推,直到结束。(此时可以通过调整link Ordering调整输出顺序)

4.1.7. Tansformer Stage

功能说明:一个功能极为强大的Stage。有一个input link,多个output link,可以将字段进行转换,也可以通过条件来指定数据输出到那个output link。在开发过程中可以使用拖拽。

ConstraintDerivation的区别

Constraint通过限定条件使符合条件的数据输出到这个output link

Derivation通过定义表达式来转换字段值。

ConstraintDerivation中可以使用Job parametersStage Variables

注意:Transformer Stage功能强大,但在运行过程中是以牺牲速度为代价的。在只有简单的变换,拷贝等操作时,最好用Modify StageCopy StageFilter Stage等来替换Transformer Stage

4.1.8. Sort Stage

功能说明:只能有一个输入及一个输出,按照指定的Key值进行排列。可以选择升序还是降序,是否去除重复的数据等等。

Option具体说明

Allow Duplicates 是否去除重复数据。为False时,只选取一条数据,当Stable SortTrue时,选取第一条数据。当Sort UnilityUNIX时此选项无效。

Sort Utility 选择排序时执行应用程序,可以选择DataStage内建的命令或者UnixSort命令

Output Statistics 是否输出排序统计信息到job日志

Stable Sort 是否对数据进行二次整理

Create Cluster Key Change Column是否为每条记录创建一个新的字段:clusterKeyChange。当Sort Key ModeDon’t Sort(Previously Sorted) Don’t Sort (Previously Grouped)时,对于第一条记录该字段被设置为1,其余的记录设置为0

Create Key Change Column:是否为每一条记录创建一个新的字段KeyChange

4.1.9. LookUp Stage

功能说明:LookUp Stage把数据读入内存执行查询操作,将匹配的字段输出,或者在在符合条件的记录中修改或加入新的字段。

4.1.10. Join Stage

功能说明:将多个表连接后输出

4.1.11. LookUp Stage Join Stage的区别

LookUp Stage将数据读入到内存中,所以效率很高,但是占用了较多的物理内存。所以当reference data比较小的时候,我们推荐用LookUp Stage;当reference data比较大的时候,我们推荐用Join Stage

4.1.12. Merge Stage

功能说明:将Merge Key值相同的记录合并。将其中的一个输入设定为Master,其余的为Update。把UpdateMerge Key相同的记录合并入Master

4.1.13. Modify Stage

功能说明Modify stage 只能有一个输入及一个输出,它可以修改表结构:删除,保留一个字段给字段改名修改字段的数据类型。

Specification的具体用法:

删除一个字段: DROP columnname [, columnname]

保留一个字段: KEEP columnname [, columnname]

改变字段: new_columnname [:new_type] = [explicit_conversion_function]old_columnname

可用的explicit_conversion_function请参看《Parallel Job Developer’s Guidepage 28-7

4.1.14. Data Set Stage

Stage类型:File stage

功能说明:从data set文件中读取数据或者写数据到data set文件中,一个Date Set Stage只能有一个输入连接(input link)或者一个输出连接(output link)。

具体用法包括Stage PageInputs PageOutputs Page

Stage Page通常描述了stage的一般信息,诸如名称等;

Inputs Page描述了即要写入信息的data set文件的详细信息;

主要是PropertiesColumn的定义

Properties中配置了文件的存放路径和更新策略

Column详细定义文件中的各个字段

Outputs Page描述了读取信息的data set文件的详细信息;操作过程与Inputs Page类似。

4.1.15. File Set Stage

Stage类型:File stage

功能说明:从file set文件中读取数据或者写数据到file set文件中,一个File Set Stage只能有一个输入连接(input link)、一个输出连接(output link)和一个拒绝连接(rejects link)。并且只能在并行模式下执行。

具体用法:

Stage Page:对Stage的基本定义

Inputs Page主要是PropertiesFormat的配置

Properties的配置定义文件的存取路径及其他读写的相关的参数。特别要说明的是Options下的Reject Mode的选择stagereject link的时候必须选择Output没有reject link可选择其他两个选项。

Format的配置:定义了数据写到文件中的格式

Outputs Page:对stage输出的数据字段的描述,另外,reject link的输出系统将默认,不需要用户自己定义字段。

4.1.16. Lookup File Set Stage

Stage类型:File stage

功能说明: 为执行查找操作而创建的参照文件。

作为查找的参照数据,通常在参照数据比较大量或者重复使用较高的情况下,将参照数据生成专门的Lookup File Set文件,以便提高查找的效率

具体用法:

Stage Page

Inputs Page:主要定义了查找关键字和存放路径等主要信息

创建一个Lookup File Set文件:

Outputs Page:当作为参照数据进行查找操作时,因为文件是已经生成好的,所以在这里不需要再做详细的定义,只要引入即可。

4.1.17. Oracle Enterprise Stage

Stage类型:Database Stage

功能说明:从Oracle数据库中读取数据或者写数据到Oracle数据库中。

通常完成的操作:

使用INSERTUPDATWE命令更新数据库表

装入数据库表

读取数据库表

从数据库表中删除行

在库表中直接执行查询操作

将库表装入内存,然后执行查询操作

具体用法:

Inputs Page

向数据库中写数据,关键是对Properties的配置

Outputs Page:与Inputs Page类似,只是完成的是从数据库中读取数据。

4.1.18. Aggregator Stage

Stage类型:Processing Stage

功能说明: 将输入的数据分组,计算各组数据的总和或者按组进行其他的操作,最后将结果数据输出到其他的stage

具体用法:

Stage Page:描述stage的一般信息以及字段的分组信息和选择分组计算函数

Inputs Page:详细描述输入数据信息,一般直接反映输入数据字段信息

Oupputs Page:详细描述输出数据信息,即经过分组计算后的数据字段信息

4.1.19. Remove Duplicates Stage

Stage类型:Processing Stage

功能说明: 输入根据关键字分好类的有序数据,去除所有记录中关键字重复的记录,通常与sort stage配合使用

具体用法:

Stage PageProperties中的key值与之前sort stage的分类key值相同

Inputs Page:对输入数据字段的描述

Oupputs Page:对输出数据字段的描述

4.1.20. Compress Stage

Stage类型:Processing Stage

功能说明: data set文件压缩成二进制文件(与expend datastage相对应)

具体用法:

Stage Page

运行结果

Inputs Page:对输入数据字段的描述

Oupputs Page:对输出数据字段的描述

4.1.21. Expand Stage

Stage类型:Processing Stage

功能说明:将压缩的二进制文件解压缩(解压缩compress stage生成的压缩文件)

具体用法:

Stage Page

运行结果:

Inputs Page:对输入数据字段的描述

Oupputs Page:对输出数据字段的描述

4.1.22. Difference Stage

Stage类型:Processing Stage

功能说明: 按字段比较两个文件,找出不同的记录。(两个文件beforeafter,以before为准,与after文件中的记录进行比较,找出beforeafter文件中没有或者有的记录)

具体用法:

Stage Page

比较策略说明

Drop Output For Copy False:保留beforeafte linkkey值相同的行

True:删除beforeafte linkkey值相同的行

Drop Output For Delete False:保留before link中有但是afte link中没有的key值所在的行

True:删除before link中有但是afte link中没有的key值所在的行

Drop Output For Edit False:保留key值相同,value不同的行

True:删除key值相同,value不同的行

Drop Output For Insert False:保留before link中没有但afte link中有的key值所在的行

True:删除before link中没有但afte link中有的key值所在的行

调整beforeafter的顺序:

Inputs Page:对输入数据字段的描述

Oupputs Page:对输出数据字段的描述

4.1.23. Compare Stage

Stage类型:Processing Stage

功能说明:按字段对比两个已经分类的有序的文件

具体用法:

Stage Page

Inputs Page:对输入数据字段的描述

Oupputs Page:对输出数据字段的描述

4.1.24. Switch Stage

Stage类型:Processing Stage

功能说明:将文件按照一定的条件(一般为字段的值)分割成多个子文件。具体是将输入的每一条记录按照各自符合的条件(关键字的值)分配到不同的输出(Switch Stage 有一个input link 和多个output link,一个 reject linkoutput link最多可达128个;此功能很类似与C函数中的switch函数)。

具体用法:

Stage Page

定义分配记录的关键字及其值

Inputs Page:对输入数据字段的描述

Oupputs Page:对输出数据字段的描述,通过Mapping自定义各个输出文件中的字段

4.1.25. Column Import Stage

Stage类型:Restructure Stage

功能说明: 将一个字段中的数据输出到多个字段中。(也可以用这个stage完成分割单个字段数据到多个字段的目的,此时,输入数据应为定长或者有可以被识别的可分割的界限,必须是String或者Binary类型的,输出数据可以是任何数据类型)

具体用法:

Stage Page:关键是对Properties的配置

Inputs Page:对输入数据字段的描述

Oupputs Page:对输出数据字段的描述,在Column自定义输出字段

经过stage的前后数据的对比

字段分割后:

4.1.26. Column Export Stage

Stage类型:Restructure Stage

功能说明: Column Import Stage相反,将多个类型不同的字段合并成一个string或者binary类型的字段。

具体用法:

Stage Page:关键是properties的配置,选择将哪些字段合并,合并后的新字段在Output下的column中直接定义。

Inputs Page:对输入数据字段的描述,这里关键是Format的配置,决定合并后的字段的格式

Oupputs Page:对最终合并后的输出数据字段的描述

经过stage的前后数据的对比

合并字段后:

4.2. 常用数据库的连接

4.2.1. Informix数据库连接

1. 数据库连接准备

首先需要在用户的环境变量中设置有关Informix数据库的参数,如PATH中加入Informixbin目录,还有INFORMIXDIR,INFORMIXSERVER,CONFIGFILE等,确保该用户能够访问Informix

然后确认Informix数据库服务是否已经启动,通过运行命令:“onstat –”,如果显示是:Informix Dynamic Server Version 9.30.FC5 -- On-Line -- Up 6 days 00:16:12 -- 377504 Kbytes,则代表数据库服务已经启动。

由于基于Informix的几个StageInformix CLIInformix EnterpriseInformix Load,都需要通过Informix Client来连接数据库,

$DSHOME/dsenv中加入几个有关Informix数据库的变量有:

INFORMIXDIR=/home/inf930FC5; export INFORMIXDIR

PATH=$PATH:$INFORMIXDIR/bin; export PATH

INFORMIXSERVER=udi_etl_kf_tcp; export INFORMIXSERVER

ONCONFIG=onconfig.udi_etl_kf; export ONCONFIG

INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts; export INFORMIXSQLHOSTS

LIBPATH=`cat /.dshome`/lib:$LIBPATH:$APT_ORCHHOME/lib:$INFORMIXDIR/lib:`dirname $DSHOME`/branded_odbc/lib:$DSHOME/lib:$DSHOME/uvdlls

:$DSHOME/java/jre/bin/classic:$DSHOME/java/jre/bin:$INFORMIXDIR/lib:$INFORMIXDIR/lib/cli:$INFORMIXDIR/lib/esql; export LIBPATH

LANG=C; export LANG

INFORMIXC=CC; export INFORMIXC

THREADLIB=POSIX; export THREADLIB

运行dsenv后,通过env查看设置的变量是否已经生效。

4.2.2. Oracle数据库连接

4.2.3. DB2数据库连接

5. 高级应用

5.1. DataStage BASIC接口

该功能主要应用于Job属性定义中的Job control中,该功能可用于在本Job中调用其它的Job,给Job赋参数、得到Job执行状态等。

5.2. 自定义Stage Type

为了扩大并行Stage type的应用范围,DataStage允许开发者定义自己的Stage type,并将其应用于Parallel Job中。目前有三种形式的Stage可以自己定义。

5.2.1. Wrapped Stage

适用于对应用本身不做处理。而且对系统的性能要求不高。

可以通过定义Wrapped stage来实现Unix命令,并且可以定义相应参数和输入输出。

以实现unix的命令ls为例来说明。实现ls根目录下的文件。

首先需要为自定义的stage定义输入和输出表格式。本例中ls不需要定义Input项,故不用定义输入表格式。为Output项定义一个表,即为ls的输出定义表wrapper_out

定义好输入输出后,开始定义wrapped stage。步骤如下:

General页面定义stage的基本信息,如名称、存放目录、执行模式、Unix命令以及描述等:

Creator页面是描述创建者的信息以及定义版本号:

Properties页面定义stage所需的propertiy 组建:为命令ls定义一个目录

Wrapped页面定义stage的输入输出格式以及环境变量;

定义stageInput:由于命令ls不需要输入格式定义,故这里不做定义;

定义stageOutput:在Table Name中选择已经定义好的表wrapper_outStream选择Standard Output

定义环境变量,可以自定义stage执行成功或者失败后的返回码,以及定义stage相关的环境变量:

最后点击按钮“Generate”使自定义的wrapped stage生效。生成的自定义stage会出现在desinger的工具面板中,当定义成功后,就可以向其他stage一样运用在job中了。

5.2.2. Build Stage

希望自己编码,但不需要动态的变化输入和输出参数。

下面举例示范如何定义一个叫做DivideBuild stage。它的功能是:1、两个整型数据相除,输出两数相除的商和余数;2、检查除数是否为0,如果为0则将记录输出到reject link。在这个例子中,还定义了一个最小除数,当输入数据的除数小于这个最小除数时,数据也会被拒绝,输出到reject link

首先需要为自定义stage的输入输出定义相应的表。本例子中,为表dividein和表devideresult

输入数据为两个准备相除的整型数据,表dividein定义如下:

输出数据为原输出数据(被除数和除数)、商和余数,表devideresult定义如下:

做完表定义的准备工作后,开始定义Build stage,名称为Divide。步骤如下:

定义General页面,主要定义stage的名称、目录、执行模式、算子以及简单的描述:

Creator页面主要描述创建者和版本信息;

Properties页面,定义一个变量字段,在stage中接收最小除数数值:

Build页面中定义stage相关的输入、输出、以及自定义执行的运算等。在本例中,需要定义一个输入和两个输出(result linkreject link)。输入定义为自动读入,输出定义为非自动输出。

Input定义如下:Table Name选择预先定义好的表divideinAuto Read置为Ture

Output定义:需要定义正常的结果输出和reject 输出。如下图示:正常结果输出的Table Name选择预先定义好的表devideresultAuto Read置为False reject输出Table Name不需定义;

Transfer定义数据的流向:

Logic页面定义stage所要做的运算:

对于此例子中的stage,到此就定义好了一个Build Stage,最后,点击按钮“Generate”使自定义build stage生效。当定义正确时,会提示“Operator Generation Succeeded”,如下图:

生成的自定义stage会出现在desinger的工具面板中,当定义成功后,就可以向其他stage一样运用在job中了。

5.2.3. Custom Stage

针对熟悉Orchestrate的资深开发者,通过指定一个Orchestrate Operator来作为一个新的Stage type。使其能够在Parallel Job中得到使用。

5.3. 性能调优

对于大数据量的处理,DataStage的运行效率是一个十分重要的环节。

5.3.1. 优化策略

5.3.1.1. 提高读写效率

在处理大数据量的情况下,文件的读写速度往往对整个Job的处理时间,有很大的影响。所以,提高读写效率是Job优化的最基本也是最关键的一环。

由于主要是测试Job的读写效率,所以我们的测试案例就是读一个数据文件,然后取其中的部分字段写到文件中去。

优化方案

优化前

优化后

效率提升

(变化量/优化前)

Unix外部命令

30918/

调整数据分部(I/O通道)

30918/

通过组件过滤字段

30918/

88206/

185%

RowEdit过滤字段

30918/

96742/

213%

Complexfile读入

30918/

149950/

385%

增加读如readers

14488/

30918/

113%

改变源数据格式

(定长带分隔符->

定长不带分隔符)

40000/

46875/

17%

1. 引入unix外部命令(有效度:

为了提高读取的速度,我们需要尽量避免读入多余的字段,我们选择了在Sequential Stage中加入了Filter选项,用unix shellcut命令指定只读所需的字段。这样会明显提高读入的速度,但数据量增大后(估计300MB以上),cut的处理速度将会明显下降,不能起到提高读取的目的。所以我们没有进行大数据量的Cut测试。

2. 调整数据在磁盘上的分布(有效度:★★★★

由于数据的读写对磁盘的I/O依赖比较强,我们尽量将不同的数据分配到不同的文件系统,这些文件系统被mount到不同的磁盘上,如增量文件、全量文件、Scratch目录、Datasets目录,以及目标文件的存放。对于同样的数据存放到了一组磁盘上面,我们也尽量让这些数据是以分散的跨盘存储的方式读取。结果证明,数据的读取效果将有比较明显的改善。大概是在一个磁盘上读取的2~3倍。由于I/O通道的多少和在磁盘上的分布,需要有系统管理员的支持,我们没有提供有关这种优化的测试结果数据。

3. 通过组件过滤多余字段(有效度:

由于引入了unix shell命令以后,对于较大数据量的读取不能有较好的效果。所以,我们采取将数据先用Sequential File Stage读入,然后再通过Copy Stage对不要处理的字段进行过滤,然后再做下一步处理。这种优化虽然增加了一个组件,但Copy Stage的速度是很快的,所以读取的速度比过滤字段要快。

4. 通过drop on input过滤多余字段(有效度:

在增加了一个Copy Stage的基础上,对于读入文件sequential file中不需要抽取的字段做如下设置:edit row -> filed level -> drop on input。这样将只读入需要抽取的字段。

5. 引入Complex File Stage读入数据(有效度:★★★

由于Complex File Stage能够并行读取数据,而且能够选择性的读入指定的字段,所以是我们一直希望引入的一个读入数据的组件,但由于该组件的配置比较复杂,而且对源数据的格式有一定的要求。而且其中有些功能我们目前还没有找到一些有效的方法解决。但我们在测试用该组件读取数据时,文件的读入速度有了大幅的提升。基本上可以达到正常的Sequential File Stage读取数据的4~5倍。如果其配置问题能够得到解决,那么这将是我们今后可以重点考虑的读入数据的组件。

6. 在读入文件是采用多readers(有效度:★★★★

无论是用Sequential File Stage还是用Comples File Stage,都有一个可调的选项:Number of Readers Per Node,其缺省值为1,它的功能是在每一个Node上,开N个读取数据的Instances。适当调整这个参数,提高读取数据的并行度,可以明显提高读取的效率。通常,对于每一个结点,将该选项的值设置为8~12个为宜,如果同时有几个文件同时读入,则希望总计不要超过12个,这可以依据实际的情况进行调试。但该参数好像也要求数据文件是定长的。

5.3.1.2. 提高运行效率

加快Job除了数据的输入输出以外的逻辑的处理速度,灵活应用不同的Stage,或者走不同的处理流程,对整个Job的处理速度的提升,也会有比较显著的效果。

本次测试的案例为将SAACNACN档与VIP客户清单档做Lookup,找出其中属于VIP客户的账户信息。

最终测试的效率变化结果如下:

优化方案

优化前(秒)

优化后(秒)

效率提升

(优化前/优化后)

改用Join方式

159

119

134%

LookUp File Set

159

57

279%

将字段合并

57

24

237%

1. 对于数据较大的参数表,改用Join Stage方式(有效度:★★

我们通常会用Lookup Stage做有关数据的匹配查找工作。对于LookupReference Link,由于其是将数据放到内存中,所以当其数据量较大的时候(超过了内存的大小),我们决定用Join Stage的内连接来实现相同的功能。由于我们的源数据是排序过的,所以会减少Join Stage的处理时间。

2. LookUp File Set 代替 Sequential file(有效度:★★

我们通常用Sequential File Stage来作为Lookup Stagereference link的输入,在数据量很小的情况下,好像这种方式不会影响效率。但如果数据量比较大,接近了内存的大小,那么DataStage会推荐使用Lookup file set作为Lookup reference的输入。虽然生成Lookup file set需要单独的Job生成,但这对于Lookup效率的提升,还是很值得的。在多个Job需要使用相同的Lookup file set的情况下,这种方式应该会更加有效。

3. 将字段合并处理(有效度:★★

我们会在数据读入的时候,过滤掉没有用的字段。而对于某些字段,在输出的结果中需要包含,但它们在处理的全程中,不会参加运算等单独的处理。我们考虑将这些连续的字段进行合并处理。这样可以减少数据的转换量。让工具只需要处理较少的需要转换的数据,对于有很多这种字段连续在一起的情况下,这种处理方式也有很好的效果。

5.3.1.3. 加强并行处理

1. Cluster方式运行(有效度:★★★★★

在本次测试有两台机器可供测试,由于DataStage Enterprise Parallel的并行功能,我们将另外的一台机器也配置到了Configure File中。这也是它区别与其它工具的一个特点。在进行大数据量,多个Job的并行处理时,这将是一个最有效的解决方法。

2. 同时读取处理多个文件

以通配符的方式读取多个文件。由于测试要求对于输出的文件,需要每个分行一个单独的文件,所以我们没有对这种方式进行深度的测试。

3. 在一个Job中包含几个相同流程

这种处理方式就是将Job的内容进行拷贝,放在同一个Job之中。运行这个Job的时候会同时运行有不同输入的几个流程。但这种方式好像效果并不如几个Job单独运行有效。

4. 几个Job并行调用

将处理逻辑完全一样的几个Job同时运行,这是目前我们最终决定采用的并行调度方式。但每次并行的个数,还需要依据不同的Job,做不同的分析。因为如果一次运行的Job过多,由于系统的资源有限,会造成并行处理的时间要远远大于同样数量的Job串行处理的时间。而且如果某个Job在一定的时间以内,没有等待到资源,那么它会因为超时而被abort掉。造成运行的Job不能全部成功的完成。每个Job运行起来以后,工具会在系统启动很多进程,我们分析,是否可以通过分析process的总量来确定不同Job所需要启动的最大数。但这在不同的硬件环境下,会有不同的结果。由于时间有限,我们还没有能够对每个Job的最大并行数进行测试。

5. 对并行的Job分配Node map

为了避免出现有关几个job同时并行而造成进程等待超时,我们将每个Job都固定在几个Node上运行,如对于8nodeconfigure file,我们将两个并行的Job,在其中的StageNode map中,第一个Job1234node,第二个Job用剩下的Node,这样做的效果会好很多,而且由于生成的进程少,也不容易出现Abort掉的结果。

5.3.1.4. 其它未进行的优化策略

1. 调整Partition方式

我们曾经尝试对某些StagePartition方式进行手工设置,但好像效果并不明显,选择Auto方式,让工具依据前面的Stage运行的Partition和本Stage的类型进行自动设定。这样效果还要相对好一些。不过对于某些特殊的,或者依据不同环境进行可以有不同选择的Stage,也可以通过手工设定Partition方式来提高运行的效率。

2. 引入DataSets

由于本次的测试案例都是相对独立的,没有必然的联系,所以本次没有采用DataSets存放中间结果。

3. 调整输入文件格式

我们在单项测试时,曾经对文件的格式对效率的影响进行了测试,发现变长带分隔符和定长不带分隔符的文件,在读取效率上最高。但我们本次的数据为定长带分隔符。

4. 调整环境变量

工具本身有许多的环境变量,可以调整工具运行的效率,但由于变量数目众多,而且时间有限,我们只对其中很少一部分进行了测试。

5. 使用RCP

由于使用RCPRuntime Column Propagation)可以减少一些数据的转换,但同时它可能会影响一些Stage运行的准确性。所以我们在这次测试中关闭了RCP功能。

6. 针对Transformer

如果在Transformer中有许多在Input Link中的字段,在Output Link中不需要输出,那么在进入Transformer以前,用copy组件将多余字段先去掉,让进入Transformer的数据都是有效的。这样可以节省一定的处理时间。

由于与去掉的字段的多少有关,所以还不能得出效率提升的百分比。

5.3.2. 关键问题分析

5.3.2.1. 文件读写

文件的读写,会在很大程度上,影响一个Job的运行效率。对于那种数据量大而且处理的逻辑相对简单的Job,更是至关重要。因为有可能整个Job运行时间的50%以上都在数据的读写上面。对于同时有多个文件读入的Job,读入速度最慢的文件会影响拉长整个Job的运行时间。所以,数据以何种格式存放;存放的在什么地方;工具以何种方式读入等,都是我们需要认真考虑的地方。

5.3.2.2. 磁盘I/O

如前面所述,工具运行的效率对此依赖也是十分明显。因为当数据量比较大时,工具会十分频繁的读写磁盘,会在磁盘上存放和读取数以千计的临时文件。因此如果尽可能的增加I/O通道,提高对数据的读写速度,也时关键一环。

5.3.2.3. 内存限制

DataStage会最大限度的使用系统资源,这就包括系统内存,因为工具会尽可能把数据放在内存中进行处理,在内存不够的情况下,就需要通过页面调度来存放数据。这样就会大大降低整个的处理速度。工具推荐每个CPU至少配备23GB的内存空间,至少这种比例,才能较好的支持工具对系统资源的消耗,在我们进行多个Job的并行调度的测试时,对内存的依赖就更加明显。

5.3.3. 并行度

JobJob的并行调度,一直是我们很关注的问题,经过我们反复的测试,发在Job能够并行的个数的多少,没有一个可以量化的标准,这与系统的软硬件环境也很有关系。大概的规则是:如果运行的Job逻辑简单,需要进行的运算(如排序、类型转换等)较少。则能够并行调度的Job数量会比较多,而且并行的处理时间会小于同样数目的Job串行处理的时间。

并行度最终也依赖于当时整个DataStage派生出来的进程数量,依据不同的硬件配置,观察当时硬件环境能够承受的进程数的一个阀值,只要保证进程的数据量不超过该阀值,则可以依据Job的不同,同时启用不同的并发数。

5.3.4. 处理建议

5.3.4.1. 提高读取速度

1. 对于只有少数字段参加处理流程的文件可以考虑采用Complex进行数据读取。但需要对Table Definition做改造。

2. 如果采用定长不带分隔符的数据格式,既可以避免字段中带分隔符的情况不能处理,也可以提供数据的读取速度。

5.3.4.2. 合理分配数据存储空间

1. 按照数据量和数据的种类进行分类,避免频繁读取的数据被放在同一个磁盘空间上。为频繁读取的数据分配更多的I/O资源。

2. 对于工具Scratch目录,尽量分配较多的I/O通道。

5.3.4.3. 加强Stage的调优

1. 需要在以后的Job设计、测试过程中尽可能多的对每一个Stage的各项参数,如Partition方式,Buffer类型,运行的Node数等,进行调优。

5.3.4.4. 合理工具参数设置

1. 对于工具的众多环境变量,最好能够在理解其含义的情况下,对效率影响比较大的一些,依据系统的实际情况进行设置。

5.3.4.5. 调整操作系统参数

1. 工具不能控制一些操作系统级的参数,所以需要我们依据工具对系统的内存、CPUI/O通道的依赖。调整一些系统的参数,对操作系统本身进行优化。

5.3.5. 其它

5.3.5.1. 对输出结果排序

1. 由于本次的测试没有对输出文件的排序做要求,所以我们在测试过程中没有考虑最后的输出文件的排序。

2. 我们仅仅对一个大小约为80万条记录的输出数据进行了排序处理,发现这种规模的排序,对整个Job的处理时间(约5分钟)没有太大影响。

5.3.5.2. Complex file的配置

由于Complex File Stage主要是对于EBCDIC码等比较复杂的文件进行读取,所以对于普通的Sequential file,我们如果用Complex File Stage读取,还存在一些问题。如果决定要采取这种方式读入数据,还需要对这个Stage的功能进行进一步的理解。

参考厂商的建议,我们也不推荐用该Stage作为对Sequential file的读取组件。

5.3.6. 机器的对称性

我们在运行并行的Job调度时,发现有这样一种情况,我们每次调用三个,甚至两个Job时,都有可能会出现一个Job因为无法在规定时间内等到资源而被Abort掉,查看日志发现问题出现在从机xmkf_A22上,和Support联系后,他们认为我们的两台机器在配置上不对称也是我们出现这个问题的原因。

5.3.7. 并行调度测试说明:

按照Ascential的工程师给我们的建议,当一个Job能够比较彻底的消耗系统的资源的时候,我们通常会串行的调度我们的Job。而如果盲目的对几个同样的Job进行并行的调度,那么从时间上说,可能不会节省多少,而且有可能会造成整个Job运行的稳定性降低。

但由于部分Job在运行过程中的资源的消耗不是很彻底。于是我们想测试一下多少个Job的运行会消耗掉所有的系统资源。而且我们在Job能够顺利执行成功的情况下能够做多少Job的并行。

5.3.7.1. 测试结果

由于我们在测试中发现如果我们对于每一个Job都同时在全部的8个结点上运行,当我们的并行度增加到3个的时候(此时的Job没有进行流程的改造),会有一个Job因为超时而失败。所以我们准备用对不同的Job指定不同的Node来运行的方法来进行并行的测试,结果是虽然运行的时间没有得到提升,但稳定行得到了提高,最大可以达到同时运行16Job

测试

每个JobNode

并行的Job

运行时间

1

4Job3node;有2Job2Node

6

820

2

每个Job2Node

8

12

3

每个Job1Node

16

218

4

每个Job8Node

1

35

6. 开发经验技巧汇总

datastage常用Stage

相关推荐