Tutorial Apache Hadoop#
El proyecto Apache™ Hadoop® desarrolla software de código abierto para computación distribuida, escalable y confiable.
Extraído de: https://hadoop.apache.org/.
Apache Hadoop es un framework para el procesamiento distribuido de grandes conjuntos de datos en grupos de computadoras que utilizan modelos de programación simples.
Diseñado para escalar desde servidores individuales a miles de máquinas, cada una de las cuales ofrece computación y almacenamiento locales.
En lugar de depender del hardware para brindar alta disponibilidad, la biblioteca en sí está diseñada para detectar y manejar fallas en la capa de la aplicación, por lo que brinda un servicio de alta disponibilidad sobre un grupo de computadoras, cada una de las cuales puede ser propensa a fallas.
Configuración inicial#
La máquina virtual con Hadoop instalado se descarga de:
Se puede acceder a la información sobre la configuración predeterminada de la máquina virtual de Bitnami en:
https://docs.bitnami.com/virtual-machine/apps/hadoop/get-started/understand-default-config/.
Una vez instalado Apache Hadoop se deberán abrir los puertos del servidor para los distintos servicios web del framework.
sudo ufw allow 8042, 8088, 8188, 19888, 9780, 9868, 9864, 10002 proto tcp
Cell In[1], line 1
sudo ufw allow 8042, 8088, 8188, 19888, 9780, 9868, 9864, 10002 proto tcp
^
SyntaxError: invalid syntax
Mostrar el estado de los servicios
sudo /opt/bitnami/ctlscript.sh status
Iniciar un servicio
sudo /opt/bitnami/ctlscript.sh start
Reiniciar un servicio
sudo /opt/bitnami/ctlscript.sh restart apache
Detener todos los servicios
sudo /opt/bitnami/ctlscript.sh stop
Ejecutar tareas de pruebas en Hadoop#
Ejecutar una tarea (job) de test en Hadoop con mapreduce
Este ejemplo obtiene una estimación del número PI
hadoop jar /opt/bitnami/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 10 100
Ejecutar una tarea con mapreduce involucrando a HDFS
Este ejemplo cuenta la cantidad de palabras y letras c que aparecen en el texto
echo "A Cuesta le cuesta subir la cuesta y en medio de la cuesta va y se acuesta." | \
hadoop fs -put - /tmp/hdfs-ejemplo-input
hadoop jar /opt/bitnami/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \
grep /tmp/hdfs-ejemplo-input /tmp/hdfs-ejemplo-output 'c*'
hadoop fs -cat /tmp/hdfs-ejemplo-output/part-r-00000
Apache Hive#
Para conectarse a Hive a través de la interfaz web:
Para conectarse a Hive a través de un túnel SSH:
beeline -u jdbc:hive2://localhost:10000 -n hadoop
Acceder a la información básica
help
Crear una base de datos
show databases;
show tables;
CREATE DATABASE basededatos; # También se puede usar la orden CREATE SCHEMA
También se puede utilizar JDBC para crear una base de datos.
El script se guarda en un fichero llamado HiveCreateDb.java con el siguiente código:
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveCreateDb {
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
// Register driver and create driver instance
Class.forName(driverName);
// get connection
Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");
Statement stmt = con.createStatement();
stmt.executeQuery("CREATE DATABASE basededatos");
System.out.println(“Base de datos creada exitosamente.”);
con.close();
}
}
Para compilar y ejecutar el programa:
javac HiveCreateDb.java
java HiveCreateDb
Documentación: https://cwiki.apache.org/confluence/display/Hive/GettingStarted
Apache Spark#
Abrir el puerto 4040
sudo ufw allow 4040
Crear el fichero a analizar
vim entrada.txt
Entrar a la shell de spark
spark-shell
:help
Crear el RDD para el fichero entrada.txt
val inputfile = sc.textFile("entrada.txt")
Contar las palabras:
val counts = inputfile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_+_);
Mostrar para tareas de debugging el RDD
counts.toDebugString
Guardar en memoria
counts.cache()
Guardar la salida en un fichero
val outputfile = sc.textFile("salida.txt")
Almacenamiento no persistente de RDD
counts.unpersist()