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

  1. 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
    
  2. Desde la sesión de ssh, ejecute el comando siguiente para anotar las versiones de hive-warehouse-connector-assembly y pyspark_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

  1. 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.

  2. 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 *
  3. Guarde los cambios y reinicie todos los componentes afectados.

Clúster de Spark

  1. 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.

  2. 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/
  3. 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)

  1. Desde un explorador web, vaya a https://CLUSTERNAME.azurehdinsight.net/zeppelin/#/interpreter, donde CLUSTERNAME es el nombre del clúster de Apache Spark.

  2. Vaya a livy2.

  3. 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
  4. 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á.

      hive warehouse connector AAD Domain.

  5. 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()

Pasos siguientes