En esta nueva entrega, vamos a ver cómo podemos crear un entorno para trabajar con el código fuente de Hadoop, para ello, instalaremos subversion en una zona que aislaremos del resto con el fin de no interferir en las configuraciones de nuestro cluster de hadoop. Puede que te resulte interesante leer el post de como configurar wget, ant y subversion con proxy
Creación de una Zona para la compilación
Vamos a crear una zona como hemos visto en mi anterior post de Gestión básica de Zonas, con una modificación. Los paquetes que vamos a instalar los obtendremos en formato binario desde Sun Freeware y éstos se instalan en /usr/local por lo tanto, vamos a hacer que nuestra zona no comparta el directorio /usr ya que sino, lo montará como sólo lectura y no podremos instalarlos, para ello, eliminaremos la propiedad inherit-pkg-dir con valor /usr
# zonecfg -z hadoop-svnUna vez creada y configurada la zona podemos comenzar con la instalación de los paquetes, para ello, los descargaremos desde SunFreeware
hadoop-svn: No se ha configurado esa zona
Use 'create' para comenzar a configurar una zona nueva.
zonecfg:hadoop-svn> create
zonecfg:hadoop-svn> remove inherit-pkg-dir dir=/usr
zonecfg:hadoop-svn> set scheduling-class=FSS
zonecfg:hadoop-svn> set autoboot=false
zonecfg:hadoop-svn> set zonepath=/opt/zones/hadoop-svn
zonecfg:hadoop-svn> add net
zonecfg:hadoop-svn: net> set physical=e1000g0
zonecfg:hadoop-svn: net> set address=10.1.1.7/24
zonecfg:hadoop-svn: net> set defrouter=10.1.1.254
zonecfg:hadoop-svn: net> end
zonecfg:hadoop-svn> verify
zonecfg:hadoop-svn> commit
zonecfg:hadoop-svn> exit
# zoneadm -z hadoop-svn install
....
# zoneadm -z hadoop-svn boot
Descargamos los paquetes
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libgcc-3.4.6-sol10-x86-local.gzDescomprimimos los paquetes
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libgcc-3.4.6-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/zlib-1.2.3-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/openldap-2.4.16-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libtool-1.5.24-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/openssl-0.9.8k-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/sasl-2.1.21-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/db-4.7.25.NC-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libintl-3.4.0-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libiconv-1.11-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libxml2-2.6.31-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/expat-2.0.1-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/swig-1.3.36-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/apache-2.0.59-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/apache-2.2.11-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/neon-0.28.3-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/subversion-1.6.2-sol10-x86-local.gz
$ gzip -d *.gzInstalamos los paquetes
# pkgadd -d libgcc-3.4.6-sol10-x86-localComprobar la Instalación
# pkgadd -d zlib-1.2.3-sol10-x86-local
# pkgadd -d openldap-2.4.16-sol10-x86-local
# pkgadd -d libtool-1.5.24-sol10-x86-local
# pkgadd -d openssl-0.9.8k-sol10-x86-local
# pkgadd -d sasl-2.1.21-sol10-x86-local
# pkgadd -d db-4.7.25.NC-sol10-x86-local
# pkgadd -d libintl-3.4.0-sol10-x86-local
# pkgadd -d libiconv-1.11-sol10-x86-local
# pkgadd -d libxml2-2.6.31-sol10-x86-local
# pkgadd -d expat-2.0.1-sol10-x86-local
# pkgadd -d swig-1.3.36-sol10-x86-local
# pkgadd -d apache-2.2.11-sol10-x86-local
# pkgadd -d neon-0.28.3-sol10-x86-local
# pkgadd -d subversion-1.6.2-sol10-x86-local
Debemos incluir el directorio /usr/local/bin en nuestro path, para ello, podemos modificar el profile de la siguiente forma
$ cat >~/.profile<A continuación, vamos a comprobar que todas las dependencias de svn están correctamente, para ello ejecutaremos el siguiente comando
##########################################################
# Developer Profile
##########################################################
# Common Home
ANT_HOME=/opt/ant
JAVA_HOME=/usr/java
HADOOP_HOME=/opt/hadoop
PATH=$ANT_HOME/bin:$PATH:$HADOOP_HOME/bin:/usr/sfw/bin:/usr/local/bin:/usr/ccs/bin:/usr/ucb
export PATH HADOOP_HOME JAVA_HOME ANT_HOME
# Simple Banner
banner Hadoop_Dev
MAIL=/usr/mail/${LOGNAME:?}
EOF
$ ldd $(which svn)Si por algún motivo nos faltase alguna, nos mostraría un mensaje (archivo no encontrado). A continuación se muestra un ejemplo de whoami sin una de su dependencia.
libsvn_client-1.so.0 => /usr/local/lib/libsvn_client-1.so.0
libsvn_wc-1.so.0 => /usr/local/lib/libsvn_wc-1.so.0
libsvn_ra-1.so.0 => /usr/local/lib/libsvn_ra-1.so.0
libsvn_diff-1.so.0 => /usr/local/lib/libsvn_diff-1.so.0
libsvn_ra_local-1.so.0 => /usr/local/lib/libsvn_ra_local-1.so.0
libsvn_repos-1.so.0 => /usr/local/lib/libsvn_repos-1.so.0
libsvn_fs-1.so.0 => /usr/local/lib/libsvn_fs-1.so.0
libsvn_fs_fs-1.so.0 => /usr/local/lib/libsvn_fs_fs-1.so.0
libsvn_fs_util-1.so.0 => /usr/local/lib/libsvn_fs_util-1.so.0
libsvn_ra_svn-1.so.0 => /usr/local/lib/libsvn_ra_svn-1.so.0
libsvn_ra_neon-1.so.0 => /usr/local/lib/libsvn_ra_neon-1.so.0
libsvn_ra_serf-1.so.0 => /usr/local/lib/libsvn_ra_serf-1.so.0
libserf-0.so.0 => /usr/local/lib/libserf-0.so.0
libm.so.2 => /usr/lib/libm.so.2
libsvn_delta-1.so.0 => /usr/local/lib/libsvn_delta-1.so.0
libsvn_subr-1.so.0 => /usr/local/lib/libsvn_subr-1.so.0
libaprutil-1.so.0 => /usr/local/apache2/lib/libaprutil-1.so.0
libldap-2.4.so.2 => /usr/local/lib/libldap-2.4.so.2
libsasl2.so.2 => /usr/local/lib/libsasl2.so.2
libgss.so.1 => /usr/lib/libgss.so.1
liblber-2.4.so.2 => /usr/local/lib/liblber-2.4.so.2
libresolv.so.2 => /usr/lib/libresolv.so.2
libgen.so.1 => /usr/lib/libgen.so.1
libapr-1.so.0 => /usr/local/apache2/lib/libapr-1.so.0
libuuid.so.1 => /usr/lib/libuuid.so.1
libsendfile.so.1 => /usr/lib/libsendfile.so.1
librt.so.1 => /usr/lib/librt.so.1
libpthread.so.1 => /usr/lib/libpthread.so.1
libneon.so.27 => /usr/local/lib/libneon.so.27
libz.so => /usr/local/lib/libz.so
libssl.so.0.9.8 => /usr/local/ssl/lib/libssl.so.0.9.8
libcrypto.so.0.9.8 => /usr/local/ssl/lib/libcrypto.so.0.9.8
libnsl.so.1 => /usr/lib/libnsl.so.1
libdl.so.1 => /usr/lib/libdl.so.1
libexpat.so.1 => /usr/local/lib/libexpat.so.1
libsocket.so.1 => /usr/lib/libsocket.so.1
libintl.so.8 => /usr/local/lib/libintl.so.8
libiconv.so.2 => /usr/local/lib/libiconv.so.2
libsec.so.1 => /usr/lib/libsec.so.1
libc.so.1 => /usr/lib/libc.so.1
libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1
libcmd.so.1 => /lib/libcmd.so.1
libaio.so.1 => /lib/libaio.so.1
libmd.so.1 => /lib/libmd.so.1
libmp.so.2 => /lib/libmp.so.2
libscf.so.1 => /lib/libscf.so.1
libavl.so.1 => /lib/libavl.so.1
libdoor.so.1 => /lib/libdoor.so.1
libuutil.so.1 => /lib/libuutil.so.1
# ldd /usr/local/bin/whoami
libintl.so.8 => (archivo no encontrado)
libc.so.1 => /usr/lib/libc.so.1
libm.so.2 => /lib/libm.so.2
/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1
Requisitos Especiales
Para una correcta compilación de hadoop sobre Solaris, tenemos que tener en cuenta algunos requisitos como son el hecho de que hadoop asume que whoami se encuentra en el path, como he comentado en el post anterior, además también asume que md5sum existe y está accesible, por lo tanto, vamos a hacer algunos cambios en nuestra instalación para que todo funcione correctamente.
1.- Instalaremos el paquete md5 desde SunFreeware
$ wget ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/md5-6142000-sol10-intel-local.gz2.- Crearemos un link desde md5 a md5sum ya que el paquete no lo crea
$ gzip -d md5-6142000-sol10-intel-local.gz
$ su -
password
# pkgadd -d md5-6142000-sol10-intel-local.gz
# cd /usr/local/bin3.- Introduciremos el directorio /usr/ucb en el path del usuario si no lo tenemos hecho ya
# ln md5 md5sum
4.- Instalaremos la versión 1.7 de Apache ant
# cd /opt
# /usr/sfw/bin/wget http://apache.inetbridge.net/ant/binaries/apache-ant-1.7.1-bin.tar.gz
# /usr/sfw/bin/gtar zxvpf apache-ant-1.7.1-bin.tar.gz
# mv apache-ant-1.7.1 ant
# rm apache-ant-1.7.1-bin.tar.gz
Pondremos las variables de entorno ANT_HOME e introduciremos $ANT_HOME/bin en el path para que lo encuentre (esto está puesto en el profile de ejemplo) y con esto, ya tenemos el entorno preparado para poder hacer un checkout del proyecto Hadoop
CheckOut del Proyecto
Vamos a crear un directorio hadoop-source en el cual haremos el checkout de hadoop, para ello, realizaremos los siguientes pasos
$ mkdir ~/hadoop-sourceCon esto ya podemos comenzar a probar el código fuente de hadoop, hacer parches, etc.
$ cd ~/hadoop-source
$ svn checkout http://svn.apache.org/repos/asf/hadoop/common/trunk/ hadoop-common-trunk
Conclusiones
Hemos visto cómo instalar subversion desde SunFreeware utilizando los paquetes en formato binario, además, hemos modificado el profile para incluir el famoso whoami en el path para que hadoop lo encuentre. Además, hemos incluido md5sum ya que también es necesario para la compilación de hadoop
Espero no haberos aburrido con este lago post y en los próximos veremos cómo trabajar con subversion para hacer parches y subirlos al source de hadoop
Referencias
No hay comentarios:
Publicar un comentario