Integrar o Apache Zeppelin com o Hive Warehouse Connector no Azure HDInsight

Os clusters do HDInsight Spark incluem notebooks do Apache Zeppelin com interpretadores diferentes. Neste artigo, focamos apenas no interpretador Livy para acessar as tabelas Hive do Spark utilizando o Hive Warehouse Connector.

Observação

Este artigo contém referências a um termo que a Microsoft não usa mais. Quando o termo for removido do software, também o removeremos deste artigo.

Pré-requisito

Conclua as etapas da instalação do Hive Warehouse Connector.

Introdução

  1. Use o comando ssh para se conectar ao cluster do Apache Spark. Edite o seguinte comando substituindo CLUSTERNAME pelo nome do cluster e insira o comando:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Em sua sessão ssh, execute o seguinte comando para anotar as versões de hive-warehouse-connector-assembly e pyspark_hwc:

    ls /usr/hdp/current/hive_warehouse_connector
    

    Salve o resultado para uso posterior ao configurar o Apache Zeppelin.

Configurar o Livy

É necessário seguir as configurações para acessar tabelas do Hive do Zeppelin com o interpretador do Livy.

Cluster de Consulta Interativa

  1. Em um navegador da Web, navegue para https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HDFS/configs, onde LLAPCLUSTERNAME é o nome do cluster de Consulta Interativa.

  2. Navegue até Site de núcleo personalizado>avançado. Selecione Adicionar propriedade... para adicionar as seguintes configurações:

    Configuração Valor
    hadoop.proxyuser.livy.groups *
    hadoop.proxyuser.livy.hosts *
  3. Salve as alterações e reinicie todos os componentes afetados.

Cluster do Spark

  1. Em um navegador da Web, navegue para https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs, onde CLUSTERNAME é o nome do cluster do Apache Spark.

  2. Expanda livy2-conf personalizado. Selecione Adicionar propriedade... para adicionar as seguintes configurações:

    Configuração Valor
    livy.file.local-dir-whitelist /usr/hdp/current/hive_warehouse_connector/
  3. Salve as alterações e reinicie todos os componentes afetados.

Configurar o interpretador Livy na interface do usuário do Zeppelin (cluster do Spark)

  1. Em um navegador da Web, navegue para https://CLUSTERNAME.azurehdinsight.net/zeppelin/#/interpreter, onde CLUSTERNAME é o nome do cluster do Apache Spark.

  2. Navegue até o livy2.

  3. Adicione as seguintes configurações:

    Configuração Valor
    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.
    Substitua VERSION pelo valor obtido de Introdução, anteriormente.
    livy.spark.submit.pyFiles file:///usr/hdp/current/hive_warehouse_connector/pyspark_hwc-VERSION.zip.
    Substitua VERSION pelo valor obtido de Introdução, anteriormente.
    livy.spark.sql.hive.hiveserver2.jdbc.url Defina-o como a URL JDBC interativa do HiveServer2 do cluster de Consulta Interativa.
    spark.security.credentials.hiveserver2.enabled true
  4. Somente em clusters do ESP, adicione a seguinte configuração:

    Configuração Valor
    livy.spark.sql.hive.hiveserver2.jdbc.url.principal hive/_HOST@<AAD-Domain>
    • Use o comando ssh para se conectar ao cluster Interactive Query. Procure o parâmetro default_realm no arquivo /etc/krb5.conf. Substitua <AAD-DOMAIN> por esse valor como uma cadeia de caracteres em maiúsculas; caso contrário, a credencial não poderá ser encontrada.

      hive warehouse connector AAD Domain.

  5. Salve as alterações e reinicie o interpretador do Livy.

Se o interpretador do Livy não estiver acessível, modifique o arquivo shiro.ini presente no componente Zeppelin no Ambari. Para obter mais informações, consulte Configurar a segurança do Apache Zeppelin.

Executar consultas no Zeppelin

Inicie um notebook do Zeppelin usando o interpretador do Livy e execute o seguinte

%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()

Próximas etapas