如何通过hive2 oozie操作连接到hive服务器2?

时间:2019-11-06 07:30:09

标签: apache-zookeeper oozie hortonworks-data-platform beeline

我无法通过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

SHARELIB动作路径#

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)

2 个答案:

答案 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来工作