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)