在HDP-1.3.3上使用kerberos进行Oozie蜂巢动作

时间:2014-09-09 17:22:45

标签: hadoop hive oozie hortonworks-data-platform

我试图在启用kerberos的环境中从oozie hive操作执行hive脚本。

这是我的workflow.xml

<action name="hive-to-hdfs">
    <hive xmlns="uri:oozie:hive-action:0.2">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <job-xml>hive-site.xml</job-xml>
        <configuration>
            <property>
                <name>mapred.job.queue.name</name>
                <value>${queueName}</value>
            </property>
        </configuration>
        <script>script.q</script>
        <param>HIVE_EXPORT_TIME=${hiveExportTime}</param>
    </hive>
    <ok to="pass"/>
    <error to="fail"/>
     

我在尝试连接到hive Metastore时遇到问题。

  

6870 [main] INFO hive.metastore - 尝试使用URI thrift连接到Metastore://10.0.0.242:9083   心脏跳动   心脏跳动   67016 [main] WARN hive.metastore - set_ugi()不成功,可能原因:新客户端与旧服务器通话。没有它继续。   org.apache.thrift.transport.TTransportException:java.net.SocketTimeoutException:读取超时       at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129)       在org.apache.thrift.transport.TTransport.readAll(TTransport.java:84)       在org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:378)       在org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:297)

     

67018 [main] INFO hive.metastore - 在下次尝试连接之前等待1秒。   68018 [main] INFO hive.metastore - 连接到Metastore。   心脏跳动   心脏跳动   128338 [main] WARN org.apache.hadoop.hive.metastore.RetryingMetaStoreClient - MetaStoreClient丢失连接。试图重新连接。   org.apache.thrift.transport.TTransportException:java.net.SocketTimeoutException:读取超时       at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129)       在org.apache.thrift.transport.TTransport.readAll(TTransport.java:84)       在org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:378)       在org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:297)

     

129339 [main] INFO hive.metastore - 尝试使用URI thrift连接到Metastore://10.0.0.242:9083   心脏跳动   心脏跳动   189390 [main] WARN hive.metastore - set_ugi()不成功,可能原因:新客户端与旧服务器通信。没有它继续。   org.apache.thrift.transport.TTransportException:java.net.SocketTimeoutException:读取超时       at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129)       在org.apache.thrift.transport.TTransport.readAll(TTransport.java:84)       在org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:378)       在org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:297)

     

189391 [main] INFO hive.metastore - 在下次连接尝试前等待1秒。   190391 [main] INFO hive.metastore - 连接到Metastore。   心脏跳动   心脏跳动   250449 [main] ERROR org.apache.hadoop.hive.ql.parse.SemanticAnalyzer - org.apache.hadoop.hive.ql.metadata.HiveException:无法获取表SESSION_MASTER       在org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java:953)       在org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java:887)       在org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.getMetaData(SemanticAnalyzer.java:1083)       在org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.getMetaData(SemanticAnalyzer.java:1059)

当我禁用kerberos安全工作流程正常

1 个答案:

答案 0 :(得分:2)

要使Oozie Hive操作在安全群集上运行,您需要添加<credentials>部分,其中包含类型为&#39; hcat&#39;的凭据。到你的工作流程。

您的工作流程将类似于:

<workflow-app name='workflow' xmlns='uri:oozie:workflow:0.1'>
    <credentials>
        <credential name='hcat' type='hcat'>
            <property>
                <name>hcat.metastore.uri</name>
                <value>HCAT_URI</value>
            </property>
            <property> 
                <name>hcat.metastore.principal</name>
                <value>HCAT_PRINCIPAL</value>
            </property>
        </credential>
    </credentials>

    <action name="hive-to-hdfs" cred="hcat">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <job-xml>hive-site.xml</job-xml>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <script>script.q</script>
            <param>HIVE_EXPORT_TIME=${hiveExportTime}</param>
        </hive>
        <ok to="pass"/>
        <error to="fail"/>
    </action>
</workflow>

此功能也有Oozie documentation

相关问题