我试图在启用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安全工作流程正常
答案 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。