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.
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.
Guía Hadoop
- Tutorial de Hadoop para principiantes: Conceptos básicos de Hadoop
- Introducción a la administración Hadoop
- Introducción a la seguridad Hadoop
- Introducción al Apache Flume
- Una introducción a Hive
- Introducción a HDFS
- Introducción a Hbase
- Ejemplos de Hadoop: 5 casos de utiliza en el mundo real
- Carreras en Hadoop: Conseguir empleo
- Preguntas de entrevista en Hadoop
- Introducción a la analítica Hadoop
- Introducción a Apache Pig
- Introducción al hilo apache
- Introducción a la arquitectura Hadoop
- Ventajas y ventajas de Hadoop
- Usando Hadoop con Apache Cassandra
- Hadoop vs Kubernetes: ¿Acabarán K8s y Cloud Native con Hadoop?
- Certificaciones Hadoop
- Clústeres Hadoop: Una introducción
- Ecosistema y Componentes Hadoop
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.