Siguiendo con los posts anteriores (I,
II)
relacionados con el laboratorio de hadoop 2, el
primer post dejé un warning en el arranque de hdfs sin resolver. El
warning está relacionado con el uso de librerías nativas del sistema
operativo para los procesos de compresión y descompresión. Parece que
estos procesos realizados por medio de código java son un 40% más
lentos que si los realizan los comandos nativos del sistema operativo.
Así que hemos montado el laboratiorio para que haga uso de esas
librerías nativas. Para ello hemos tenido que recompilar el producto
para poder generar unas librerías .so y .a que hacen de pasarela
(supongo que por JNI), a las librerías nativas. Hadoop al arrancar las
detecta y las carga en vez de cargar las implementaciones nativas 100% java.
Los pasos han sido los siguientes:
- Instalar las dependencias necesarias (usamos ubuntu)
>>>sudo aptitude install zlib1g zlib1g-dbg
zlib1g-dev zlibc libssl-dev lbzip2 libzip-dev libzip2 pbzip2
- Instalamos las dependencias para poder compilar con make, maven etc.
>>>sudo apt-get install build-essential
>>>sudo apt-get install g++ autoconf
automake libtool cmake zlib1g-dev pkg-config libssl-dev
>>>sudo apt-get install maven
- descargamos protobuf y lo compilamos
>>>wget https://protobuf.googlecode.com/svn/rc/protobuf-2.5.0.tar.gz
>>>tar xzf protobuf-2.5.0.tar.gz
>>>cd protobuf-2.5.0
>>>./configure
>>>make
>>>sudo make install
>>>sudo ldconfig
- descargamos el código fuente de hadoop.-2.5.0 y lo compilamos con maven
>>>mvn package -Pdist,native -DskipTests -Dtar
Ahora ya podemos usar las nuevea libs para arquitecturas
iguales, cada nodo de arquitectura distinta… a recompilar.
Y ya no sale el warning en el arranque de hdfs
WARN util.NativeCodeLoader: Unable to load native-hadoop
library for your platform… using builtin-java classes where applicable