DataStage 七、在DS中使用配置文件分配资源

DataStage序列文章

DataStage 一、安装
DataStage 二、InfoSphere Information Server进程的启动和停止
DataStage 三、配置ODBC
DataStage 错误集(持续更新)
DataStage 四和五因为包含大量图片发布不便,有兴趣学习和研究者请联系索要!!!
DataStage 六、安装和部署集群环境

1 配置文件的用途

配置文件在DS运行时第一时间被读取,如果JOB属性中设置了$APT_CONFIG_FILE参数,则DS读取该参数中配置的配置文件信息;如果没有配置则读取项目属性$APT_CONFIG_FILE参数中配置的配置文件信息;如果没有则读取默认的配置文件default.apt;配置文件告诉了DS怎么分配所需要的系统资源,如逻辑处理节点信息、temporary store、dataset storage,在某些情况同样可以在配置文件中配置更高级的资源信息,如buffer storage;使用配置文件的好处在于可以在修改了配置文件(比如增加节点或增加其它资源)的情况不修改或重新设计JOB,使其保持可用状态,而处理这些你仅仅需要在job属性或项目属性中设置$APT_CONFIG_FILE参数。在创建配置文件时我们主要要考虑的两个重要因素有:逻辑处理节点和优化并行。

2 逻辑处理节点(Logical Processing Node)

在并行作业中配置文件可以定义一个或多个逻辑处理节点,这些定义的逻辑节点信息会在并行作业运行时由Engine分配使用,如下面的逻辑节点定义:

{
    node "node1"
    {
        fastname "dsconductor01"
        pools ""
        resource disk "/disk2/IBM/EngineTier/Server/Datasets" {pools ""}
        resource scratchdisk "/disk2/IBM/EngineTier/Server/Scratch" {pools ""}
    }
    node "node2"
    {
        fastname "dsconductor01"
        pools ""
        resource disk "/disk2/IBM/EngineTier/Server/Datasets" {pools ""}
        resource scratchdisk "/disk2/IBM/EngineTier/Server/Scratch" {pools ""}
    }
}

注意:处理节点node1和node2是逻辑节点不是物理节点,它不代表物理CPU的个数,可以在一个物理机器中定义一个或多个逻辑节点。逻辑节点的定义决定了在并行作用运行时可以产生多少个并行进程和有多少的资源可用,等同于Unix上的物理进程数,逻辑节点越多产生的进程和使用的内存或磁盘空间(如排序操作)就越多。在IBM的官方文档中建议创建逻辑节点的个数为物理CUP数的一半,当然这还要取决于系统配置、资源可用性、资源共享、硬件和JOB设计,比如如果JOB需要高的IO操作或者要从数据库中获取大量的数据,这时可能要考虑定义多个逻辑节点来完成操作。

3 优化并行(Optimizing parallelism)

并行的个数取决于在配置文件中配置的逻辑处理节点个数,并行应该在考虑系统和JOB设计的情况下进行优化而不是最大化,并行数越多可能会很好的分布负载,但同时也增加了系统的进程数和资源的消耗,背后也隐示的增加了系统整体负载;所以并非并行越多越好,所以一定要综合考虑CPU、内存、磁盘、JOB方面因素,使并行对系统的影响和效率可维护。
**注意:如果stage中包含联结或者sort,你可能会使用Partition,比如Hash分区,如果数据的量接近等于分区数,比如下面的数据:

在这样的情况下等量的并行数会显著提高整体的性能。

3 创建配置文件示例

当安装DS时系统默认创建default.apt文件,并且该配置文件默认应用于创建的DS项目,该文件创建的规则:

  • 逻辑节点数=1/2的物理CUP个数
  • disk和scratchdisk 使用DS安装目录下的子目录

你要创建新的配置文件去优化并行作业,使其能够充分的使用硬件资源和系统资源,因为不同的job所需要的资源是不一样的,比如说JOB中包含排序和保存数据到磁盘文件的stage,需要高的IO操作,这时根据系统情况分配多个scratchdisk可以显著提高排序效率。做为示例我做了这样一个job;

Select_bigData 从源表中读取一张包含1亿数据的表;
Sort_bigData 对源表的数据进行复杂的排序操作;
Tran_bigData 对排好序的数据进行转换;
最后将数据保存到目标表。
我为该job定义了一个config file:

/* beging of config */
{
    node "node1"
    {
        fastname "domain01"
        pools ""
        resource disk "/Data/SHAREDATA/Datasets" {pools ""}
        resource scratchdisk "/Data/scratch01" {pools ""}
    }
    node "node2"
    {
        fastname "domain01"
        pools ""
        resource disk "/Data/SHAREDATA/Datasets" {pools ""}
        resource scratchdisk "/Data/scratch02" {pools ""}
    }

    node "node3"
    {
        fastname "domain01"
        pools ""
        resource disk "/Data/SHAREDATA/Datasets" {pools ""}
        resource scratchdisk "/Data/scratch03" {pools ""}
    }
    node "node4"
    {
        fastname "domain01"
        pools ""
        resource disk "/Data/SHAREDATA/Datasets" {pools ""}
        resource scratchdisk "/Data/scratch04" {pools ""}
    }
}/* end of entire config */

在config file 中包含4个逻辑节点,so 当运行job时ds会创建4个进程并行处理;4个逻辑节点中分别分配了不同的scratchdisk,这样并行进程即可将数据以集合的方式分别写入4个scratchdisk中完成排序操作。so 在job开始前,检查了系统的ds进程情况,只有一个正在连接的dsapi_slave;

 phantom printer segments!
 DSnum Uid       Pid   Ppid  C Stime Tty      Time     Command
  sywu     12431 12430  0 11:02 ?        00:00:07 dsapi_slave 7 6 0 4

当job启动运行时,ds便读取配置文件,然后计算和分配资源;

4 phantom printer segments!
 DSnum Uid       Pid   Ppid  C Stime Tty      Time     Command
 49932 sywu     15604 15564  0 11:52 ?        00:00:00 phantom DSD.OshMonitor Clu
 49937 sywu     15599 15564  0 11:52 ?        00:00:00 phantom SH -c ‘/software/I
 49972 sywu     15564 12431  1 11:52 ?        00:00:00 phantom DSD.RUN ClusterRea
 53105 sywu     12431 12430  0 11:02 ?        00:00:10 dsapi_slave 7 6 0 4

这些并行进程同时处理不同的操作:

[domain01:dsadm]ps -ef|grep 15604
sywu     15604 15564  0 11:52 ?        00:00:00 phantom DSD.OshMonitor ClusterReadBigDataAndSaveToTab 15603 MSEVENTS.FALSE
dsadm    16816 17037  0 11:52 pts/0    00:00:00 grep 15604
[domain01:dsadm]ps -ef|grep 15599
sywu     15599 15564  0 11:52 ?        00:00:00 phantom SH -c ‘/software/IBM/InformationServer/Server/DSEngine/bin/OshWrapper RT_SCTEMP/ClusterReadBigDataAndSaveToTab.fifo RT_SC3/OshExecuter.sh R DUMMY  -f RT_SC3/OshScript.osh -monitorport 13400 -pf RT_SC3/jpfile -impexp_charset UTF-8 -string_charset UTF-8 -input_charset UTF-8 -output_charset UTF-8 -collation_sequence OFF‘
sywu     15602 15599  0 11:52 ?        00:00:00 /software/IBM/InformationServer/Server/DSEngine/bin/OshWrapper RT_SCTEMP/ClusterReadBigDataAndSaveToTab.fifo RT_SC3/OshExecuter.sh R DUMMY -f RT_SC3/OshScript.osh -monitorport 13400 -pf RT_SC3/jpfile -impexp_charset UTF-8 -string_charset UTF-8 -input_charset UTF-8 -output_charset UTF-8 -collation_sequence OFF
dsadm    16819 17037  0 11:53 pts/0    00:00:00 grep 15599
[domain01:dsadm]ps -ef|grep 15564
sywu     15564 12431  0 11:52 ?        00:00:00 phantom DSD.RUN ClusterReadBigDataAndSaveToTab 0/0/1/0/0/0/0/
sywu     15599 15564  0 11:52 ?        00:00:00 phantom SH -c ‘/software/IBM/InformationServer/Server/DSEngine/bin/OshWrapper RT_SCTEMP/ClusterReadBigDataAndSaveToTab.fifo RT_SC3/OshExecuter.sh R DUMMY  -f RT_SC3/OshScript.osh -monitorport 13400 -pf RT_SC3/jpfile -impexp_charset UTF-8 -string_charset UTF-8 -input_charset UTF-8 -output_charset UTF-8 -collation_sequence OFF‘
sywu     15604 15564  0 11:52 ?        00:00:00 phantom DSD.OshMonitor ClusterReadBigDataAndSaveToTab 15603 MSEVENTS.FALSE
dsadm    16822 17037  0 11:53 pts/0    00:00:00 grep 15564
[domain01:dsadm]ps -ef|grep 12431
sywu     12431 12430  0 11:02 ?        00:00:10 dsapi_slave 7 6 0 4
sywu     15564 12431  0 11:52 ?        00:00:00 phantom DSD.RUN ClusterReadBigDataAndSaveToTab 0/0/1/0/0/0/0/
dsadm    16826 17037  0 11:53 pts/0    00:00:00 grep 12431

每一个并行进程向相应的scratchdisk中写临时数据;

[domain01:dsadm]ls  /Data/scratch01
tsort50d0A7CB  tsort50db8yql  tsort50d_Dflj  tsort50dfY9VY  tsort50djuws6  tsort50dPpmTS  tsort50dTwSkn  tsort50dxaZhz
tsort50d0K6rw  tsort50dBD7Lr  tsort50dDl1hJ  tsort50dGM1PK  tsort50dk3CQP  tsort50dpS_7P  tsort50dtWx6t  [email protected]
....
[domain01:dsadm]ls  /Data/scratch02
tsort40d0A7CB  tsort40dBD7Lr  tsort40ddrQKv  tsort40dgoGBU  tsort40dKj8K3  tsort40d__Rs8  tsort40duZ4Zu  [email protected]
tsort40d0K6rw  tsort40dbEMco  tsort40degDYO  tsort40dgVgZs  [email protected]  tsort40dSAMWF  tsort40dVAwRI  tsort40dzpg0g
...
[domain01:dsadm]ls  /Data/scratch03
tsort90d0A7CB  tsort90dBD7Lr  tsort90ddrQKv  tsort90dgoGBU  tsort90dKj8K3  tsort90d__Rs8  tsort90duZ4Zu  [email protected]
tsort90d0K6rw  tsort90dbEMco  tsort90degDYO  tsort90dgVgZs  [email protected]  tsort90dSAMWF  tsort90dVAwRI  tsort90dzpg0g
...
[domain01:dsadm]ls  /Data/scratch04
tsort70d0A7CB  tsort70dBD7Lr  tsort70ddrQKv  tsort70dgoGBU  tsort70dKj8K3  tsort70d__Rs8  tsort70duZ4Zu  [email protected]
tsort70d0K6rw  tsort70dbEMco  tsort70degDYO  tsort70dgVgZs  [email protected]  tsort70dSAMWF  tsort70dVAwRI  tsort70dzpg0g
tsort70d_0oKX  tsort70dbo642  tsort70deP8o7  tsort70dH6oYi  tsort70dL9Gnu  tsort70dSG2rc  tsort70dVUr3y  tsort70dZrp8k
...

3.1 SMP Server配置文件

当系统运行在共享共享memory,多进程系统中,比如SMP server,假设系统有4个cpu,有4个分离的文件系统磁盘(/fdisk01,/fdisk02,/fdisk03,/fdisk04),为了更好的优化并行资源,创建如下的配置文件:

/* beging of config */
{
    node "node1"
    {
        fastname "domain01"
        pools ""
        resource disk "/fdisk01/disk" {}
        resource disk "/fdisk02/disk" {}
        resource disk "/fdisk03/disk" {}
        resource disk "/fdisk04/disk" {}
        resource scratchdisk "/fdisk01/scratch" {}
        resource scratchdisk "/fdisk02/scratch" {}
        resource scratchdisk "/fdisk03/scratch" {}
        resource scratchdisk "/fdisk04/scratch" {}
    }
    node "node2"
    {
        fastname "domain01"
        pools ""
        resource disk "/fdisk01/disk" {}
        resource disk "/fdisk02/disk" {}
        resource disk "/fdisk03/disk" {}
        resource disk "/fdisk04/disk" {}
        resource scratchdisk "/fdisk01/scratch" {}
        resource scratchdisk "/fdisk02/scratch" {}
        resource scratchdisk "/fdisk03/scratch" {}
        resource scratchdisk "/fdisk04/scratch" {}
    }

    node "node3"
    {
        fastname "domain01"
        pools ""
        resource disk "/fdisk01/disk" {}
        resource disk "/fdisk02/disk" {}
        resource disk "/fdisk03/disk" {}
        resource disk "/fdisk04/disk" {}
        resource scratchdisk "/fdisk01/scratch" {}
        resource scratchdisk "/fdisk02/scratch" {}
        resource scratchdisk "/fdisk03/scratch" {}
        resource scratchdisk "/fdisk04/scratch" {}
    }
    node "node4"
    {
        fastname "domain01"
        pools ""
        resource disk "/fdisk01/disk" {}
        resource disk "/fdisk02/disk" {}
        resource disk "/fdisk03/disk" {}
        resource disk "/fdisk04/disk" {}
        resource scratchdisk "/fdisk01/scratch" {}
        resource scratchdisk "/fdisk02/scratch" {}
        resource scratchdisk "/fdisk03/scratch" {}
        resource scratchdisk "/fdisk04/scratch" {}
    }
}/* end of entire config */

这样的配置适用于当job中包含比较复杂很难决定资源分配方式和stage需要较高的IO操作,ds计算指定的disk和scratchdisk,最大化的降低IO。

4 总结

很多情况下需要根据job的复杂程度、包含的stage以及数据量情况来创建相应的配置文件,不同的操作所需的系统、硬件资源不同,对于大数据的排序、保存到文件可能需要到较高的IO资源,对于运算、逻辑处理可能需要较高的CUP资源;创建配置文件时应综合考虑这些因素来创建;配置文件中的逻辑节点越多,可能提高并行作业效率,但同时它也增加了系统的负载。

--The end(2015-11-11)

时间: 2024-10-08 07:15:20

DataStage 七、在DS中使用配置文件分配资源的相关文章

Spring中Hibernate配置笔记

ApplicatonContext.xml中的配置: <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/global/ds" /> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <proper

JNDI在Tomcat中的配置

使用JNDI获取连接对象 java:comp/env/jdbc/news 这段为固定写法java:comp/env/ 在Tomcat中的配置 配置在:context.xml文件内 F:\apache-tomcat-7.0.68-windows-x64\apache-tomcat-7.0.68\conf\context.xml ---------mySQL<Resource name="jdbc/news"auth="Container" type="

DICOM医学图像处理:DCMTK在VS2012中的配置

背景: 最近由于项目需要,将原本的开发IDE环境由VS2008升级到了VS2012.本以为编译完成后的DCMTK开源库可以直接从VS2008移植到VS2012.但是通过项目属性添加完包含目录和依赖库后,编译会出现大量的链接错误(大多是跟dcmdata.lib.oflog.lib有关). 解决方法: 重新按照原本的博客前辈柳北风儿(大神目前已经博客转移到网易:http://blog.163.com/[email protected]/),利用CMake工具,选择VS2012本地编译器对DCMTK3

只显示前几条数据的sql语句写法 七种数据库中Select Top的使用方法

七种数据库中Select Top的使用方法 1. Oracle数据库 SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库 SELECT FIRST N * FROM TABLENAME 3. DB2数据库 SELECT * FROM (SELECT * ROW_NUMBER() OVER({ORDER BY COL1 DESC}) AS ROWNUM FROM TABLENAME) WHERE ROWNUM <= N 或者 SELEC

web.xml的配置中&lt;context-param&gt;配置作用

<context-param>的作用: web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param> 2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文. 3.容器将&l

在CentOS6.4中安装配置LAMP环境的详细步骤

原文:在CentOS6.4中安装配置LAMP环境的详细步骤 本文详细介绍了CentOS6.4系统中安装LAMP服务并对其进行配置的过程,即安装Apache+PHP+Mysql,参照了网上大神的设置,其他Linux发行系统可以参考~ 在本文中部分命令操作需要root权限,输入‘su -’命令后输入密码即可切换root身份. 一.修改设置对安装做准备 1. 防火墙设置 设置/etc/sysconfig/iptables文件允许80端口和3306端口.因为80端口是http协议所使用的端口,如果防火墙

Tomcat插件与Jetty插件在MyEclipse中的配置

-Djetty.port=8101 jetty:run tomcat6:run <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat6-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8888</port>

XCode中Architecturs配置及常见问题

http://lanvige.github.io/2014/03/19/architecturs-in-xcode/ XCode 5.1升级后因arm64和CocoaPods的原因,痛了一天,终于解决了问题,同时也记录下这次的学习成果. ARMv6/7/7s & ARM64 在了解Architecture之前,先来认识这几个名字.armv6, armv7, armv7s, arm64是ARM CPU的不同指令集,就像CPU内潜入的软件版本.其在iPhone处理器型号为A4, A8… arm 芯片

在Win7中IIS配置Asp.Net虚拟目录的方法及错误总结!

在Win7中IIS配置Asp.Net虚拟目录的方法总结! 一.右键[网站],点击[添加虚拟目录]或[虚拟应用程序],笔者建议最好建立虚拟应用程序,因为这就跟一个网站差不多,不用考虑路径问题. 二.直接输入相应内容选择路径就行了,如果要指定[应用程序池],需要先建立一个新的[应用程序池],配置与网站差不多了. 三.运行后,如果出现以下错误:HTTP 错误 500.19 一般是web.config配置问题,很简单,找到以下内容 <system.webServer> <defaultDocum