在 Azure HDInsight 中将 Apache Zeppelin 与 Hive Warehouse Connector 集成
HDInsight Spark 群集包含具有不同解释器的 Apache Zeppelin 笔记本。 在本文中,我们只关注 Livy 解释器如何使用 Hive Warehouse Connector 从 Spark 访问 Hive 表。
注意
本文包含一个对 Azure 不再使用的术语的引用。 在从软件中删除该术语后,我们会将其从本文中删除。
先决条件
完成 Hive Warehouse Connector 设置步骤。
入门
使用 ssh 命令连接到 Apache Spark 群集。 编辑以下命令(将 CLUSTERNAME 替换为群集的名称),然后输入该命令:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.cn
在 ssh 会话中,执行以下命令以记下
hive-warehouse-connector-assembly
和pyspark_hwc
版本:ls /usr/hdp/current/hive_warehouse_connector
保存输出,以便稍后配置 Apache Zeppelin 时使用。
配置 Livy
需要以下配置才能通过 Livy 解释器访问 Zeppelin 中的 hive 表。
交互式查询群集
在 Web 浏览器中,导航到
https://LLAPCLUSTERNAME.azurehdinsight.cn/#/main/services/HDFS/configs
,其中 LLAPCLUSTERNAME 是 Interactive Query 群集的名称。导航到“高级”>“自定义核心站点”。 选择“添加属性...”,以添加以下配置:
配置 值 hadoop.proxyuser.livy.groups * hadoop.proxyuser.livy.hosts * 保存更改并重启所有受影响的组件。
Spark Cluster
在 Web 浏览器中导航到
https://CLUSTERNAME.azurehdinsight.cn/#/main/services/SPARK2/configs
,其中 CLUSTERNAME 是 Apache Spark 群集的名称。展开“自定义 livy2-conf”。 选择“添加属性...”,以添加以下配置:
配置 值 livy.file.local-dir-whitelist /usr/hdp/current/hive_warehouse_connector/ 保存更改并重启所有受影响的组件。
在 Zeppelin UI(Spark 群集)中配置 Livy 解释器
在 Web 浏览器中导航到
https://CLUSTERNAME.azurehdinsight.cn/zeppelin/#/interpreter
,其中CLUSTERNAME
是 Apache Spark 群集的名称。导航到“livy2”。
添加以下配置:
配置 值 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 是 仅针对 ESP 群集添加以下配置:
配置 值 livy.spark.sql.hive.hiveserver2.jdbc.url.principal hive/_HOST@<AAD-Domain>
使用 ssh 命令连接到 Interactive Query 群集。 在
/etc/krb5.conf
文件中查找default_realm
参数。 以大写字符串的形式使用此值替换<AAD-DOMAIN>
,否则找不到凭据。
保存更改并重启 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()