Hadoop Streaming Job 在 OOzie 中不起作用

Posted

技术标签:

【中文标题】Hadoop Streaming Job 在 OOzie 中不起作用【英文标题】:Hadoop Streaming Job not working in OOzie 【发布时间】:2017-06-12 05:09:47 【问题描述】:

我正在尝试编写一个仅映射简单的 hadoop 流作业,从 hdfs 读取数据并将其推送到 vertica。

我写了一个shell脚本如下

./vsql -c "copy $TABLE from stdin delimiter E'\t' direct null '\\N';" -U $DBUSER -w $DBPWD -h $DBHOST -p $DBPORT

我已经创建了 oozie 工作流程:

 <action name="loadToVertica">
        <map-reduce>
                            <job-tracker>$jobTracker</job-tracker>
                            <name-node>$nameNode</name-node>
                            <prepare>
                                    <delete path="$nameNode/user/$USER/output/$exportDataDate"/>
                            </prepare>
                            <streaming>
                                    <mapper>shell export.sh</mapper>
                            </streaming>
                            <configuration>
                                    <property>
                                            <name>oozie.libpath</name>
                                            <value>$wfsBasePath/libs</value>
                                    </property>
                                    <property>
                                            <name>mapred.input.dir</name>
                                            <value>$nameNode/user/$USER$/exportDataDate</value>
                                    </property>
                                    <property>
                                            <name>mapred.output.dir</name>
                                            <value>$nameNode/user/$USER/output/$exportDataDate</value>
                                    </property>
                                    <property>
                                            <name>mapred.reduce.tasks</name>
                                            <value>0</value>
                                    </property>
                            </configuration>
                            <file>$wfsBasePath/libs/$STREAMING_JAR_PATH#$STREAMING_JAR_PATH</file>
                            <file>$wfsBasePath/libs/oozie-sharelib-streaming-4.2.0.2.5.3.0-37.jar#oozie-sharelib-streaming-4.2.0.2.5.3.0-37.jar</file>
                            <file>$wfsBasePath/scripts/export.sh#export.sh</file>
                            <file>$wfsBasePath/config/vsql#vsql</file>
                    </map-reduce>
            <ok to="end"/>
           <error to="end"/>
        </action>

当我运行这个时,作业的状态是失败/终止,没有任何错误消息。

【问题讨论】:

日志是怎么回事?尝试先在没有 Oozie 的情况下执行它。 没有 oozie 它运行良好。数据已成功加载到 Vertica @FieryCat 有时可能与文件夹权限有关。日志会给出答案:cd /var/log/oozie/; lsoozie job -oozie $OOZIE_URL -info job id 在纱线日志@FieryCat 中找不到任何错误 那么,请先通过以下方式启用它们:community.cloudera.com/t5/Batch-Processing-and-Workflow/… 或 ***.com/questions/32397725/… 【参考方案1】:

在 #!/bin/sh 之后添加 -e 帮助我追踪实际错误是什么。

在脚本中添加-e选项后,日志中有错误代码。

在这之后第一行看起来像:

#!/bin/sh -e

【讨论】:

以上是关于Hadoop Streaming Job 在 OOzie 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop-2.4.1学习之Streaming编程

Spark Streaming源码解读之Job详解

Spark Streaming源码解读之Job详解

第6课:Spark Streaming源码解读之Job动态生成和深度思考

Streaming、Daemon、Cron Job,你怎么用? (在红宝石中)

Spark Streaming Job 不可恢复