【问题标题】:HBase connection in mapreduce running from Oozie workflow fails从 Oozie 工作流运行的 mapreduce 中的 HBase 连接失败
【发布时间】:2017-03-08 10:57:01
【问题描述】:

我正在将我的 mapreduce 作业作为来自 Oozie 工作流的 java 操作运行。 当我在我的 hadoop 集群中运行我的 mapreduce 时,它​​运行成功,但是当我使用 Oozie 工作流中的相同 jar 运行时,它会抛出

这是我的工作流 .xml

<workflow-app name="HBaseToFileDriver" xmlns="uri:oozie:workflow:0.1">

    <start to="mapReduceAction"/>
        <action name="mapReduceAction">
                <java>
                         <job-tracker>${jobTracker}</job-tracker>
                        <name-node>${nameNode}</name-node>
                        <prepare>
                                <delete path="${outputDir}"/>
                        </prepare>

                        <configuration>
                                <property>
                                        <name>mapred.mapper.new-api</name>
                                        <value>true</value>
                                </property>
                                <property>
                                        <name>mapred.reducer.new-api</name>
                                        <value>true</value>
                                </property>
                                 <property>
                                        <name>oozie.libpath</name>
                                        <value>${appPath}/lib</value>
                                </property>
                                <property>
                                    <name>mapreduce.job.queuename</name>
                                    <value>root.fricadev</value>
                                </property>

                            </configuration>
                                <main-class>com.thomsonretuers.hbase.HBaseToFileDriver</main-class>

                                    <arg>fricadev:FinancialLineItem</arg>


                                <capture-output/>
                </java>
                <ok to="end"/>
                <error to="killJob"/>
        </action>
        <kill name="killJob">
            <message>"Killed job due to error: ${wf:errorMessage(wf:lastErrorNode())}"</message>
        </kill>
    <end name="end" />
</workflow-app>

当我在 YARN 中看到日志时,以下是我的异常。 即使显示成功,但没有生成输出文件。

【问题讨论】:

  • 您是否尝试检查stackoverflow.com/questions/33829017/…。你是如何使用 kutil 生成 keytab 文件的?
  • @SUDARSHAN 你从哪里得到这个异常?它是 Java 动作异常的一部分吗?你能扩展日志吗?
  • @DeepanRam 是使用 kutil 。但不知道在 oozie 工作流目录中将生成的密钥选项卡文件保存在哪里。

标签: mapreduce oozie hadoop2 kerberos-delegation


【解决方案1】:

你看过Oozie Java Action

IMPORTANT: In order for a Java action to succeed on a secure cluster, it must propagate the Hadoop delegation token like in the following code snippet (this is benign on non-secure clusters):

// propagate delegation related props from launcher job to MR job
if (System.getenv("HADOOP_TOKEN_FILE_LOCATION") != null) {
    jobConf.set("mapreduce.job.credentials.binary", System.getenv("HADOOP_TOKEN_FILE_LOCATION"));
}

您必须从系统环境变量中获取HADOOP_TOKEN_FILE_LOCATION 并设置为属性mapreduce.job.credentials.binary

HADOOP_TOKEN_FILE_LOCATION 由 oozie 在运行时设置。

【讨论】:

  • 添加后我在 map reduce 中收到警告,例如属性 mapreduce.job.credentials.binary 的值不能为空
  • 这就是我设置的方式,但如果 (System.getenv("HADOOP_TOKEN_FILE_LOCATION") != null) { hbaseConf.set("mapreduce.job.credentials.binary", System. getenv("HADOOP_TOKEN_FILE_LOCATION"));
  • 是的,这在 hadoop2 中也可以正常工作。检查节点管理器日志中的 syslog 和 stderr。
  • 再次出现同样的错误。请查看错误日志一次。
  • 这是常见的日志,我们无法从中找到根本原因。粘贴来自 nodemanager 的完整错误日志。
猜你喜欢
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 2014-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多