在 Azure HDInsight 中将 Apache Zeppelin 与 Hive Warehouse Connector 集成

HDInsight Spark 群集包含具有不同解释器的 Apache Zeppelin 笔记本。 在本文中,我们只关注 Livy 解释器如何使用 Hive Warehouse Connector 从 Spark 访问 Hive 表。

注意

本文包含一个对 Azure 不再使用的术语的引用。 在从软件中删除该术语后,我们会将其从本文中删除。

先决条件

完成 Hive Warehouse Connector 设置步骤。

入门

  1. 使用 ssh 命令连接到 Apache Spark 群集。 编辑以下命令(将 CLUSTERNAME 替换为群集的名称),然后输入该命令:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.cn
    
  2. 在 ssh 会话中,执行以下命令以记下 hive-warehouse-connector-assemblypyspark_hwc 版本:

    ls /usr/hdp/current/hive_warehouse_connector
    

    保存输出,以便稍后配置 Apache Zeppelin 时使用。

配置 Livy

需要以下配置才能通过 Livy 解释器访问 Zeppelin 中的 hive 表。

交互式查询群集

  1. 在 Web 浏览器中,导航到 https://LLAPCLUSTERNAME.azurehdinsight.cn/#/main/services/HDFS/configs,其中 LLAPCLUSTERNAME 是 Interactive Query 群集的名称。

  2. 导航到“高级”>“自定义核心站点”。 选择“添加属性...”,以添加以下配置:

    配置
    hadoop.proxyuser.livy.groups *
    hadoop.proxyuser.livy.hosts *
  3. 保存更改并重启所有受影响的组件。

Spark Cluster

  1. 在 Web 浏览器中导航到 https://CLUSTERNAME.azurehdinsight.cn/#/main/services/SPARK2/configs,其中 CLUSTERNAME 是 Apache Spark 群集的名称。

  2. 展开“自定义 livy2-conf”。 选择“添加属性...”,以添加以下配置:

    配置
    livy.file.local-dir-whitelist /usr/hdp/current/hive_warehouse_connector/
  3. 保存更改并重启所有受影响的组件。

在 Zeppelin UI(Spark 群集)中配置 Livy 解释器

  1. 在 Web 浏览器中导航到 https://CLUSTERNAME.azurehdinsight.cn/zeppelin/#/interpreter,其中 CLUSTERNAME 是 Apache Spark 群集的名称。

  2. 导航到“livy2”。

  3. 添加以下配置:

    配置
    livy.spark.hadoop.hive.llap.daemon.service.hosts @llap0
    livy.spark.security.credentials.hiveserver2.enabled
    livy.spark.sql.hive.llap
    livy.spark.yarn.security.credentials.hiveserver2.enabled
    livy.superusers livy, zeppelin
    livy.spark.jars file:///usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-VERSION.jar
    将 VERSION 替换为之前在入门中获取的值。
    livy.spark.submit.pyFiles file:///usr/hdp/current/hive_warehouse_connector/pyspark_hwc-VERSION.zip
    将 VERSION 替换为之前在入门中获取的值。
    livy.spark.sql.hive.hiveserver2.jdbc.url 将其设置为 Interactive Query 群集的 HiveServer2 Interactive JDBC URL。
    spark.security.credentials.hiveserver2.enabled
  4. 仅针对 ESP 群集添加以下配置:

    配置
    livy.spark.sql.hive.hiveserver2.jdbc.url.principal hive/_HOST@<AAD-Domain>
    • 使用 ssh 命令连接到 Interactive Query 群集。 在 /etc/krb5.conf 文件中查找 default_realm 参数。 以大写字符串的形式使用此值替换 <AAD-DOMAIN>,否则找不到凭据。

      Hive Warehouse Connector AAD 域。

  5. 保存更改并重启 Livy 解释器。

如果 Livy 解释器不可访问,请修改 Ambari 中 Zeppelin 组件的 shiro.ini 文件。 有关详细信息,请参阅配置 Apache Zeppelin Security

在 Zeppelin 中运行查询

使用 Livy 解释器启动 Zeppelin 笔记本并执行以下操作

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

后续步骤