Integración de Apache Zeppelin con Hive Warehouse Connector en Azure HDInsight
Los clústeres de HDInsight Spark incluyen cuadernos de Apache Zeppelin con distintos intérpretes. Este artículo se centra solo en el intérprete Livy para acceder a tablas de Hive desde Spark mediante Hive Warehouse Connector.
Nota:
Este artículo contiene referencias a un término que Microsoft ya no utiliza. Cuando se elimine el término del software, se eliminará también de este artículo.
Requisito previo
Complete los pasos de configuración de Hive Warehouse Connector.
Introducción
Use el comando ssh para conectarse al clúster de Apache Spark. Edite el comando siguiente reemplazando CLUSTERNAME por el nombre del clúster y escriba el comando:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Desde la sesión de ssh, ejecute el comando siguiente para anotar las versiones de
hive-warehouse-connector-assembly
ypyspark_hwc
:ls /usr/hdp/current/hive_warehouse_connector
Guarde la salida para usarla después al configurar Apache Zeppelin.
Configuración de Livy
Se requieren las configuraciones siguientes para acceder a tablas de Hive desde Zeppelin con el intérprete de Livy.
Clúster de Interactive Query
Desde un explorador web, vaya a
https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HDFS/configs
, donde LLAPCLUSTERNAME es el nombre del clúster de Interactive Query.Vaya a Advanced>Custom core-site (Opciones avanzadas > Sitio principal personalizado). Seleccione Add Property... (Agregar propiedad) para agregar las configuraciones siguientes:
Configuración Value hadoop.proxyuser.livy.groups * hadoop.proxyuser.livy.hosts * Guarde los cambios y reinicie todos los componentes afectados.
Clúster de Spark
En un explorador web, vaya a
https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs
, donde CLUSTERNAME es el nombre del clúster de Apache Spark.Expanda Custom livy2-conf. Seleccione Add Property... (Agregar propiedad) para agregar la configuración siguiente:
Configuración Value livy.file.local-dir-whitelist /usr/hdp/current/hive_warehouse_connector/ Guarde los cambios y reinicie todos los componentes afectados.
Configuración del intérprete de Livy en la interfaz de usuario de Zeppelin (clúster de Spark)
Desde un explorador web, vaya a
https://CLUSTERNAME.azurehdinsight.net/zeppelin/#/interpreter
, dondeCLUSTERNAME
es el nombre del clúster de Apache Spark.Vaya a livy2.
Agregue las configuraciones siguientes:
Configuración Value livy.spark.hadoop.hive.llap.daemon.service.hosts @llap0 livy.spark.security.credentials.hiveserver2.enabled true livy.spark.sql.hive.llap true livy.spark.yarn.security.credentials.hiveserver2.enabled true livy.superusers livy, zeppelin livy.spark.jars file:///usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-VERSION.jar
.
Reemplace VERSION por el valor obtenido anteriormente en Introducción.livy.spark.submit.pyFiles file:///usr/hdp/current/hive_warehouse_connector/pyspark_hwc-VERSION.zip
.
Reemplace VERSION por el valor obtenido anteriormente en Introducción.livy.spark.sql.hive.hiveserver2.jdbc.url Establézcalo en la dirección URL JDBC interactiva de HiveServer2 del clúster de Interactive Query. spark.security.credentials.hiveserver2.enabled true Solo para clústeres de ESP, agregue la configuración siguiente:
Configuración Value livy.spark.sql.hive.hiveserver2.jdbc.url.principal hive/_HOST@<AAD-Domain>
Use el comando ssh para conectarse al clúster de Interactive Query. Busque el parámetro
default_realm
en el archivo/etc/krb5.conf
. Reemplace<AAD-DOMAIN>
por este valor como una cadena en mayúsculas. De lo contrario, la credencial no se encontrará.
Guarde los cambios y reinicie el intérprete de Livy.
Si el intérprete de Livy no es accesible, modifique el archivo shiro.ini
del componente Zeppelin en Ambari. Para obtener más información, vea Configuración de la seguridad de Apache Zeppelin.
Ejecución de consultas en Zeppelin
Inicie un cuaderno de Zeppelin con el intérprete de Livy y ejecute lo siguiente
%livy2
import com.hortonworks.hwc.HiveWarehouseSession
import com.hortonworks.hwc.HiveWarehouseSession._
import org.apache.spark.sql.SaveMode
# Initialize the hive context
val hive = HiveWarehouseSession.session(spark).build()
# Create a database
hive.createDatabase("hwc_db",true)
hive.setDatabase("hwc_db")
# Create a Hive table
hive.createTable("testers").ifNotExists().column("id", "bigint").column("name", "string").create()
val dataDF = Seq( (1, "foo"), (2, "bar"), (8, "john")).toDF("id", "name")
# Validate writes to the table
dataDF.write.format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector").mode("append").option("table", "hwc_db.testers").save()
# Validate reads
hive.executeQuery("select * from testers").show()