Una introducción a Hive

Una introducción a Hive

  • Inteligencia artificial
6 min de lectura Actualizado Apr 25, 2017

Puntos clave: Hive simplifica la gestión de datos en Hadoop al permitir a los usuarios Crea tablas y ejecutar consultas similares a SQL, que generan trabajos MapReduce en segundo plano. La instalación requiere Apache Hadoop y MySQL para el almacenamiento de metadatos.

  • Hive proporciona una interfaz SQL para Hadoop, facilitando el manejo de datos.
  • La instalación implica configurar Hadoop y configurar MySQL para el almacenamiento de metadatos.

Resumen

Hive están muy similar a Apache Pig. Lo que hace están permite te Crea tablas y cargar archivos externos en tablas usando SQL. Luego crea trabajos MapReduce en Java. Java están un lenguaje muy extenso, así que usar Pig y Hive están más sencillo.

Algunos han dicho que Hive está una herramienta de almacén de datos (dicho sin rodeos, eso significa que un SGBDR se usaba para hacer análisis antes de que se inventara Hadoop). De hecho, te puedes utilizar Apache Sqoop para cargar datos en Hive o Hadoop desde una base de datos relacional.

play

Instalación

En este documento introduciremos Hive principalmente usando ejemplos. te necesitas instala Apache Hadoop primero. Luego te puede instala MySQL a almacena metadatos. (O te podría utiliza Derby. Aquí utiliza MySQL). Hive Crea datos en Hadoop.

Así que primero instala Hadoop. Luego ejecuta estos pasos:

    apt-get install mysql-server
apt-get install libmysql-java

Descarga y extrae Hive a /usr/local/hive. Luego, en el set .bashrc:

Haz este enlace suave:

    export HIVE_HOME=/usr/local/hive/apache-hive-2.0.1-bin
export PATH=$PATH:$HIVE_HOME/bin

Haz este enlace suave:

    ln -s /usr/share/java/mysql-connector-java.jar $HIVE_HOME/lib/mysql-connector-java.jar

Luego abre MySQL para Crea el esquema, etc:

    mysql -u root -p
mysql> CREATE DATABASE metastore;
mysql> USE metastore;

Aquí utiliza el esquema que más se acerca a la versión que te son usando. (En este tutorial son usando Hive 2.0.1 pero no están esquema 2.0.1. Así que usamos la 2.0.0.)

    mysql> SOURCE /usr/local/hive/apache-hive-2.0.1-bin/scripts/metastore/upgrade/mysql/hive-schema-2.0.0.mysql.sql

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY password';

mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'password';
mysql>  flush privileges;

Ahora edita $HIVE_HOME/conf/hive-site.xml:

    javax.jdo.option.ConnectionURL
       jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true
       metadata is stored in a MySQL server
    
    
       javax.jdo.option.ConnectionDriverName
       com.mysql.jdbc.Driver
       MySQL JDBC driver class
    
    
       javax.jdo.option.ConnectionUserName
       hiveuser
       user name for connecting to mysql server
    
    
       javax.jdo.option.ConnectionPassword
       password
       password for connecting to mysql server

Si te configurado Hadoop como un clúster te puede que necesites ejecutar el siguiente comando. te sabrá si están así si te Obtén un error sobre eso.

    $HADOOP_HOME/bin/hadoop dfsadmin -safemode leave

Además, si te instalado Spark, te podría elegir ejecutarlo para Obtén eliminar un mensaje de advertencia-

    unset SPARK_HOME

Ahora ejecuta la concha Colmena:

    hive

Cargar archivo CSV externo

Gran parte de lo que te hacer con Hive están cargar archivos externos almacenados en Hadoop para te poder utiliza SQL para que funcione con ellos. Aquí están un ejemplo.

Descarga este archivo (están un registro ssh) y luego ábrelo con Google Sheets o Excel o utiliza sed y vi para reemplazar los espacios por comas y así quedar delimitado por comas.

Luego, la parte superior del archivo se ve así:

    1331901012,CTHcOo3BARDOPDjYue,192.168.202.68,53633,192.168.28.254,22,failure,INBOUND,SSH-2.0-OpenSSH_5.0,SSH-1.99-Cisco-1.25,-,-,-,-,-
1331901030,CBHpSz2Zi3rdKbAvwd,192.168.202.68,35820,192.168.23.254,22,failure,INBOUND,SSH-2.0-OpenSSH_5.0,SSH-1.99-Cisco-1.25,-,-,-,-,-

Ahora copia el archivo a Hadoop:

    hadoop fs -put /home/walker/Downloads/ssh.csv /data/ssh/

Fíjate que te poner el nombre del directorio y no el nombre del archivo en Hadoop.

Luego cargamos el archivo y Crea el esquema todo en un solo paso:

    CREATE EXTERNAL TABLE IF NOT EXISTS sshlog(
sshtime STRING,
sshkey STRING,
sourceIP STRING,
socket STRING,
targetIP STRING,
port STRING,
status STRING,
direction STRING,
software STRING,
device STRING,
junk1 STRING,
junk2 STRING,
junk3 STRING,
Junk4 STRING,
Junk5 STRING )
   COMMENT 'ssh log'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    STORED AS TEXTFILE
    location '/data/ssh/';

Función definida por el usuario en Python (UDF)

Antes de mostrar algunos comandos SQL (técnicamente se son llamados HQL, Hive Query Language), mostraremos cómo escribir un UDF en Python:

Crea el programa en Python ssh.py. A continuación explicamos cómo funciona.

    import sys
	import datetime
	import re

def bi(s):
    r='(\d+)\.(\d+)\.(\d+)\.(\d+)'
    g=re.search('(\d+)\.(\d+)\.(\d+)\.(\d+)',s)
    if g:
        return bin(int(g.group(1))) + bin(int(g.group(2))) + bin(int(g.group(3)))

for line in sys.stdin:
	x, y, z = line.strip().split('\t')
	print x,bi(y),bi(z)

Añádelo para Haz disponible para que Hive ejecute este comando en la carcasa Hive.

    add file /home/walker/Downloads/ssh.py

Luego ejecuta esta operación de transformación llamando al UDF en Python:

    SELECT TRANSFORM (sshtime, sourceip, targetip) USING 'python /home/walker/Downloads/ssh.py' as (sshtime, sourceIP, targetip) FROM sshlog;

1332017778 0b110000000b101010000b11001010 0b110000000b101010000b10101	NULL	NULL
1332017793 0b110000000b101010000b11001010 0b110000000b101010000b10101	NULL	NULL

La función de Python funciona con stdin y stdout. Dividimos la entrada en un tiempo y luego dos campos de dirección IP. Luego ejecutamos una función para convertir la dirección IP a formato de bits. La instrucción TRANSFORM significa pasar esos tres valores a la UDF.

Ejercicio: ¿por qué devuelve 2 columnas nulas?

Crea datos de inserción de tabla

No, volvemos atrás y hacemos algo más sencillo: Crea una tabla e insertamos algunos datos para ilustrar funciones HQL.

Primero Crea una tabla. La gente que sabe SQL Ve que está casi la misma sintaxis.

    create table students (student string, age int);

Luego añade algunos datos:

    insert into table students values('Walker', 33);
insert into table students values('Sam', 33);
insert into table students values('Sally', 33);
insert into table students values('Sue', 72);
insert into table students values('George', 56);
insert into table students values('William', 64);
insert into table students values('Ellen', 24);
insert into table students values('Jose', 72);
insert into table students values('Li', 56);
insert into table students values('Chris', 64);
insert into table students values('Ellen', 24);
insert into table students values('Sue', 72);
insert into table students values('Ricardo', 56);
insert into table students values('Wolfgang', 64);
insert into table students values('Melanie', 24);
insert into table students values('Monica', 36);

Seleccionar

Ahora podemos ejecutar comandos SQL normales sobre eso. Recuerda que esto no están una base de datos relacional. Hadoop, te como recordará, no permite actualizar archivos: solo añadirlos y eliminarlos. Así que crea nuevos archivos para cada operación.

    select count(*) from students;

Aquí podemos encontrar a todos los estudiantes cuyo nacimiento están múltiplo de 3 usando la función módulo (están divisible por). (Colmena tiene muchas funciones matemáticas.)

    select age,pmod(age,3) from students where pmod(age,3) = 0;

Ahora, sin discriminar a las personas mayores, Crea dos nuevas tablas: una con personas mayores de 45 años y otra para personas menores de esa edad:

    create table old as select * from students where age > 45;

eate table young as select * from students where age < = 45;

Únete

Ahora podemos Haz la intersección de dos tablas mostrando a los estudiantes de la tabla antigua y la nueva cuyo nombre están 3 letras:

Responde:

    select young.student, old.student from young join old on (length(young.student) = 3) and (length(old.student) = 3);

Responde:

    OK
Sam	Sue
Sam	Sue

Mapas

Hive soporta mapas, estructuras y tipos complejos de arrays. Pero aún no permite añadir datos a esos con SQL. Así que mostramos la forma un poco incómoda de hacerlo a continuación.

Primero, Crea una tabla con una columna de mapa, es decir, una columna de (clave->valor):

    create table prices(product map);

Ahora utiliza la tabla de estudiantes que creamos arriba para que sirva como sustituto de esta operación de inserción. te puedo utiliza cualquier tabla para eso

    insert into prices select map("abc", 1) from students limit 1;

Ahora te puede Ve los datos que acabamos de insertar:

    select * from prices;
OK
{"abc":1}

¿A dónde ir ahora

A partir de aquí son muchas áreas donde te podrías centrar tu aprendizaje, ya que Hive tiene muchas funciones. Por ejemplo, te puedes conoce sobre particiones, el tipo de dato decimal, trabajar con fechas, usar Hive en Amazon y usar Hive con Apache Spark. te podría conoce sobre Beeline, que están una interfaz de línea de comandos Hive más reciente. (Beeline reemplazará la línea de comando Hive en el futuro.) Y te puede profundizar en temas arquitectónicos como SerDe, que están los formatos de serializador-deserializador Hive y almacenamiento de archivos Hive.

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Inteligencia artificial

¿Te interesa saber más de BMC?

El Brief están nuestro correo mensual sobre el mainframe y la orquestación empresarial: investigación, historias de clientes, noticias de productos, eventos.

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Tú te has suscrito a The Brief

El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.