【问题标题】:OOZIE workflow: HIVE table did not exists but directory created in HDFSOOZIE 工作流程:HIVE 表不存在,但在 HDFS 中创建了目录
【发布时间】:2016-03-06 13:51:40
【问题描述】:

我正在尝试使用OOZIE 工作流运行HIVE 操作。下面是蜂巢动作:

create table abc (a INT);

我可以在 HDFS 中找到内部表(在/user/hive/warehouse 下创建目录abc)但是当我从hive> 触发命令SHOW TABLES 时,我看不到该表。

这是workflow.xml 文件:

<workflow-app xmlns="uri:oozie:workflow:0.2" name="hive-wf">
 <start to="hiveac"/>
 <action name="hiveac">
    <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <!-- <prepare> <delete path="${nameNode}/user/${wf:user()}/case1/out"/> </prepare> -->
        <!-- <job-xml>hive-default.xml</job-xml>-->
            <configuration>
                <property>
                    <name>oozie.hive.defaults</name>
                    <value>hive-default.xml</value>
                </property>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <script>script.q</script>
            <!-- <param>INPUT=/user/${wf:user()}/case1/sales_history_temp4</param>
            <param>OUTPUT=/user/${wf:user()}/case1/out</param> -->
        </hive>
  <ok to="end"/>
  <error to="fail"/>
 </action>
   <kill name="fail">
   <message>Pig Script failed!!!</message>
   </kill>
   <end name="end"/>
</workflow-app>

这是hive-default.xml 文件:

<configuration>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost/metastore</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>org.apache.derby.jdbc.EmbeddedDriver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hiveuser</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
</property>
<property>
  <name>datanucleus.autoCreateSchema</name>
  <value>false</value>
</property>
<property>
  <name>datanucleus.fixedDatastore</name>
  <value>true</value>
</property>
<property>
  <name>hive.stats.autogather</name>
  <value>false</value>
</property>
</configuration>

这是job.properties 文件:

nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
queueName=default
oozie.libpath=/user/oozie/shared/lib
#oozie.use.system.libpath=true
oozie.wf.application.path=${nameNode}/user/my/jobhive

日志没有给出任何错误:

stderr logs

Logging initialized using configuration in jar:file:/var/lib/hadoop-hdfs/cache/mapred/mapred/local/taskTracker/distcache/3179985539753819871_-620577179_884768063/localhost/user/oozie/shared/lib/hive-common-0.9.0-cdh4.1.1.jar!/hive-log4j.properties
Hive history file=/tmp/mapred/hive_job_log_mapred_201603060735_17840386.txt
OK
Time taken: 9.322 seconds
Log file: /var/lib/hadoop-hdfs/cache/mapred/mapred/local/taskTracker/training/jobcache/job_201603060455_0012/attempt_201603060455_0012_m_000000_0/work/hive-oozie-job_201603060455_0012.log  not present. Therefore no Hadoop jobids found

我遇到了一个类似的帖子:Tables created by oozie hive action cannot be found from hive client but can find them in HDFS

但这并没有解决我的问题。请告诉我如何解决此问题。

【问题讨论】:

  • 看起来您指示 Hive 使用 Derby 实例化 "sandbox" 元存储,而不是连接到真正的元存储(MySQL?)所以 CREATE TABLE 被写入 Derby临时数据库...然后丢失了。
  • 顺便说一句,你为什么要使用可敬的workflow:0.2?你安装了哪个版本的 Oozie??
  • 我相信oozie.hive.defaults 是一个遗留问题,忘记它吧——除非你有一个非常老的版本。
  • 你有一个真正的集群,还是只有一个节点的假的?如果有多个节点,默认 YARN 类路径中是否有有效的hive.xml
  • 我正在使用Oozie client build version: 3.2.0-cdh4.1.1。这是在 CDH 4.1.1 上运行的非常旧的版本,使用 workflow:0.2oozie.hive.defaults。我有一个单节点集群。请让我知道在我的metastore 中与mysql 连接需要进行哪些更改。

标签: hadoop mapreduce hive cloudera oozie


【解决方案1】:

我已经有几个月没有使用 Oozie了(并且由于法律原因没有保留档案)而且无论如何它是 V4.x 所以有点猜测......

  1. 将您的有效hive-site.xml 上传到某处的 HDFS
  2. 告诉 Oozie 在运行 Hive 类之前将所有这些属性注入到 Launcher Configuration 中,以便它继承所有这些属性,使用 &lt;job-xml&gt;/some/hdfs/path/hive-site.xml&lt;/job-xml&gt;
  3. 删除对oozie.hive.defaults 的任何引用

警告:所有这些都假设您的沙盒集群有一个持久元存储——即您的 hive-site.xml 并不指向每次都会被擦除的 Derby 嵌入式数据库!

【讨论】:

  • 我尝试将oozie.hive.defaults 更改为&lt;job-xml&gt;,但出现错误:Unable to connect to the metastore,因此将其恢复为oozie.hive.defaults。请建议上面发布的hive-default.xml 中有什么问题以及我需要进行哪些更改才能指向正确的持久性元存储
猜你喜欢
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多