IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Exécution et industrialisation Discussion :

Talend : mémoire insuffisante pour traiter 7 millions de lignes


Sujet :

Exécution et industrialisation

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Talend : mémoire insuffisante pour traiter 7 millions de lignes
    Bonjour,

    Je suis sur que je serais aidée ici.
    En effet, je travaille avec l'ETL TALEND et mes données sont dans une base MYSQL.
    Je fais des jointures(jointures qui marchent et vérifiée sur MYSQL) à l'aide du composant tmysqlINPUT .
    Les tables dont je me sert comportent plus de 7 millions de lignes chacune.
    Après exécution, j'ai un problème de mémoire, j'ai augmenté dans la configuration (fichier TalendOpenStudio-win32-x86.ini)
    -vmargs
    -Xms256m
    -Xmx1024m
    -XX:MaxPermSize=128m

    mais malgré cela, j'ai toujours ce même message.

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1340)
    at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2330)
    at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:427)
    at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2035)
    at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1421)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1772)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2430)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2359)
    at com.mysql.jdbc.Statement.executeQuery(Statement.java:1227)
    at

    Je n'ai aucune idée de comment m'en sortir.
    Ce que je me dit, c'est que TOS est un outil ETL et comme les autres, il doit être capable de traiter des grosses données.
    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Points : 6 506
    Points
    6 506
    Par défaut
    Bonjour,

    as-tu regardé les liens de la FAQ suivants :
    - http://www.developpez.net/forums/d54...d/#post4252393
    - http://www.developpez.net/forums/d54...d/#post4252450

    Pourrais-tu nous mettre un screenshot de ton job pour voir d'où cela pourrait réellement venir ?
    Google est ton ami mais ton voisin aussi

    Modérateur BI - Responsable Talend
    Mes tutoriels - FAQ Talend - FAQ SQL*Plus

    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Suivez @Developpez sur twitter !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Ci joint un fichier que j'ai généré.
    J'ai déja regardé les liens que tu m'as donnée.
    J'ai changé le Xmx de 1024m à 2048m mais talend refuse carrément de s'ouvrir. (j'ai seulement 3.24go de ram)
    Sinon, actuellement j'ai modifié un des paramètres du TMYSQLINPUT, en effet, j'ai coché dans Advanced Settings, Enable stream.
    Je n'ai aucun résultat depuis. J'attends toujours, pour l'instant.
    Fichiers attachés Fichiers attachés

  4. #4
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Points : 6 506
    Points
    6 506
    Par défaut
    Une image de ton job plutôt ? (imprime écran)
    Google est ton ami mais ton voisin aussi

    Modérateur BI - Responsable Talend
    Mes tutoriels - FAQ Talend - FAQ SQL*Plus

    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Suivez @Developpez sur twitter !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Je suis désolée.
    j'étais obligée de zippé le fichier, impossible de l'envoyer en tant qu'image.
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Points : 6 506
    Points
    6 506
    Par défaut
    Effectivement ce n'est pas un job avec plein de composant donc ça élimine déjà certaines pistes.

    Par contre quelques conseils :
    - n'oublie de fermer tes connexions MySQL avec 2 tMySQLCommit
    - dans le composant tMySQLInput, coche dans l'onglet des options avancée ("Advanced settings") : "Enable stream"
    - dans le composant tMySQLOuput, si tu fais de l'insert, tu peux personnaliser le nombre de lignes à insérer par commit dans les options avancées.
    - exécute ton job là où il y a la base de données en donnant à ton script un -Xmx optimisé par rapport à la machine (dans le .bat ou .sh créé par Talend suivant le système d'exploitation)
    Google est ton ami mais ton voisin aussi

    Modérateur BI - Responsable Talend
    Mes tutoriels - FAQ Talend - FAQ SQL*Plus

    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Suivez @Developpez sur twitter !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Merci pour tes conseils.
    J'ai vais fermé les connexions.
    -J'avais déja appliqué dans le deuxième mais je n'ai encore aucun résultat, la requête est longue.
    -Pour la personalisation du nombre de lignes à inserer dans le tMySQLOuput, j'ai des erreurs quand je coche extendInsert en mettant par exemple 100.
    -par rapport au Xmx, je ne peut pas aller au déla de 1024m0; il ne crée pas au déla la machine virtuelle(c'est l'erreur qui m'est envoyé)

    Sinon, tu n'as plus d'autres idées?

  8. #8
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Points : 6 506
    Points
    6 506
    Par défaut
    Tu peux copier / coller ta requête histoire de voir si on ne peut pas optimiser la mémoire de ce côté mais j'ai quelques doutes
    Google est ton ami mais ton voisin aussi

    Modérateur BI - Responsable Talend
    Mes tutoriels - FAQ Talend - FAQ SQL*Plus

    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Suivez @Developpez sur twitter !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Ci dessous ma requête.
    Pour optimiser la mémoire, je vais dans windows>prederences>Talend>Run/DEBUG
    C'est bien ca non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    select
             PERSONN_MENS.MAT_EXT_NUM ,
             if(PERSONN_MENS.ANC_CLI_IARD_PASS_DAT <> '0000-00-00' ,
    PERSONN_MENS.ANC_CLI_IARD_PASS_DAT ,null),
             if(PERSONN_QUOTI.SOUSC_IARD_PRE_DAT <> '0000-00-00',
    year(CURRENT_DATE) - year(PERSONN_QUOTI.SOUSC_IARD_PRE_DAT),null),
             PERSONN_MENS.PERS_GMPA ,
             PERSONN_MENS.PERS_IARD_TYP ,
             case 
                when PERSONN_MENS.PERS_IARD_TYP  = 'C'
                then 'Client IARD'
                when PERSONN_MENS.PERS_IARD_TYP  = 'A'
                then 'Ancien client IARD'
                when PERSONN_MENS.PERS_IARD_TYP  = 'P'
                then 'Pospect IARD'
                else 'Autres'
             end ,
             PERSONN_MENS.PERS_NBR_CTR_IARD ,
             case 
                when PERSONN_MENS.PERS_IARD_TYP  = 'C' and PERSONN_MENS.PERS_VIE_TYP <> 'C'
                then 'Mono IARD'
                when PERSONN_MENS.PERS_IARD_TYP  <>  'C' and PERSONN_MENS.PERS_VIE_TYP =  
    'C'
                then 'Mono VIE'
                when PERSONN_MENS.PERS_IARD_TYP  = 'C' and PERSONN_MENS.PERS_VIE_TYP = 'C'
                then 'IARD + VIE'
                else 'Autres'
             end  ,
             case 
                when PERSONN_QUOTI.PERS_BUR_RTC_IARD is null
                then 'NUL'
                else PERSONN_QUOTI.PERS_BUR_RTC_IARD
             end ,
             if(PERSONN_QUOTI.PERS_DECES_DAT<> '0000-00-00',PERSONN_QUOTI.PERS_DECES_DAT,
     null),
             if(PERSONN_QUOTI.PERS_NAISS_DAT<> '0000-00-00', PERSONN_QUOTI.PERS_DECES_DAT,
    null),
             year(CURRENT_DATE) - year(PERSONN_QUOTI.PERS_NAISS_DAT),
             if(PERSONN_QUOTI.SOUSC_IARD_PRE_DAT<> '0000-00-00',PERSONN_QUOTI.PERS_DECES_DAT,
    null) 
          from
             PERSONN_MENS left join 
             PERSONN_QUOTI
                on
                (
                   PERSONN_MENS.MAT_EXT_NUM = PERSONN_QUOTI.MAT_EXT_NUM
                )

  10. #10
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Edna24 Voir le message
    J'ai changé le Xmx de 1024m à 2048m mais talend refuse carrément de s'ouvrir. (j'ai seulement 3.24go de ram)
    Petite remarque qui pourra peut-être vous aider : je crois que la mémoire max allouée à une machine virtuelle ne peut pas dépasser une certaine taille.
    Par exemple j'ai mis 1536m, ça fonctionne.
    (Je ne sais pas quelle est la limite max)

    Nicolas

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/09/2009, 13h18
  2. mémoire insuffisante pour charger une image
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/11/2007, 18h22
  3. Réponses: 0
    Dernier message: 24/07/2007, 11h38
  4. Réponses: 1
    Dernier message: 29/06/2007, 11h21
  5. Réponses: 5
    Dernier message: 12/02/2007, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo