【问题标题】:SequenceFile Input format not recognized in Oozie workflow.xml?在 Oozie workflow.xml 中无法识别 SequenceFile 输入格式?
【发布时间】:2014-12-06 23:39:08
【问题描述】:

我有一个 MR 程序,它可以在一堆 SequenceFile 上完美运行,并且输出符合预期。 当我出于某种原因尝试通过 Oozie WorkFlow 实现相同功能时,无法识别 InputFormat 类属性,我觉得输入仅被视为默认 TextInputFormat。

这是映射器的声明方式。 SequenceFile 键为 LongWritable,值为 Text。

public static class FeederCounterMapper extends Mapper<LongWritable, Text, Text, IntWritable>{

    // setup map function for stripping the feeder for a zone from the input
    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException{

        final int count = 1;            

        // convert input rec to string          
        String inRec = value.toString();

        System.out.println("Feeder:" + inRec);

        // strip out the feeder from record
        String feeder = inRec.substring(3, 7);          

        // write the key+value as map output
        context.write(new Text(feeder), new IntWritable(count));
    }
}

我的应用程序的工作流布局如下

 /{$namenode}/workflow.xml
 /{$namenode}/lib/FeederCounterDriver.jar

下面是我的workflow.xml。 $namenode、$jobtracker、$outputdir、$inputdir 在 job.properties 文件中定义。

<map-reduce>
    <job-tracker>${jobTracker}</job-tracker>
    <name-node>${nameNode}</name-node>
    <prepare>
    <delete path="${nameNode}/${outputDir}"/>
    </prepare>
  <configuration>
    <property>
        <name>mapred.reducer.new-api</name>
        <value>true</value>
    </property>
    <property>
        <name>mapred.mapper.new-api</name>
        <value>true</value>
    </property>
    <property>
        <name>mapreduce.job.queue.name</name>
        <value>${queueName}</value>
    </property>
    <property>
        <name>mapred.input.dir</name>
        <value>/flume/events/sincal*</value>
    </property>
    <property>
        <name>mapred.output.dir</name>
        <value>${outputDir}</value>
    </property>
    <property>
        <name>mapred.input.format.class</name>
        <value>org.apache.hadoop.mapred.SequenceFileInputFormat</value>
    </property>
    <property>
        <name>mapred.output.format.class</name>
        <value>org.apache.hadoop.mapred.TextOutputFormat</value>
    </property>
    <property>
        <name>mapred.input.key.class</name>
        <value>org.apache.hadoop.io.LongWritable</value>
    </property>
    <property>
        <name>mapred.input.value.class</name>
        <value>org.apache.hadoop.io.Text</value>
    </property>
    <property>
        <name>mapred.output.key.class</name>
        <value>org.apache.hadoop.io.Text</value>
    </property>
    <property>
        <name>mapred.output.value.class</name>
        <value>org.apache.hadoop.io.IntWritable</value>
    </property>
    <property>
        <name>mapreduce.map.class</name>
        <value>org.poc.hadoop121.gissincal.FeederCounterDriver$FeederCounterMapper</value>
    </property>
    <property>
        <name>mapreduce.reduce.class</name>
        <value>org.poc.hadoop121.gissincal.FeederCounterDriver$FeederCounterReducer</value>
    </property>
    <property>
        <name>mapreduce.map.tasks</name>
        <value>1</value>
    </property>                
</configuration>
</map-reduce>

我运行 MR 作业时粗壮的 sn-p(前 2 行)是

 Feeder:00107371PA1700TEET67576     LKHS  5666LH 2.....           
 Feeder:00107231PA1300TXDS  8731TX 1FSHS  8731FH 1.....              

当我使用 Ooozie 工作流程运行时,输出的 sn-p(前 3 行)是

 Feeder:SEQ!org.apache.hadoop.io.LongWritableorg.apache.hadoop.io.Text�������b'b��X�...
 Feeder:��00105271PA1000FSHS  2255FH 1TXDS  2255TX 1.....
 Feeder:��00103171PA1800LKHS  3192LH 2LKHS  2335LH 1.....

对于 Oozie 工作流的上述输出,我非常怀疑甚至考虑了 workflow.xml 中提到的输入格式 SequenceFileInputFormat,否则我觉得这被覆盖了。

对此的任何投入都会有所帮助。谢谢

【问题讨论】:

    标签: hadoop mapreduce oozie


    【解决方案1】:

    在作业跟踪器中找到为这个 mapreduce 作业创建的 job.xml,并查看那里设置的输入格式类是什么。这将确认是否是输入格式的问题。

    【讨论】:

      【解决方案2】:

      我遇到了一个非常相似的问题,我让 oozie 通过像这样设置我的属性来使用正确的输入格式

      <property>
          <name>mapreduce.inputformat.class</name>
          <value>org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat</value>
      </property>
      

      所以要从属性名称中删除一个点(检查您的版本)和要更改的类。

      【讨论】:

      • 我运行 Hadoop 1.2.1 而您给出的解决方案是针对 Hadoop 2.x 的?我对吗 ?谢谢。
      • 抱歉耽搁了,这也适用于 1.2.x。
      猜你喜欢
      • 2014-10-05
      • 1970-01-01
      • 2019-06-10
      • 2013-06-12
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      相关资源
      最近更新 更多