Ozzie 流无法使用 UDF 添加命令的 hive-ql

Posted

技术标签:

【中文标题】Ozzie 流无法使用 UDF 添加命令的 hive-ql【英文标题】:Ozzie flow not able to hive-ql having UDF add command 【发布时间】:2014-03-21 18:30:46 【问题描述】:

我正在创建 oozie 工作流,我按顺序调用 hive sqls。

第一个 sql 具有简单的转换逻辑。而第二个有临时函数创建命令和添加查找文件命令。我在 sql 中进一步使用这个 UDF。

添加 JAR **;

将临时函数 XXXXX 创建为 ...;

添加文件*;

<workflow-app xmlns="uri:oozie:workflow:0.4" name="hive-wf">
    <credentials>
        <credential name="hive_credentials" type="hcat">
            <property>
                <name>hcat.metastore.uri</name>
                <value>XXXXXXXX</value>
            </property>
            <property>
                <name>hcat.metastore.principal</name>
                <value>XXXXXXXX</value>
            </property>
        </credential>
    </credentials>
    <start to="hive-1" />
    <action name="hive-1" cred="hive_credentials">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>XXXXXXX</job-tracker>
            <name-node>XXXXXXX</name-node>
            <job-xml>/XXXXXX/oozie/oozie-hive-site.xml</job-xml>
            <configuration>
               <property>
                <name>mapred.job.queue.name</name>
                <value>default</value>
            </property>
        </configuration>
        <script>/XXXXXXX/hive_1.sql</script>
    </hive>
    <ok to="hive-2" />
    <error to="fail" />
</action>
<action name="hive-2" cred="hive_credentials">
    <hive xmlns="uri:oozie:hive-action:0.2">
        <job-tracker>XXXXXXXX</job-tracker>
        <name-node>XXXXXXXX</name-node>
        <job-xml>/XXXXXX/oozie/oozie-hive-site.xml</job-xml>
        <configuration>
            <property>
                <name>mapred.job.queue.name</name>
                <value>default</value>
            </property>
        </configuration>
        <script>/XXXXXXX/hive_2.sql</script>
    </hive>
    <ok to="end" />
    <error to="fail" />
</action>
<kill name="fail">
    <message>Hive failed, error message[$wf:errorMessage(wf:lastErrorNode())]</message>
</kill>
<end name="end" />

第一个 hql 脚本执行成功。执行第二个 hql 脚本时工作流被终止,出现以下错误。

JOB[0000044-140317190624992-oozie-oozi-W] ACTION[-] E1100:命令前置条件在执行前不成立,[, coord action is null],错误码:E1100

在执行 ADD UDF 的命令时抛出错误。(ADD JAR,CREATE TEMPORARY,ADD FILE)。

我搜索了这个错误,我得到了一些忽略错误的链接!!!

但是,我使用第二个 Hql 脚本中给出的 hive UDF 的实际 sql 没有被执行。

你能帮忙吗?

【问题讨论】:

【参考方案1】:

add jar 路径是本地机器路径。

Oozie 操作在数据节点上运行。有可能它在datanode上找不到jar,因此会出错(检查mapreduce日志,你会找到原因)

如果这是一个问题,一种解决方法是将文件放入 HDFS 并在执行期间将其复制到数据节点上的本地文件系统

【讨论】:

以上是关于Ozzie 流无法使用 UDF 添加命令的 hive-ql的主要内容,如果未能解决你的问题,请参考以下文章

MySQL UDF 插件无法执行 Shell 命令(使用 system() 或 execl())

无法在配置单元中添加 UDF

从 ozzie hadoop 运行 install pig

UnsupportedOperationException:无法评估表达式:.. 添加新列 withColumn() 和 udf()

MySQL UDF提权执行系统命令

如何在 Amazon EMR 上的 pig 中使用 Python 流 UDF