2016-01-25 Numpy, Hadoop, PIG, Java

Le fait qu’on puisse utiliser des scripts Python dans un script PIG est un peu trompeur. De là à penser que la librairie numpy serait utilisable… Tout d’abord, les versions officielles de numpy et Python sont implémentaires en C voire un peu de Fortran et Hadoop / PIG est implémenté en java qui a l’avantage de bénéficier d’un garbage collector contrairement au langage C. Ceci explique que la version de Python utilisée par PIG pour définir des UDF (User Defined Function) est Jython. Utiliser numpy dans une fonction UDF n’est pas simple. La première direction consiste à utiliser une version java de numpy :

  • JyNI: JyNI is a compatibility layer with the goal to enable Jython to use native CPython extensions like NumPy or SciPy.

  • jep: Jep embeds CPython in Java through JNI and is safe to use in a heavily threaded environment.

Deuxième direction, utiliser le streaming en ligne de commande. Le script écrit en Python recevra du texte, devra le parser pour former les matrices dont il a besoin, faire son calcul, et sortir la matrice résultante sous forme de texte.

Dans les deux cas, les scripts ont besoin de dépendences pour s’exécuter. Il faut soit que ces dépndences soient disponibles sur chaque machine du cluster Hadoop, soit qu’elles soient référencées dans le script PIG lui-même afin qu’elles soient distribuées sur chaque machine.