2017-09-04 3 views
2

Maintenant que OpenShift Online V2 a annoncé sa fin de service, je cherche à migrer mon application Python vers OpenShift Online V3, alias OpenShift NextGen. Pandas est une exigence (et énuméré dans requirements.txt)Pandas sur OpenShift v3

Il a déjà été non-trivial à get pandas installed in v2 mais V3 ne permet pas l'interaction manuelle dans le processus de construction (ou le fait?). Lorsque j'essaie de créer mon application, le processus de construction s'arrête au bout d'une heure. pip a téléchargé et installé le contenu du requirements.txt et exécute setup.py pour les packages sélectionnés. Le et du fichier journal est

Running setup.py install for numpy 
Running setup.py install for Bottleneck 
Running setup.py install for numexpr 
Running setup.py install for pandas 

Ensuite, le processus s'arrête sans aucun message d'erreur.

Est-ce que quelqu'un a une idée de la façon de construire des applications Python qui nécessitent des pandas sur OpenShift V3?

+0

Combien de paquets Python différents essayez-vous d'installer à partir du fichier requirements.txt? Même en recréant la même liste de paquets que Jupyter datascience-notebook, on ne l'a jamais vu prendre autant de temps pour construire une image. Quel environnement en ligne êtes-vous? –

+0

'requirements.txt' contient 69 lignes. 'pip' s'exécute rapidement et s'arrête en exécutant' setup.py' pour les pandas avant que la compilation échoue après 1h environ. J'utilise OpenShift Online 3 Starter pour avoir une idée de la taille de l'effort de portage. – Fabian

+0

Dans quelle instance de Starter vous êtes, us-east-1, us-west-1 ou autre? Certains ont été lents parfois. –

Répondre

5

Ça va être l'une des deux choses. Soit la compilation des Pandas est un gros problème de mémoire, peut-être causé par le fait que le compilateur a frappé un cas pathologique. Ou, la taille de l'image générée à ce moment dépasse une limite interne et manque donc d'espace disque alloué.

Si c'était de la mémoire, vous auriez besoin d'augmenter la mémoire allouée au module de compilation. Par défaut dans Online c'est 512Mi.

Pour augmenter la limite, vous devez modifier le YAML/JSON pour la configuration de construction à partir de la console Web ou à partir de la ligne de commande à l'aide de oc edit.

Pour YAML, vous devez ajouter ce qui suit:

resources: 
    limits: 
     memory: 1Gi 

Ce champ donne le:

$ oc explain bc.spec.resources.limits FIELD: limits <object> 

DESCRIPTION: 
    Limits describes the maximum amount of compute resources allowed. More 
    info: http://kubernetes.io/docs/user-guide/compute-resources/ 

Le maximum est 1GI. Il semble qu'une augmentation de cette valeur permette à la construction de se terminer, alors que l'augmenter à 768Mi n'était pas suffisant. Sachez que cela élimine la mémoire du quota pour compute-resources-timebound lors de l'exécution et qu'il l'utilise tout au long de la construction, tout ce que vous pouvez faire en même temps peut être bloqué.

FWIW, la taille de l'image sur une construction locale, et non en ligne, seulement produit:

172.30.1.1:5000/mysite/osv3test    latest    f323d9b036f6  About an hour ago 910MB 

Ainsi, à moins que l'espace intermédiaire utilisé avant que les choses ont été nettoyés était un problème, ce n'est pas un problème. Donc l'augmentation de la mémoire utilisée pour la construction semble être la réponse.

+0

Génial! Merci beaucoup, Graham, d'être allé jusqu'au bout! C'est la limite de la mémoire (et non la taille de l'image). La solution pour v2 était de supprimer manuellement le niveau d'optimisation pour gcc. Je suppose que le compilateur a besoin de ressources mémoire énormes pour optimiser ces grands fichiers c générés par ordinateur qui viennent avec les pandas. – Fabian

+1

S'il y a une roue binaire pour le paquet, vous pouvez aussi essayer d'ajouter un fichier '' .s2i/environment'' et y ajouter '' UPGRADE_PIP_TO_LATEST = 1''. Par défaut, la dernière version de '' pip'' n'est pas utilisée et l'ancienne version a quelques problèmes avec les roues binaires. Il est donc possible que s'il y a une roue, la nouvelle version de '' pip'' l'utilise et évite ainsi de devoir la compiler à partir du code source. –

+0

merci beaucoup. mais il est très cool de voir que pas de message d'erreur !!! – bhushya