.. blogpost::
:title: Numpy, Hadoop, PIG, Java
:keywords: Map Reduce, Java, PIG, Hadoop, JyNI, Jep
:date: 2016-01-25
:categories: Hadoop
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.