Existen diversos métodos para ejecutar consultas a Apache Hive. El método más popular – y más arcaico – es utilizar la herramienta cliente tipo línea de comando que se incluye en la distribución de Apache Hive.Para abrir la herramienta debes conectar al name-node (nodo central) y ejecutar el acceso directo de Hadoop; una vez abierta la aplicación de línea de comando, debes ejecutar Hive para que se lance la aplicación.
En algunas distribuciones se indica que Hive no existe porque no está establecido en las variables de entorno de Windows; en ese caso, acceder al directorio donde está la distribución de Hive – normalmente es un directorio que se llama Hive.X.XX.XX dentro del directorio Hadoop.XX.XX.XX
La aplicación tiene diferentes argumentos de entrada como podéis ver:
usage: hive
-c,--credentials <user:password> credentials for HTTP/HTTPS connection -d,--define <key=value> Variable subsitution to apply to hive commands. e.g. -d A=B or --define A=B -e <quoted-query-string> SQL from command line -f <filename> SQL from files -H,--help Print help information -h <hostname> connecting to Hive Server on remote host --hiveconf <property=value> Use value for given property --hivevar <key=value> Variable subsitution to apply to hive commands. e.g. --hivevar A=B -i <filename> Initialization SQL file -m,--servermode <servermode> server mode (tcp,http,https,https-unsafe) -p <port> connecting to Hive Server on port number -path <path> URI path component for HTTP/HTTPS connection -S,--silent Silent mode in interactive shell -v,--verbose Verbose mode (echo executed SQL to the console)
Una vez en la aplicación puedes ejecutar los diferentes comandos HiveQL que veremos más adelante; de momento ejecuta:
show databases;
que dará como resultado algo como lo siguiente:
hive> show databases;
OK
default
emails
w3c
Time taken: 0.452 seconds
Hemos conseguido conectar y ejecutar una consulta HiveQL, más adelante veremos más cosas. Comentar que cuando conectas a Hive por defecto conectas en la base de datos por defecto – que se llama default.
Conectar con herramientas que usan Drivers ODBC u JDBC
Otros métodos de conexión y ejecución de consultas se pueden realizar mediante herramientas que utilicen drivers ODBC o JDBC. Anteriormente vimos cómo conectar a Apache Hive desde Excel 2013; otros métodos para conectar es mediante SQL Developer de Oracle (utilizando driver JDBC), o mediante SQuirreL SQL Client – que se puede descargar de aquí. NOTA: Estoy teniendo problemas para conectar con estas dos herramientas y próximamente indicaré cómo hacerlo – si consigo arreglarlo 🙂
El Repositorio de datos (MetaStore)
Apache Hive se apoya en dos componentes:
- HDFS (o WASB) para almacenar los datos (archivos)
- BBDD de contenido (almacenada en HDFS)
- Metastore, que contiene la definición de tablas y objetos
El punto 3, no está almacenado en HDFS; de hecho Apache Hive proporciona varios métodos de almacenar esa información: en MySQL, el PostGres, o en Derby SQL Server. Qué método de almacenamiento utiliza podrás verlo en la siguiente ruta:
C:Hadoophive-0.9.0confhive-site.xml; en concreto en las entradas:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>
jdbc:derby://localhost:1527/metastore_db;create=true
</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>org.apache.derby.jdbc.ClientDriver</value> <description>Driver class name for a JDBC metastore</description> </property>
En el caso de la distribución HDI-Dev-Preview, la BBDD derby estará almacenada en la ruta local de Apache Hive. Esto puede resultar un problema si pierdes esa unidad de datos porque podrás comprometer la definición de todos los objetos que tiene tu DW; en el caso de HDInsight en Azure, la ubicación obviamente es una base de datos SQL Server (WASD); concretamente en mi HDInsight está en esta ubicación:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>
jdbc:sqlserver://XXX.database.windows.net:1433;database=XXXvemetastore;encrypt=true;trustServerCertificate=true;create=false
</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value> <description>Driver class name for a JDBC metastore</description> </property>
Qué beneficio tenemos? nos proporciona redundancia geográfica la BBDD de SQL Server. En caso de perdida del name-node de HDInsight, no se si se reutilizará la BBDD del metastore; es algo que debemos validar por si acaso…
Los Servicios de Apache Hive
En la distribución de HDI-Dev-Preview se puede ver que además de los servicios HiveServer y HiveServer2, hay un servicio llamado DerbyServer que corresponde con el servicio de base de datos para el metastore (aparte hay otro servicio que se llama metastore). Si este servicio se para, las peticiones HiveSQL no podrán procesarse. Los servicios HiveServer y HiveServer2 se utilizan para las peticiones que vienen desde los drivers JDBC / ODBC; si paras el servicio HiveServer2 por ejemplo, las peticiones que hagas desde Excel 2013, no podrán procesarse. Sin embargo la herramienta cliente (CLI) que hemos visto al principio del artículo si seguirá funcionando porque no hace uso esos servicios. Fíjate en el diagrama 2, como ha herramienta Cliente (en naranja) no pasa por el servicio Thrift Server (que es lo sostiene los servicios HiveServer y HiveServer2).
del servicio