IntroducciónEn 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 proxyCreación de una Zona para la compilaciónVamos 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-svn
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
Una vez creada y configurada la zona podemos comenzar con la instalación de los paquetes, para ello, los descargaremos desde SunFreeware
Descargamos 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/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
Descomprimimos los paquetes$ gzip -d *.gz
Instalamos los paquetes# pkgadd -d libgcc-3.4.6-sol10-x86-local
# 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
Comprobar la InstalaciónDebemos incluir el directorio
/usr/local/bin en nuestro
path, para ello, podemos modificar el
profile de la siguiente forma
$ cat >~/.profile<
##########################################################
# 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
A continuación, vamos a comprobar que todas las dependencias de
svn están correctamente, para ello ejecutaremos el siguiente comando
$ ldd $(which svn)
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
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.
# 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 EspecialesPara 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.gz
$ gzip -d md5-6142000-sol10-intel-local.gz
$ su -
password
# pkgadd -d md5-6142000-sol10-intel-local.gz
2.- Crearemos un
link desde
md5 a
md5sum ya que el paquete no lo crea
# cd /usr/local/bin
# ln md5 md5sum
3.- Introduciremos el directorio
/usr/ucb en el
path del usuario si no lo tenemos hecho ya
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 ProyectoVamos a crear un directorio
hadoop-source en el cual haremos el
checkout de
hadoop, para ello, realizaremos los siguientes pasos
$ mkdir ~/hadoop-source
$ cd ~/hadoop-source
$ svn checkout http://svn.apache.org/repos/asf/hadoop/common/trunk/ hadoop-common-trunk
Con esto ya podemos comenzar a
probar el código fuente de
hadoop, hacer parches, etc.
ConclusionesHemos 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