我无法通过oozie的Hive2动作连接到Hive。 jdbcUrl已启用zooKeeper服务发现。我的数据平台是Hortonworks 2.6。
最初,我试图通过python脚本连接到beelne,而该脚本是由oozie的shell动作执行的。但是无法做到。所以我尝试使用hive2操作来代替。但是,即使那样也不起作用。直线的jdbcURL没有SSL。它启用了zooKeeper服务发现。
<workflow-app xmlns="uri:oozie:workflow:0.3" name="hive2-wf">
<start to="hive2-node"/>
<action name="hive2-node">
<hive2 xmlns="uri:oozie:hive2-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<jdbc-url>${jdbcURL}</jdbc-url>
<script>table_create.hql</script>
</hive2>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Hive2 (Beeline) action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
我面临的错误是“ org.apache.hive.jdbc.HiveConnection:打开会话时出错”。
我尝试了以下属性。但仍然无法正常工作: oozie.use.system.libpath = true oozie.libpath = hdfs:// host:8020 / user / oozie / share / lib / lib_20180801150051 oozie.wf.application.path = hdfs:// host / user / pid / hive2
oozie.action.sharelib.for.hive = hive,hcatalog,sqoop jdbcURL = jdbc:hive2:// 主机:2181(zookeeper仲裁) /; serviceDiscoveryMode = zooKeeper; zooKeeperNamespace = hiveserver2 hive_query = table_creation.hql
我也注意到一件事。但是不知道它有多重要。我使用的JDBC URL具有三个不同的Zookeeper仲裁: jdbcURL = jdbc:hive2:// host1:2181,host2:2181,host3:2181 / ; serviceDiscoveryMode = zooKeeper; zooKeeperNamespace = hiveserver2
但是当我运行oozie工作流程时,它使用的端口是不同的: 连接到jdbc:hive2:// host1:2181,host2:2181,host3:2181 /; serviceDiscoveryMode = zooKeeper; zooKeeperNamespace = hiveserver2 错误:无法建立与jdbc:hive2:// host1:10001 /;的连接; serviceDiscoveryMode = zooKeeper; zooKeeperNamespace = hiveserver2:HTTP响应代码:401(状态= 08S01,代码= 0)
答案 0 :(得分:0)
我们需要更多信息。您可以共享oozie属性文件吗? 也许您需要定义oozie.action.sharelib.for.hive,类似 oozie.action.sharelib.for.hive = hive,hatalog。 你尝试过吗?还要确保在相应的sharelib中有hive-site.xml,或者甚至可以尝试将其保持在将工作流xml放在hdfs位置内的同一顺序中。参见下面的示例
nameNode=hdfs://sandbox.hortonworks.com:8020
jobTracker=sandbox.hortonworks.com:8050
queueName=defaultappPath=${nameNode}/<HDFS_path_where_workflow.xml_file>
oozie.use.system.libpath=true
oozie.libpath=${nameNode}/user/oozie/share/lib/lib_20161025075203/
oozie.wf.application.path=${appPath}
#SHARELIB PATH FOR ACTION#
oozie.action.sharelib.for.hive=hive,hcatalog,sqoop
答案 1 :(得分:0)
它通过在Hive凭据中提供jdbcURL和jdbcPrincipal并将它们传递给hive2 action来工作