¿Qué es Apache Spark?
Spark es un motor para analítica de datos open source hecho como un framework de Scala y que pertenece al ecosistema de Hadoop, entre otras cosas, por hacer uso del HDFS (Hadoop Distributed File System).
Algunas de sus principales virtudes son que resulta mas fácil de usar que Hadoop MapReduce así como puede resultar computacionalmente mucho mas rápido en ciertos casos.
Su principal característica diferenciadora si lo comparamos con Hadoop MapReduce es que Spark realiza los cálculos en "in-memory" para alcanzar esas velocidades de cómputo superiores hasta 100 veces mas rápido que Hadoop MapReduce en memoria y hasta 10 veces mas rápido en disco.
Instalación
Lo primero será descargar Apache Spark desde la web oficial: http://spark.apache.org/ Para el propósito de este tutorial, y para guardar relación con el resto de tutoriales que usan Hadoop 1.2.1, vamos a descargar la versión binaria para Hadoop 1, escrito en la sección de descargas como "Download binaries for Hadoop 1 (HDP1, CDH3)"
Una vez descargado, extraemos y entramos en el directorio de se acaba de crear (opcional: vamos también a cambiar el nombre de la carpeta a simplemente "spark" para mejor legibilidad) Nosotros vamos a descargarlo e instalarlo en $HOME/spark
wget http://d3kbcqa49mib13.cloudfront.net/spark-0.9.1-bin-hadoop1.tgz tar -zxvf spark-0.9.1-bin-hadoop1.tgz mv spark-0.9.1-bin-hadoop1.tgz spark-0.9.1-bin-hadoop1 spark cd spark pwd /home/ubuntu/spark
Bien, ahora vamos a exportar tanto la carpeta bin dentro de la instalación como el home de Spark y también vamos a compilar y ensamblar el paquete:
# Exportar directorios export PATH=$PATH:$HOME/spark/bin export SPARK_HOME=$HOME/spark # Compilar y ensamblar sbt/sbt clean compile sbt/sbt assembly # OPCIONAL: Agregar SPARK_HOME a nuestro ~/.bashrc o similar echo 'export SPARK_HOME=$HOME/spark' >> ~/.bashrc
NOTA: Para agregar la ruta de spark/bin al PATH lo mas facil y seguro es abrir directamente el ~/.bashrc con un editor de textos y buscar la linea donde pone "export $PATH". Ahora tendremos que ejecutar nuestro cluster de Hadoop en modo pseudo-distribuido o distribuido (real). Si aun no sabes como montar un cluster de Hadoop con HDFS, que es en realidad lo que va a usar Spark, aquí puedes encontrar un gran tutorial al respecto: Instalando Hadoop en modo pseudo-distribuido
# Arrancar todos los procesos de Hadoop $HADOOP_INSTALL/bin/start-all.sh
Primeras pruebas
Una vez tengamos todos los procesos corriendo: NameNode, SecondaryNameNode, JobTracker (para el nodo master) y TaskTracker y DataNode (para los esclavos o workers), ya podemos ejecutar Spark. Aun así, vamos a comprobar la correcta instalación de Spark iniciando uno de los ejemplos que vienen. Para ello nos vamos a la raiz donde hemos instalado spark (en nuestro caso $HOME/spark) y ejecutamos:bin/run-example org.apachebin/run-example org.apache.spark.examples.SparkPi local 50
El resultado, como suele ser habitual, contiene un montón de mensajes de log. Veremos ir pasando cada una de las 50 iteraciones pero, en algún punto ya al final, aparecerá algo como:
El siguiente paso es escribir nuestro ya famoso contador de palabras. En Spark se puede Scala, Java y Python. Para este tutorial vamos a usar Scala ya que es el lenguaje "nativo" para Spark y es el que más funcionalidades soporta. Mas adelante haŕe algún ejemplo también en Python.
Pi is roughly 3.1419392Lo cual nos indica el éxito de la operación.
El siguiente paso es escribir nuestro ya famoso contador de palabras. En Spark se puede Scala, Java y Python. Para este tutorial vamos a usar Scala ya que es el lenguaje "nativo" para Spark y es el que más funcionalidades soporta. Mas adelante haŕe algún ejemplo también en Python.
import org.apache.spark.{SparkContext, SparkConf} object WordCount { def main(args: Array[String]) { val conf = new SparkConf(true) conf.setAppName("cassandra-example-hello") conf.setMaster("local") val spark = new SparkContext(conf) val textFile = spark.textFile("/tmp/test") val counts = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) counts.saveAsTextFile("/tmp/testResult") } } #Resultado res10: Array[(String, Int)] = Array((y,1), (palabras,1), (a,2), (este,1), (Spark,1), (de,2), (contar,1), (usar,1), (capacidades,1), (las,2), (fichero.,1), (Vamos,2), (HDFS,1)) # Opcional: Guardar los contenidos del resultado en el disco reducer.saveAsTextFile("results")
Espero que os haya gustado el tutorial. Los próximos tutoriales sobre Spark estarán orientado a la escritura de scripts, el uso de la API de Python y Java, al uso de HDFS y al uso de Apache Shark
0 comentarios:
Publicar un comentario