用于连接到 HDP Virtualbox 上的 Hive 的 Apache Zeppelin 配置

Apache Zeppelin configuration for connect to Hive on HDP Virtualbox

一段时间以来,我一直在为 Apache Zeppelin notebook 0.10.0 版设置而苦恼。 这个想法是能够将它连接到远程 Hortonworks 2.6.5 服务器,该服务器在 Ubuntu 20.04 的 Virtualbox 上本地运行。 我正在使用从以下位置下载的图像:

https://www.cloudera.com/downloads/hortonworks-sandbox.html

当然,该映像已经预装了 Zeppelin,它在端口 9995 上运行良好,但这是一个旧的 0.7.3 版本,不支持我想使用的 Helium 插件。我知道HDP version 3.0.1已经更新了Zeppelin version 0.8 onboard,但由于我的硬件资源目前无法使用。另外,据我所知,启用Leaflet Map Plugin也有问题。

首先想到的是在服务器上更新notebook,但是根据Cloudera论坛上的说明更新后(不幸的是他们现在不工作,我无法提供link或查看任何其他解决方案)它无法正确启动。 现在在我看来,一个更简单的解决方案是将较新的笔记本版本连接到虚拟服务器,不幸的是,尽管这里的线程使用各种配置进行了许多尝试和解决方案,但我无法通过 JDBC 连接到 Hive。我也将 Zeppelin 与本地 Spark 3.0.3 一起使用,但我在 Hive 中有一些地理数据,我想以这种方式可视化。

除其他外,我使用了 Zeppelin 网站上的描述:

https://zeppelin.apache.org/docs/latest/interpreter/jdbc.html#apache-hive

这是我当前的 JDBC 解释器配置:

hive.driver     org.apache.hive.jdbc.HiveDriver
hive.url        jdbc:hive2://sandbox-hdp.hortonworks.com:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2 
hive.user       hive
Artifact        org.apache.hive:hive-jdbc:3.1.2

根据驱动程序版本的不同,会出现不同的错误,但这次是在输入之后:

%jdbc(hive)
SELECT * FROM mydb.mytable;

我收到以下错误:

Could not open client transport for any of the Server URI's in ZooKeeper: Could not establish connection to jdbc:hive2://sandbox-hdp.hortonworks.com:10000/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;hive.server2.proxy.user=hive;?tez.application.tags=paragraph_1645270946147_194101954;mapreduce.job.tags=paragraph_1645270946147_194101954;: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{set:hiveconf:mapreduce.job.tags=paragraph_1645270946147_194101954, set:hiveconf:hive.server2.thrift.resultset.default.fetch.size=1000, hive.server2.proxy.user=hive, use:database=default, set:hiveconf:tez.application.tags=paragraph_1645270946147_194101954})

我将非常感谢大家的帮助。问候。

因此,经过许多小时和试验,这里有一个可行的解决方案。首先,最重要的是使用与您的 Hadoop 版本相关的驱动程序。需要在各自版本中像 'hive-jdbc-standalone' 和 'hadoop-common' 这样的 jar 文件,并且为了避免在 Zeppelin 中的 %jdbc 解释器的 'Artifact' 字段中添加所有这些文件,最好是使用一个包含所有必需依赖项的完整文件。 感谢 Tim Veil,它可以在下面的 Github 存储库中找到:

https://github.com/timveil/hive-jdbc-uber-jar/

这是我完整的 Zeppelin %jdbc 解释器设置:

default.url                                     jdbc:postgresql://localhost:5432/
default.user                                    gpadmin
default.password
default.driver                                  org.postgresql.Driver
default.completer.ttlInSeconds                  120
default.completer.schemaFilters     
default.precode     
default.statementPrecode        
common.max_count                                1000    
zeppelin.jdbc.auth.type                         SIMPLE 
zeppelin.jdbc.auth.kerberos.proxy.enable        false 
zeppelin.jdbc.concurrent.use                    true    
zeppelin.jdbc.concurrent.max_connection         10  
zeppelin.jdbc.keytab.location       
zeppelin.jdbc.principal         
zeppelin.jdbc.interpolation                     false   
zeppelin.jdbc.maxConnLifetime                   -1
zeppelin.jdbc.maxRows                           1000    
zeppelin.jdbc.hive.timeout.threshold            60000 
zeppelin.jdbc.hive.monitor.query_interval       1000    
hive.driver                                     org.apache.hive.jdbc.HiveDriver     
hive.password       
hive.proxy.user.property                        hive.server2.proxy.user     
hive.splitQueries                               true    
hive.url                                        jdbc:hive2://sandbox-hdp.hortonworks.com:10000/default  
hive.user                                       hive

Dependencies
Artifact
/opt/zeppelin/interpreter/jdbc/hive-jdbc-uber-2.6.5.0-292.jar

下一步是转到 Ambari http://localhost:8080/ 并以管理员身份登录。为此,您必须首先通过 SSH 登录 Hadoop root 帐户:

ssh root@127.0.0.1 -p 2222
root@127.0.0.1's password: hadoop

成功登录后,系统会提示您立即更改密码,请执行此操作,然后使用以下命令设置 Ambari 管理员密码:

[root@sandbox-hdp ~]# ambari-admin-password-reset

之后您可以在 Ambari 中使用管理员帐户(登录并单击左侧面板中的 Hive link):

Ambari -> Hive -> 配置 -> 高级 -> 自定义 hive-site

单击添加 属性

在开头插入以下内容 window:

hive.security.authorization.sqlstd.confwhitelist.append=tez.application.tags

并保存后,重启Ambari中的所有Hive服务。如果您在 'zeppelin-env.sh' 中设置正确的 Java 路径并在 'zeppelin-site.xml' 中设置正确的端口(您必须复制并重命名 'zeppelin-env.sh.template' 和 'zeppelin-site.xml.template' 在 Zeppelin/config目录,请记住Ambari也使用8080端口!)。

就我而言,唯一剩下要做的就是添加或取消注释负责 Helium plug-in 存储库(在 'zeppelin-site.xml' 中)的片段:

<property>
  <name>zeppelin.helium.registry</name>
  <value>helium,https://s3.amazonaws.com/helium-package/helium.json</value>
  <description>Enable helium packages</description>
</property>

现在您可以转到 Zeppelin sheet 右上角的 Helium 选项卡并安装您选择的插件,在我的例子中是 'zeppelin-leaflet' 可视化。瞧! Hive 中此 Kaggle 数据集的示例可视化:

https://www.kaggle.com/kartik2112/fraud-detection

祝你有愉快的一天!