lunes, mayo 05, 2014

Primeros pasos con Hive. Oootro contador de palabras

Descargando e instalando Hive

  1. Página web oficial: http://hive.apache.org/
  2. Site de releases: http://www.apache.org/dyn/closer.cgi/hive/
  3. Release que vamos a usar: http://ftp.cixug.es/apache/hive/hive-0.13.0/apache-hive-0.13.0-bin.tar.gz
Lo primero descargar y ejecutar la release que queramos usar:

wget 'http://ftp.cixug.es/apache/hive/hive-0.13.0/apache-hive-0.13.0-bin.tar.gz'
tar -zxvf apache-hive-0.13.0-bin.tar.gz
cd apache-hive-0.13.0-bin/bin
export HIVE_HOME=$HOME/apache-hive-q0.13.0-bin
export PATH=$PATH:$HIVE_HOME/bin

Arrancando el cluster de Hadoop

Hive necesita al menos Hadoop 1.2.1 corriendo para funcionar. Si no sabes como instalar Hadoop aún te recomiendo que te pases por el tutorial Instalando Hadoop en modo pseudo-distribuido (local)

Una vez tengamos el cluster corriendo, Hive necesita de dos carpetas dentro del HDFS con permisos de grupo para poder funcionar, para crear esas carpetas y darles los permisos necesarios ejecutaremos las órdenes siguientes:
hadoop fs -mkdir /user
hadoop fs -mkdir /user/hive
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -mkdir /tmp
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+x /user/hive/warehouse

Como se puede apreciar, Hive necesita de las carpetas /tmp y /user/hive/warehouse para poder funcionar.

Ahora vamos a crear un fichero de ejemplo con el siguiente contenido para contar sus palabras. Lo llamaremos ejemplo.txt y lo vamos a guardar dentro de la carpeta bin de la carpeta de Hive:
Este es
un fichero de
ejemplo en
del que vamos
a contar
sus palabras
El cual tendremos que copiar dentro del HDFS. Recordamos el comando:
hadoop fs -copyFromLocal ejemplo.txt /tmp/ejemplo.txt
Ahora, ejecutamos la consola de Hive con el comando "hive" (sin comiillas) y creamos una tabla para almacenar el fichero de texto en ella:
hive>CREATE TABLE ejemplo (linea STRING);
Con el comando anterior, sólo hemos creado una tabla nueva, pero no la hemos cargado de información. Para cargar un fichero en una tabla ejecutaremos la orden siguiente:
hive>LOAD DATA INPATH '/tmp/ejemplo.txt' OVERWRITE INTO TABLE ejemplo;

Deleted hdfs://asusnotebook:54310/user/hive/warehouse/texto

Table default.texto stats: [numFiles=1, numRows=0, totalSize=73, rawDataSize=0]

OK

Time taken: 1.612 seconds
Ya tenemos el fichero cargado en la tabla ejemplo. Ahora hay que crear otra tabla para almacenar el resultado del conteo de palabras:

hive>CREATE TABLE contador AS 
SELECT palabra, count(1) AS cuenta FROM 
(SELECT explode(split(linea,' ')) AS palabra FROM texto) w 
GROUP BY palabra 
ORDER BY cuenta;
Esto comenzará creará dos MapReduce que comenzarán a trabajar de inmediato. Los mensajes que aparecen son como los siguientes (resumido)
[...]

Stage-2 map = 0%,  reduce = 0%

Stage-2 map = 100%,  reduce = 0%, Cumulative CPU 0.84 sec

Stage-2 map = 100%,  reduce = 100%, Cumulative CPU 2.12 sec

OK

Time taken: 42.304 seconds

Vamos a ver ahora que se ha creado dentro de la tabla contador

hive>SELECT * FROM contador;

a 1
contar 1
cuantas 1
de 1
del 2
dentro 1
ejemplo 1
es 1
estan 1
fichero 2
hay 1
palabras 2
que 1
sus 1
un 1
vamos 1
ver 1
y 1
Y ahí lo tenemos. Por poco casi no repito una palabra pero como se puede apreciar, la palabra "del", "fichero" y "palabras" aparecen 2 veces cada una.

0 comentarios:

Publicar un comentario