2012-01-27 9 views
6

Tengo un programa en C++ que estoy tratando de ejecutar como un trabajo de transmisión en hadoop (solo tiene mapeadores, sin reductores). Mientras que un simple programa de C++ funciona correctamente. Otro programa C++ que enlaza con muchas bibliotecas compartidas no está funcionando en la grilla. LDD en este programa en C++ muestra lo siguiente: (se utiliza gran cantidad de bibliotecas de terceros como OpenCV y boost_serialization)streaming de programas en C++ y bibliotecas compartidas

/usr/local/lib/libboost_serialization.so.1.48.0 /usr/local/lib/libfftw3f.so.3 /usr/local/lib/libconfig++.so.9 /usr/local/lib/liblog4cpp.so.4 /usr/local/lib/libopencv_core.so.2.3 /usr/local/lib/libopencv_contrib.so.2.3 

Creo que debido a estas bibliotecas compartidas no están instalados en datos-nodos, su fracaso. Traté de poner estas bibliotecas en un tarball y especifiqué esto al trabajo de transmisión utilizando la opción -archivos (caché distribuida). Esto tampoco funcionó (no estoy seguro de si los contenidos de tarball se instalaron en el directorio apropiado en data-nodes).

¿Alguna idea de cómo hacerlo?

+0

ha resuelto este problema. – sunillp

+5

para futuras personas que googleen esto, ¡POR FAVOR, comparta con nosotros su solución! –

+1

En realidad todo estaba bien. Incluí todas las bibliotecas de terceros que mi aplicación utilizaba como tarball y las puse a disposición de todos los nodos de datos usando la opción de transmisión de archivos. El problema era que de alguna manera el hadoop/MR estaba creando dos mapeadores, mientras que yo estaba proporcionando solo un archivo como entrada. De modo que se generaron dos archivos de salida, uno con el tamaño cero y el otro con los datos esperados. Lo descubrí mirando los registros. Luego hice un gzip del archivo de entrada único y lo usé para la transmisión. Después de esto, las cosas funcionaron bien. Tengo un solo archivo de salida. – sunillp

Respuesta

0

Compila tu programa C++ estáticamente. Básicamente:

g++ -o <progra> -static <object-files> 

Esto producirá un binario que no tiene dependencias. Será voluminoso (ejecute strip en él) pero si funciona continuamente no debería tener un problema.

Cuestiones relacionadas