Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DataStage Discussion :

[datastage] Boucle avec traitement parallèle


Sujet :

DataStage

  1. #1
    Membre à l'essai
    [datastage] Boucle avec traitement parallèle
    Bonjour,

    dans une séquence de job , il y a une boucle. Dans cette boucle est appelé un job (appelons le zeJobA(N) ) qui prend des paramètres en fonction de N.
    N étant le nombre de tours de boucle effectués.

    Vu que ma boucle risque de devoir faire environ 1200 tours , c'est un peu long si le traitement de la boucle est séquentiel.

    J'entends par là que le flow serait comme suit :
    - tour de boucle n=1

    - lancement zeJobA(1)
    - fin zeJobA(1)
    -tour de de boucle n=2

    - lancement zeJobA(2)
    - fin zeJobA(2)

    etc jusqu'à n=1200

    est-il possible de lancer zeJobA dans une boucle sans attendre la fin de celui-ci ? (en java, on ferait une boucle pour lancer n threads), pour obtenir un flow comme suit :
    - tour de boucle n=1

    - lancement zeJobA(1)
    - tour de boucle n=2

    - lancement zeJobA(2)
    - tour de boucle n=3

    - lancement zeJobA(3)
    - fin zeJobA(1)
    - fin zeJobA(2)
    - fin zeJobA(3)


    L'intérêt serait de profiter de l'architecture du serveur qui est massivement parallèle.

    merci pour vos réponses.

  2. #2
    Responsable Approche théorique du décisionnel

    Bonjour,

    Vous êtes en quelle version de Datastage ? PX ou Server ?

    Sinon dans les propriétés du job il y a une case à cocher pour le rendre "instanciable". Comme ça on peut lancer plusieurs instances du même job en parallèle.
    Cela devrait répondre à votre problème.

    ( même si 1200 instances me semble un peu trop important )
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  3. #3
    Membre à l'essai
    bonsoir,
    oui j'avais vu qu'un job pouvait être marqué comme instanciable.
    mais il semblerait que les boucles dans les séquences de jobs fonctionnent de manière séquentielle.

    Je suis nouveau sur datastage, concernant la version tout ce que je puis dire cest que ce serait datastage 8.0.1 (la version qui permet de faire des traitements parallèles)

    Evidemment, 1200 instances tournant en même temps, ça serait un peu beaucoup, j'aurais imaginé que datastage aurait la sagesse d'attendre qu'un noeud (ou coeur de processeur au choix) se libère avant de lancer le suivant.

    je rêve un peu à voix haute c'est ça ?

  4. #4
    Responsable Approche théorique du décisionnel

    Citation Envoyé par blazDelParis Voir le message
    mais il semblerait que les boucles dans les séquences de jobs fonctionnent de manière séquentielle.
    Je ne connais pas la partie "Job Sequence" mais je crois en effet qu'une boucle est séquentielle.

    Citation Envoyé par blazDelParis Voir le message

    Je suis nouveau sur datastage, concernant la version tout ce que je puis dire cest que ce serait datastage 8.0.1 (la version qui permet de faire des traitements parallèles)
    Si c'est la PX à mon avis tu as d'autres possibilités en //

    Citation Envoyé par blazDelParis Voir le message

    je rêve un peu à voix haute c'est ça ?
    ah ça 1200 jobs en même temps ça envoie de la marmotte sur la lune

    Sinon ce que tu peux faire :
    un job normal avec dans les propriétés/ onglet job control - tu rajoutes le job et tu fais une boucle.
    Tu mets les DSWaitForJob à la fin pour attendre tous tes jobs en même temps.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  5. #5
    Membre à l'essai
    effectivement, il semble que faire une bouvle sur un job ne soit pas une bonne manière de faire de toute façon.
    je vais essayer plutôt de faire un traitement ensembliste (comme une grosse requête SQL mais implémentée en datastage)