无法从 Oozie 工作流作业的第二个 运行 启动 Hive 操作

Unable to Start Hive Action from Second Run of Oozie Workflow Job

运行从第二个工作流作业 运行 中从 Oozie 执行 Hive Action 时,我面临一些问题。 在 Worfklow 作业的第一个 运行 运行ning 与 Pig & Hive Action 正常,但是每当作业在其第二个实例上 运行 时,在预定的时间相同的作业得到失败,Hive 异常表示无法访问 Metastore derby。 {不确定哪个 Jar 正在检查 Derby,我在哪里使用 Oracle 并且在 hive-site.xml、hive-default.xml 中更新相同}

如果作业在杀死前一个实例后重新启动,则同样会按预期完成。

使用 Hive0.9 和 Oozie 3.3.0,元存储使用 Oracle 已更新 HDFS 中的 hive-site.xml、hive-default.xml、oozie-user-hive-default.xml 以及 DFS Oozie 的本地和共享位置,但仍然无法正常工作。

我的工作流程如下:

<action name="hiveForUploadData">
<hive xmlns="uri:oozie:hive-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>oozie.launcher.mapred.job.queue.name</name>
<value>default</value>
</property>
<property>
<name>oozie.hive.defaults</name>
<value>${namenode}/user/hive-default/hive-default.xml</value> -- {have tried with hive-site.xml & oozie-user-hive-default.xml as well }
</property>
</configuration>
<script>UploadScripts.q</script>
<param>inputfile_name=/user/input/table/filename</param>
</hive>
<ok to="end"/>
<error to="error"/>
</action>
<kill name="error">
<message>Hive Action Failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>

1st 运行 获得成功,运行良好 Oracle Meta Store 也得到更新 第二次 运行 失败:无法访问 Metastore {derby} 1836 [main] 信息 hive.ql.parse.ParseDriver - 解析完成 1959 [main] INFO org.apache.hadoop.hive.metastore.HiveMetaStore - 0: Opening raw store with implemenation class:org.apache.hadoop.hive.metastore.ObjectStore 1985 [main] INFO org.apache.hadoop.hive.metastore.ObjectStore - ObjectStore,初始化调用 2278 [main] 错误 DataNucleus.Plugin - 捆绑包“org.eclipse.jdt.core”需要“org.eclipse.core.resources”,但无法解析。 2278 [main] 错误 DataNucleus.Plugin - 捆绑包“org.eclipse.jdt.core”需要“org.eclipse.core.runtime”,但无法解析。 2278 [main] 错误 DataNucleus.Plugin - 捆绑包“org.eclipse.jdt.core”需要“org.eclipse.text”,但无法解析。 2420 [main] INFO DataNucleus.Persistence - 属性 datanucleus.cache.level2 未知 - 将被忽略 2421 [main] INFO DataNucleus.Persistence - 属性 javax.jdo.option.NonTransactionalRead 未知 - 将被忽略 2421 [main] INFO DataNucleus.Persistence - =================持久性配置=============== 2426 [main] INFO DataNucleus.Persistence - DataNucleus 持久性工厂 - 供应商:“DataNucleus”版本:“2.0.3” 2426 [main] INFO DataNucleus.Persistence - DataNucleus Persistence Factory 已为数据存储初始化 URL="jdbc:derby:;databaseName=metastore_db;create=true" driver="org.apache.derby.jdbc.EmbeddedDriver" 用户名="APP" 2426 [主要] 信息 DataNucleus.Persistence - ======================================= ==================== 8704 [main] INFO DataNucleus.Datastore.Schema - 使用“None”自动启动选项初始化目录“”,架构“APP” 8704 [main] INFO DataNucleus.Datastore.Schema - 目录“”,架构“APP”已初始化 - 管理 0 类 8795 [main] INFO org.apache.hadoop.hive.metastore.ObjectStore - 使用 hive.metastore.cache.pinobjtypes="Table,StorageDescriptor,SerDeInfo,Partition,Database,Type,FieldSchema,Order 设置 MetaStore 对象 pin 类 8832 [main] INFO DataNucleus.MetaData - 为元数据初始化注册监听器 8858 [main] INFO org.apache.hadoop.hive.metastore.ObjectStore - 已初始化 ObjectStore

我不确定为什么 Oozie 不读取用户定义的 "hive-default.xml" 而同样是从 Some Jar 读取,不确定它正在使用哪个 Jar。 另外 why/how 每第一个 运行 新的 Oozie 作业获得成功,而从第二个 运行 开始作业无法读取相同的内容。 你们能帮我找出缺少的地方或需要更新的地方吗

您需要在 <configuration> 标签上方插入:

<job-xml>[HIVE SETTINGS FILE]</job-xml>

其中 [HIVE SETTINGS FILE] 是最常调用的文件 hive-site.xml。这将使您的 Hive 脚本能够连接到 Metastore。

将 OJDBC 驱动程序放置在 HDFS 的共享库位置后,问题得到解决。

上述 Jar 在 Oozie 共享位置不可用,而 Derby Jar 可用,因此 Oozie 正在尝试为 Hive-MetaStore 连接 Derby。默认。