如何从流媒体输出Hadoop EL计数器减少Oozie触发的工作?

时间:2015-10-22 19:00:01

标签: hadoop oozie hadoop-streaming

我正在使用Oozie触发流式MapReduce作业,我想收集以下Hadoop EL常量:

MAP_IN:Hadoop映射器输入记录计数器名称。

MAP_OUT:Hadoop映射器输出记录计数器名称。

REDUCE_IN:Hadoop reducer输入记录计数器名称。

REDUCE_OUT:Hadoop reducer输入记录计数器名称。

我看到可以使用

访问这些内容

$ {hadoop:counters('mr-action')[RECORDS] [REDUCE_OUT]}

但是,我不知道如何通过STDOUT将这些值输出回屏幕,或者从我正在启动Oozie工作流程的服务器上输出到HDFS中的文件。
我已经尝试将这些值传递给shell动作,然后回显/附加到文件,但我相信这是在数据节点上处理的,所以我无法看到该输出。我也尝试将oozie.action.external.stats.write设置为true,如同一个线程建议的那样,然后调用

oozie job -info -verbose

但我仍然没有看到这些计数器显示在“外部统计”字段下。任何有关如何获得这些计数器输出的建议都会非常有用。

1 个答案:

答案 0 :(得分:4)

在我做oozie job -info job-id -verbose之前没有显示外部统计信息。关键是做出以下改变。

在workflow.xml文件中,在我想要收集计数器的操作下,将以下内容添加到配置中:

<action name="mr-action">
    <configuration>
        <property>
            <name>oozie.action.external.stats.write</name>
            <value>true</value>
        </property>
    </configuration>
</action>

然后,在运行作业后,在命令行中执行以下操作:

oozie job -info job-id @ mr-action -verbose

它给了我正在寻找的计数器。