Diferencia entre revisiones de «Hadoop»

De Ardemans Wiki
Saltar a: navegación, buscar
(Instalación)
(Enlaces de interes)
 
(9 revisiones intermedias por el mismo usuario no mostrado)
Línea 3: Línea 3:
 
== Enlaces de interes ==
 
== Enlaces de interes ==
 
* [http://hadoop.apache.org/ Página oficial]
 
* [http://hadoop.apache.org/ Página oficial]
 +
* [http://developer.yahoo.com/hadoop/tutorial/module2.html Un tutorial interesante]
 +
* [http://allthingshadoop.com/2010/04/28/map-reduce-tips-tricks-your-first-real-cluster/ tips & tricks de Mapreduce]
 +
* [http://www.cloudera.com/hadoop/ Cloudera]
 +
* [http://nosql.mypopescu.com/post/1541593207/quick-reference-hadoop-tools-ecosystem Quick Reference: Hadoop Tools Ecosystem]
 +
* [http://hadoop.apache.org/docs/r0.20.2/hod_admin_guide.html HOD]: Sistema para provisionar y administrar nodos map/reduce y nodos hdfs
 +
* Enlace con información sobre como mejorar el rendimiento [http://es.scribd.com/doc/23046928/Hadoop-Performance-Tuning aqui]
  
 
= Instalación =
 
= Instalación =
Línea 23: Línea 29:
  
 
== Configuración previa ==
 
== Configuración previa ==
 +
=== Home de Java ===
 
Antes de arrancar nada, nada más instalar el rpm, editamos el fichero /etc/hadoop/hadoop-env.sh. Comprobamos que hace un export a la ubicación de java correcta (/opt/java)
 
Antes de arrancar nada, nada más instalar el rpm, editamos el fichero /etc/hadoop/hadoop-env.sh. Comprobamos que hace un export a la ubicación de java correcta (/opt/java)
 +
=== Uso maximo de memoria java ===
 +
Para cambiar el límite de memoria que puede usar el proceso java de hadoop hay que cambiar la variable de HADOOP_OPTS del fichero de configuración /etc/hadoop/hadoop-env.sh
 +
<pre>
 +
export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true -Xmx2048m $HADOOP_CLIENT_OPTS"
 +
</pre>
  
 
Si ejecutamos '''/usr/bin/hadoop''', nos dará información de como arrancar el proceso de hadoop.
 
Si ejecutamos '''/usr/bin/hadoop''', nos dará información de como arrancar el proceso de hadoop.
 +
 +
== Configuración pseudo-distribuida ==
 +
Segun la [http://hadoop.apache.org/common/docs/stable/single_node_setup.html página de documentación de hadoop]
 +
La configuración que hay que realizar para el modo de distribuido en un solo nodo es la siguiente:
 +
conf/core-site.xml:
 +
<pre>
 +
<configuration>
 +
    <property>
 +
        <name>fs.default.name</name>
 +
        <value>hdfs://localhost:9000</value>
 +
    </property>
 +
</configuration>
 +
</pre>
 +
conf/hdfs-site.xml:
 +
<pre>
 +
<configuration>
 +
    <property>
 +
        <name>dfs.replication</name>
 +
        <value>1</value>
 +
    </property>
 +
</configuration>
 +
</pre>
 +
conf/mapred-site.xml:
 +
<pre>
 +
<configuration>
 +
    <property>
 +
        <name>mapred.job.tracker</name>
 +
        <value>localhost:9001</value>
 +
    </property>
 +
</configuration>
 +
</pre>
 +
 +
Sin embargo yo lo he hecho de la siguiente forma, lanzando unos scripts de configuración que hay en esta versión rpm de centos.
 +
 +
En primer lugar lanzamos el script de configuración de hadoop:
 +
<pre>
 +
# hadoop-setup-conf.sh
 +
</pre>
 +
En el que pregunta varios datos de ubicación de ficheros de configuración o donde va a ir el repositorio de datos de hdfs, donde va el pid, etc
 +
 +
Al terminal este script de configuración dice que hay que ejecutar el de configuracion de hdfs, pero antes de eso le vamos a dar formato.
 +
 +
Para ello, como usuario hdfs, ejecutamos el comando:
 +
<pre>
 +
# hadoop namenode -format
 +
</pre>
 +
 +
Después podemos volver al usuario root y ejecutamos la configuracion de hdfs
 +
<pre>
 +
# hadoop-setup-hdfs.sh
 +
</pre>
 +
esto generará varios directorios dentro del dfs. Al finalizar nos sugiere que arranquemos el servicio datanode
 +
<pre>
 +
# /etc/init.d/hadoop-datanode start
 +
</pre>
 +
 +
Ahora nos queda por arrancar los servicios jobtracker y tasktracker. El primero lo arrancamos de la siguiente forma:
 +
<pre>
 +
# /etc/init.d/hadoop-jobtracker start
 +
</pre>
 +
Para el tasktracker antes tendremos que crear el directorio de trabajo de este en local, para lo cual creamos el directorio /var/lib/hadoop/mapred y le damos permisos para el usuario mapred.hadoop
 +
<pre>
 +
mkdir /var/log/hadoop/mapred
 +
chown mapred.hadoop /var/log/hadoop/mapred
 +
</pre>
 +
y entonces podremos arrancar el servicio:
 +
<pre>
 +
# /etc/init.d/tasktracker start
 +
</pre>
  
 
== Configuración distribuida ==
 
== Configuración distribuida ==
(falta... lo guapo)
+
Para la configuración distribuida he cambiado el tipo de instalación de hadoop, y he pasado a bajarme directamente los binarios de la web de hadoop.  
 +
 
 +
He descomprimido directamente los binarios de hadoop en /opt/hadoop-1.0.4 y creado un enlace en /opt/hadoop. Después, he añadido las configuraciones de hadoop:
 +
 
 +
/opt/hadoop/conf/core-site.xml
 +
 
 +
<pre>
 +
<configuration>
 +
  <property>
 +
      <name>fs.default.name</name>
 +
      <value>hdfs://shadoop1.prisadigital.int:8020</value>
 +
  </property>
 +
</configuration>
 +
</pre>
 +
 
 +
/opt/hadoop/conf/hdfs-site.xml
 +
 
 +
<pre>
 +
<configuration>
 +
  <property>
 +
      <name>dfs.name.dir</name>
 +
      <value>/srv/content/hadoop/hdfs/namenode</value>
 +
  </property>
 +
 
 +
  <property>
 +
      <name>dfs.data.dir</name>
 +
      <value>/srv/content/hadoop/hdfs/datanode</value>
 +
  </property>
 +
 
 +
  <property>
 +
    <name>dfs.replication</name>
 +
    <value>1</value>
 +
  </property>
 +
 
 +
</configuration>
 +
</pre>
 +
 
 +
Ojo, en esta configuración tengo puesta la replicación a un solo grado, ya que en mis dos servidroes de prueba tengo problemas de espacio para las pruebas que tengo que realizar, y no quiero que haya replicacion.
 +
 
 +
/opt/hadoop/conf/mapred-site.xml
 +
 
 +
<pre>
 +
<configuration>
 +
  <property>
 +
      <name>mapred.job.tracker</name>
 +
      <value>shadoop1.prisadigital.int:9000</value>
 +
  </property>
 +
 
 +
  <property>
 +
      <name>mapred.system.dir</name>
 +
      <value>/hadoop/mapred/system/</value>
 +
  </property>
 +
 
 +
  <property>
 +
      <name>mapred.local.dir</name>
 +
      <value>/srv/content/hadoop/mapred</value>
 +
  </property>
 +
 
 +
  <property>
 +
      <name>mapred.tasktracker.map.tasks.maximum</name>
 +
      <value>2</value>
 +
  </property>
 +
 
 +
  <property>
 +
      <name>mapred.tasktracker.reduce.tasks.maximum</name>
 +
      <value>2</value>
 +
  </property>
 +
 
 +
  <property>
 +
      <name>mapred.queue.names</name>
 +
      <value>default</value>
 +
  </property>
 +
 
 +
  <property>
 +
      <name>mapred.acls.enabled</name>
 +
      <value>true</value>
 +
  </property>
 +
 
 +
  <property>
 +
      <name>mapred.child.java.opts</name>
 +
      <value>-Xmx512M</value>
 +
  </property>
 +
 
 +
</configuration>
 +
</pre>
 +
 
 +
Estos ficheros de configuración son comunes a todos los nodos, independientemente que que vayamos a arrancar cualquiera de los servicios de hadoop.
 +
 
 +
He optado por ponerlo de esta forma ya que incluye una serie de scripts que es capaz de levantarte toda la plataforma con solo un comando. Se conecta por SSH a los nodos esclavos para levantar solo los servicios datanode y tasktracker.
 +
 
 +
Para hacer esto busca las máquinas asociadas en /opt/hadoop/conf/slaves.
 +
 
 +
Además si queremos que levante un name node secundario podremos añadirlo en /opt/hadoop/conf/masters
  
 
== Instalación de PIG ==
 
== Instalación de PIG ==
 
La instalación de pig es muy sencilla en Centos. Nos hemos bajado la versión estable desde esta [http://pig.apache.org/releases.html página] como rpm  en /opt/src/ y después lo hemos instalado con '''rpm -i pig-0.10.0-1.i386.rpm'''
 
La instalación de pig es muy sencilla en Centos. Nos hemos bajado la versión estable desde esta [http://pig.apache.org/releases.html página] como rpm  en /opt/src/ y después lo hemos instalado con '''rpm -i pig-0.10.0-1.i386.rpm'''

Última revisión de 18:20 15 ene 2013

Introducción

Documento con apuntes sobre mi investigación sobre que es hadoop y como instalarlo. Viene de la necesidad en mi curro de instalar un sistema de procesado distribuido de ciertos ficheros de log.

Enlaces de interes

Instalación

Preparación

Antes de nada he tenido que instalar Java 1.6.x (segun la documentación, preferiblemente desde SUN). Para descargarlo desde esta página. Me lo he descargado a /opt/src, y después lo he ejecutado poniendo sh /opt/src/jre-6u33-linux-x64.bin. Esto descomprime el binario y lo deja en /opt/src/jre1.6.0_33 y yo lo he movido a /opt/jre1.6.0_33. Además creo un enlace dentro del propio /opt con ln -s /opt/jre1.6.0_33 java.

Tambien he añadido al fichero /root/.bashrc las siguientes líneas

export JAVA_HOME=/opt/java
export PATH=$PATH:$JAVA_HOME/bin

Comprobamos que tenemos el paquete ssh y sshd en el servidor

Descarga

Nos descargamos el hadoop. Para ello vamos a esta página para descargarnos la versión estable actual.

En primer lugar me he bajado la versión estable en RPM para 64 bits. Me la he descargado en el directorio /opt/src. Después lo he instalado con rpm: rpm -i hadoop-1.0.3-1.x86_64.rpm

Configuración previa

Home de Java

Antes de arrancar nada, nada más instalar el rpm, editamos el fichero /etc/hadoop/hadoop-env.sh. Comprobamos que hace un export a la ubicación de java correcta (/opt/java)

Uso maximo de memoria java

Para cambiar el límite de memoria que puede usar el proceso java de hadoop hay que cambiar la variable de HADOOP_OPTS del fichero de configuración /etc/hadoop/hadoop-env.sh

export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true -Xmx2048m $HADOOP_CLIENT_OPTS"

Si ejecutamos /usr/bin/hadoop, nos dará información de como arrancar el proceso de hadoop.

Configuración pseudo-distribuida

Segun la página de documentación de hadoop La configuración que hay que realizar para el modo de distribuido en un solo nodo es la siguiente: conf/core-site.xml:

<configuration>
     <property>
         <name>fs.default.name</name>
         <value>hdfs://localhost:9000</value>
     </property>
</configuration>

conf/hdfs-site.xml:

<configuration>
     <property>
         <name>dfs.replication</name>
         <value>1</value>
     </property>
</configuration>

conf/mapred-site.xml:

<configuration>
     <property>
         <name>mapred.job.tracker</name>
         <value>localhost:9001</value>
     </property>
</configuration>

Sin embargo yo lo he hecho de la siguiente forma, lanzando unos scripts de configuración que hay en esta versión rpm de centos.

En primer lugar lanzamos el script de configuración de hadoop:

# hadoop-setup-conf.sh

En el que pregunta varios datos de ubicación de ficheros de configuración o donde va a ir el repositorio de datos de hdfs, donde va el pid, etc

Al terminal este script de configuración dice que hay que ejecutar el de configuracion de hdfs, pero antes de eso le vamos a dar formato.

Para ello, como usuario hdfs, ejecutamos el comando:

# hadoop namenode -format

Después podemos volver al usuario root y ejecutamos la configuracion de hdfs

# hadoop-setup-hdfs.sh

esto generará varios directorios dentro del dfs. Al finalizar nos sugiere que arranquemos el servicio datanode

# /etc/init.d/hadoop-datanode start

Ahora nos queda por arrancar los servicios jobtracker y tasktracker. El primero lo arrancamos de la siguiente forma:

# /etc/init.d/hadoop-jobtracker start

Para el tasktracker antes tendremos que crear el directorio de trabajo de este en local, para lo cual creamos el directorio /var/lib/hadoop/mapred y le damos permisos para el usuario mapred.hadoop

mkdir /var/log/hadoop/mapred
chown mapred.hadoop /var/log/hadoop/mapred

y entonces podremos arrancar el servicio:

# /etc/init.d/tasktracker start

Configuración distribuida

Para la configuración distribuida he cambiado el tipo de instalación de hadoop, y he pasado a bajarme directamente los binarios de la web de hadoop.

He descomprimido directamente los binarios de hadoop en /opt/hadoop-1.0.4 y creado un enlace en /opt/hadoop. Después, he añadido las configuraciones de hadoop:

/opt/hadoop/conf/core-site.xml

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://shadoop1.prisadigital.int:8020</value>
   </property>
</configuration>

/opt/hadoop/conf/hdfs-site.xml

<configuration>
   <property>
      <name>dfs.name.dir</name>
      <value>/srv/content/hadoop/hdfs/namenode</value>
   </property>

   <property>
      <name>dfs.data.dir</name>
      <value>/srv/content/hadoop/hdfs/datanode</value>
   </property>

  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>

</configuration>

Ojo, en esta configuración tengo puesta la replicación a un solo grado, ya que en mis dos servidroes de prueba tengo problemas de espacio para las pruebas que tengo que realizar, y no quiero que haya replicacion.

/opt/hadoop/conf/mapred-site.xml

<configuration>
   <property>
      <name>mapred.job.tracker</name>
      <value>shadoop1.prisadigital.int:9000</value>
   </property>

   <property>
      <name>mapred.system.dir</name>
      <value>/hadoop/mapred/system/</value>
   </property>

   <property>
      <name>mapred.local.dir</name>
      <value>/srv/content/hadoop/mapred</value>
   </property>

   <property>
      <name>mapred.tasktracker.map.tasks.maximum</name>
      <value>2</value>
   </property>

   <property>
      <name>mapred.tasktracker.reduce.tasks.maximum</name>
      <value>2</value>
   </property>

   <property>
      <name>mapred.queue.names</name>
      <value>default</value>
   </property>

   <property>
      <name>mapred.acls.enabled</name>
      <value>true</value>
   </property>

   <property>
      <name>mapred.child.java.opts</name>
      <value>-Xmx512M</value>
   </property>

</configuration>

Estos ficheros de configuración son comunes a todos los nodos, independientemente que que vayamos a arrancar cualquiera de los servicios de hadoop.

He optado por ponerlo de esta forma ya que incluye una serie de scripts que es capaz de levantarte toda la plataforma con solo un comando. Se conecta por SSH a los nodos esclavos para levantar solo los servicios datanode y tasktracker.

Para hacer esto busca las máquinas asociadas en /opt/hadoop/conf/slaves.

Además si queremos que levante un name node secundario podremos añadirlo en /opt/hadoop/conf/masters

Instalación de PIG

La instalación de pig es muy sencilla en Centos. Nos hemos bajado la versión estable desde esta página como rpm en /opt/src/ y después lo hemos instalado con rpm -i pig-0.10.0-1.i386.rpm