Thanks a lot.  I was able to use MultipleOutputs to get CLOSER to  what I want. 
i.e. using the changes mentioned below I'm able to generate multiple output 
files like:

        /test/out/2010-04-19_morning.txt-r-00000
        /test/out/2010-04-19_afternoon.txt-r-00000
        /test/out/2010-04-20_morning.txt-r-00000
        /test/out/2010-04-20_afternoon.txt-r-00000

Where each file has <host>_<varname> <value> pairs one per line like:
        host1_cpu       2.0
        host2_cpu       4.0
        host11_mem      4000.0
        host12_mem      8000.0

But my real goal is to have a multi-columned output files like:
        host1   2.0     4000.0
        host2   4.0     8000.0

Is this possible via a Recucer or do I need some post-processing?

Relevant Changes:

Added this to my Driver class:
  MultipleOutputs.addNamedOutput(job, "txt", TextOutputFormat.class, 
Text.class, FloatWritable.class);

Added this to my Reducer class:
        ...
        private MultipleOutputs mos;
         
        public void setup(Context context) { mos = new 
MultipleOutputs(context); }
        public void cleanup(Context context) throws IOException {
                try {mos.close(); } catch (InterruptedException e) {    
e.printStackTrace(); }
        }
      public static String getSubKey(String text, Integer start) {
                String[] parts = text.split("_");
                return parts[start] + "_" + parts[start+1];
      }
        public void reduce(Text key, Iterable<FloatWritable> values, Context 
context) {
        ....
                mos.write("txt", getSubKey(key,0), 
                        new FloatWritable(average.floatValue()), 
getSubKey(key,2)+".txt");
        }


Alan

----- original message --------

Subject: Re: MultipleOutputs or Partitioner
Sent: Mon, 10 May 2010
From: Sonal Goyal

Hi Alan,

You can use MultipleOutputFormat. You can override the 
generateFileName...methods to get the functionality you want. 

A partitioner controls how data moves from the mapper to the reducer, so if you 
take that approach, you will have to specify the number of reducers as the 
number of files you want, which is not the best option if some days have more 
data than the others. You also dont have control over the file name. See Tom 
White's Hadoop The Definitive Guide for an excellent example and usage.
  
Thanks and Regards,
Sonal
www.meghsoft.com


On Mon, May 10, 2010 at 5:38 PM, Some Body <[email protected]> wrote:
Hi,

I'm trying to understand how to generate multiple outputs in my reducer (using 
0.20.2+228).
Do I need MultipleOutput or should I partition my output in the mapper?

My reducer currently gets key/val input pairs like this which all end up in my 
part_r_0000 file.

   hostA_VarX_2010-05-01_morning    <FLOATVAL>
   hostA_VarY_2010-05-01_morning    <FLOATVAL>
   hostA_VarX_2010-05-01_afternoon    <FLOATVAL>
   hostA_VarY_2010-05-01_afternoon    <FLOATVAL>
   .....
   hostB_VarX_2010-05-01_morning    <FLOATVAL>
   hostB_VarY_2010-05-01_morning    <FLOATVAL>
   hostB_VarX_2010-05-01_afternoon    <FLOATVAL>
   hostB_VarY_2010-05-01_afternoon    <FLOATVAL>
   .....
   hostA_VarX_2010-05-02_morning    <FLOATVAL>
   hostA_VarY_2010-05-02_morning    <FLOATVAL>
   hostA_VarX_2010-05-02_afternoon    <FLOATVAL>
   hostA_VarY_2010-05-02_afternoon    <FLOATVAL>
   .....
   hostB_VarX_2010-05-02_morning    <FLOATVAL>
   hostB_VarY_2010-05-02_morning    <FLOATVAL>
   hostB_VarX_2010-05-02_afternoon    <FLOATVAL>
   hostB_VarY_2010-05-02_afternoon    <FLOATVAL>
   .....

But instead of 1 output file I want one output file per day/group. e.g.
   2010-05-01_morning.txt
   2010-05-01_afternoon.txt

Each <date>_<time>.txt file would contain all keys/vals for all hosts & VarNames

Thanks,
Alan


--- original message end ----

Reply via email to