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  tsort50dX@oqU
....
[domain01:dsadm]ls  /Data/scratch02
tsort40d0A7CB  tsort40dBD7Lr  tsort40ddrQKv  tsort40dgoGBU  tsort40dKj8K3  tsort40d__Rs8  tsort40duZ4Zu  tsort40dZ2z@z
tsort40d0K6rw  tsort40dbEMco  tsort40degDYO  tsort40dgVgZs  tsort40d@kl2X  tsort40dSAMWF  tsort40dVAwRI  tsort40dzpg0g
...
[domain01:dsadm]ls  /Data/scratch03
tsort90d0A7CB  tsort90dBD7Lr  tsort90ddrQKv  tsort90dgoGBU  tsort90dKj8K3  tsort90d__Rs8  tsort90duZ4Zu  tsort90dZ2z@z
tsort90d0K6rw  tsort90dbEMco  tsort90degDYO  tsort90dgVgZs  tsort90d@kl2X  tsort90dSAMWF  tsort90dVAwRI  tsort90dzpg0g
...
[domain01:dsadm]ls  /Data/scratch04
tsort70d0A7CB  tsort70dBD7Lr  tsort70ddrQKv  tsort70dgoGBU  tsort70dKj8K3  tsort70d__Rs8  tsort70duZ4Zu  tsort70dZ2z@z
tsort70d0K6rw  tsort70dbEMco  tsort70degDYO  tsort70dgVgZs  tsort70d@kl2X  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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM