Usar el cliente de Apache Beeline con Apache Hive
En este artículo se describe cómo usar el cliente de línea de comandos Apache Beeline para crear y ejecutar consultas de Apache Hive a través de una conexión SSH.
Información previa
Beeline es un cliente de Hive que se incluye en los nodos principales del clúster de HDInsight. En este artículo se describe cómo usar esta herramienta por medio de ejemplos en los que se utiliza una consulta de Hive y un archivo HiveQL.
Para conectarse al cliente de Beeline instalado en el clúster de HDInsight, o para instalar Beeline en el entorno local, siga la guía para conectarse a Apache Beeline o instalarlo.
Beeline usa JDBC para conectarse a HiveServer2, un servicio hospedado en el clúster de HDInsight. Beeline también se puede usar para tener acceso a Hive en HDInsight de forma remota a través de Internet. En los ejemplos siguientes se proporcionan las cadenas de conexión más habituales usadas para conectarse a HDInsight desde Beeline.
Requisitos previos para los ejemplos
Un clúster de Hadoop en HDInsight. Si necesita un clúster, siga la guía para crear un clúster de HDInsight.
Observe el esquema de URI para el almacenamiento principal del clúster. Por ejemplo,
wasb://
para Azure Storage,abfs://
para Azure Data Lake Storage Gen2 oadl://
para Azure Data Lake Storage Gen1. Si se habilita la transferencia segura para Azure Storage, el identificador URI eswasbs://
. Para más información, consulte el artículo sobre la transferencia segura.Un cliente SSH. Para más información, consulte Conexión a través de SSH con HDInsight (Apache Hadoop). En la mayoría de los pasos descritos en este documento se da por hecho que está usando Beeline desde una sesión de SSH al clúster. También puede usar un cliente de Beeline local, pero estos pasos no se explican en este artículo.
Ejecución de una consulta de Hive
Este ejemplo se basa en el uso del cliente de Beeline desde una conexión SSH.
Abra una conexión de SSH al clúster con el código siguiente. Reemplace
sshuser
por el usuario de SSH del clúster yCLUSTERNAME
por el nombre de su clúster. Cuando se le solicite, escriba la contraseña de la cuenta de usuario de SSH.ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Conéctese a HiveServer2 con el cliente de Beeline de la sesión de SSH abierta. Para ello, escriba el comando siguiente:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
Nota
Consulte la parte "Al clúster de Enterprise Security Package (ESP) de HDInsight mediante Kerberos" en Conexión a HiveServer2 mediante Beeline o instalación de Beeline localmente para conectarse desde el entorno local si usa un clúster habilitado para Enterprise Security Package (ESP).
Los comandos de Beeline empiezan con un carácter
!
. Por ejemplo!help
muestra la ayuda. Sin embargo, el!
se puede omitir en algunos comandos. Por ejemplo,help
también funciona.Hay un
!sql
, que se usa para ejecutar instrucciones de HiveQL. Sin embargo, HiveQL es de uso tan frecuente que puede omitir el elemento!sql
que le precede. Las dos instrucciones siguientes son equivalentes:!sql show tables; show tables;
En un nuevo clúster, solo debe aparecer una tabla: hivesampletable.
Use el siguiente comando para mostrar el esquema de hivesampletable:
describe hivesampletable;
Este comando devuelve la siguiente información:
+-----------------------+------------+----------+--+ | col_name | data_type | comment | +-----------------------+------------+----------+--+ | clientid | string | | | querytime | string | | | market | string | | | deviceplatform | string | | | devicemake | string | | | devicemodel | string | | | state | string | | | country | string | | | querydwelltime | double | | | sessionid | bigint | | | sessionpagevieworder | bigint | | +-----------------------+------------+----------+--+
Esta información describe las columnas de la tabla.
Escriba las siguientes instrucciones para crear una tabla denominada log4jLogs con los datos de ejemplo proporcionados con el clúster de HDInsight: (Revise según sea necesario en función de su esquema de URI).
DROP TABLE log4jLogs; CREATE EXTERNAL TABLE log4jLogs ( t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS TEXTFILE LOCATION 'wasbs:///example/data/'; SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log' GROUP BY t4;
Estas instrucciones realizan las acciones siguientes:
. Descripción DROP TABLE Si la tabla existe, se elimina. CREATE EXTERNAL TABLE Crea una tabla externa en Hive. Las tablas externas solo almacenan la definición de Tabla en Hive. Los datos permanecen en la ubicación original. FORMATO DE FILA Indica el formato de los datos. En este caso, los campos de cada registro se separan mediante un espacio. STORED AS TEXTFILE LOCATION Indica dónde se almacenan los datos y en qué formato de archivo. SELECT Selecciona un recuento de todas las filas donde la columna t4 contiene el valor [ERROR] . Esta consulta devuelve un valor de 3 ya que hay tres filas que contienen este valor. INPUT__FILE__NAME LIKE '%.log' Hive intenta aplicar el esquema a todos los archivos en el directorio. En este caso, el directorio contiene archivos que no coinciden con el esquema. Para evitar que haya datos inservibles en los resultados, esta instrucción indica a Hive que solo se deben devolver datos de archivos que terminen en .log. Nota
Las tablas externas se deben utilizar cuando se espera que un origen externo actualice los datos subyacentes. Por ejemplo, un proceso de carga de datos automatizado o una operación de MapReduce.
La eliminación de una tabla externa no elimina los datos, solamente la definición de tabla.
La salida de este comando es similar al texto siguiente:
INFO : Tez session hasn't been created yet. Opening session INFO : INFO : Status: Running (Executing on YARN cluster with App id application_1443698635933_0001) INFO : Map 1: -/- Reducer 2: 0/1 INFO : Map 1: 0/1 Reducer 2: 0/1 INFO : Map 1: 0/1 Reducer 2: 0/1 INFO : Map 1: 0/1 Reducer 2: 0/1 INFO : Map 1: 0/1 Reducer 2: 0/1 INFO : Map 1: 0(+1)/1 Reducer 2: 0/1 INFO : Map 1: 0(+1)/1 Reducer 2: 0/1 INFO : Map 1: 1/1 Reducer 2: 0/1 INFO : Map 1: 1/1 Reducer 2: 0(+1)/1 INFO : Map 1: 1/1 Reducer 2: 1/1 +----------+--------+--+ | sev | count | +----------+--------+--+ | [ERROR] | 3 | +----------+--------+--+ 1 row selected (47.351 seconds)
Salga de Beeline:
!exit
Ejecución de un archivo de HiveQL
Este ejemplo es una continuación del ejemplo anterior. Use los pasos siguientes para crear un archivo y, luego, ejecútelo mediante Beeline.
Use el comando siguiente para crear un archivo denominado query.hql:
nano query.hql
Use el texto siguiente como contenido del archivo. Esta consulta crea una nueva tabla "interna" denominada errorLogs:
CREATE TABLE IF NOT EXISTS errorLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) STORED AS ORC; INSERT OVERWRITE TABLE errorLogs SELECT t1, t2, t3, t4, t5, t6, t7 FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log';
Estas instrucciones realizan las acciones siguientes:
. Descripción CREATE TABLE IF NOT EXISTS Si todavía no existe la tabla, se crea. Dado que no se utiliza la palabra clave EXTERNAL, esta instrucción crea una tabla interna. Las tablas internas se guardan en el almacenamiento de datos de Hive y Hive las administra por completo. STORED AS ORC almacena los datos en el formato de columnas de filas optimizadas (ORC, Optimized Row Columnar). ORC es un formato altamente optimizado y eficiente para almacenar datos de Hive. INSERT OVERWRITE ... SELECT selecciona en la tabla log4jLogs las filas que contienen [ERROR] y, después, inserta los datos en la tabla errorLogs. Nota
A diferencia de las tablas externas , la eliminación de una tabla interna también elimina los datos subyacentes.
Para guardar el archivo, use Ctrl+X, escriba Y y, finalmente, presione Entrar.
Use el siguiente código para ejecutar el archivo mediante Beeline:
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http' -i query.hql
Nota
El parámetro
-i
inicia Beeline y ejecuta las instrucciones del archivoquery.hql
. Una vez que se completa la consulta, llegará al avisojdbc:hive2://headnodehost:10001/>
. También puede ejecutar un archivo mediante el parámetro-f
que sale de Beeline después de que la consulta se completa.Para comprobar que la tabla errorLogs se creó, use la siguiente instrucción para devolver todas las filas de errorLogs:
SELECT * from errorLogs;
Se deben devolver tres filas de datos y todas ellas deben contener [ERROR] en la columna t4.
+---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+ | errorlogs.t1 | errorlogs.t2 | errorlogs.t3 | errorlogs.t4 | errorlogs.t5 | errorlogs.t6 | errorlogs.t7 | +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+ | 2012-02-03 | 18:35:34 | SampleClass0 | [ERROR] | incorrect | id | | | 2012-02-03 | 18:55:54 | SampleClass1 | [ERROR] | incorrect | id | | | 2012-02-03 | 19:25:27 | SampleClass4 | [ERROR] | incorrect | id | | +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+ 3 rows selected (0.813 seconds)
Pasos siguientes
Para obtener más información general sobre Hive en HDInsight, consulte Uso de Apache Hive con Apache Hadoop en HDInsight.
Puede encontrar la referencia del lenguaje HiveQL en el manual del lenguaje.
Si quiere más información sobre otras formas en que puede trabajar con Hadoop en HDInsight, consulte Uso de MapReduce con Apache Hadoop en HDInsight.