The example is from the first version of the book, and I had to switch back
to V 0.20 of HBase for it to compile.

I read them on Safari. I got the second edition, and it does not have this
example at all.

After I have gone back to HBase .20 as a server, the example ran.

Thank you,
Mark

On Thu, Jan 27, 2011 at 11:51 AM, Stack <[email protected]> wrote:

> Where did you get the code from?   From
> https://github.com/tomwhite/hadoop-book/?  Version 1 or 2 of the book?
>  If the code at github hangs, let us know and we'll fix it.
>
> St.Ack
>
> On Thu, Jan 27, 2011 at 9:07 AM, Mark Kerzner <[email protected]>
> wrote:
> > Example 12-1. A MapReduce application to count the number of rows in an
> > HBase table
> >
> > The code below hangs. Could it be because I am using the 0.89 version of
> > HBase when running, but 0.20 for the API (that's what this is example is
> > written for?
> >
> > Thank you,
> > Mark
> >
> > public class RowCounter extends Configured implements Tool {
> >  // Name of this 'program'
> >  static final String NAME = "rowcounter";
> >
> >  static class RowCounterMapper
> >  implements TableMap<ImmutableBytesWritable, RowResult> {
> >    private static enum Counters {ROWS}
> >
> >    public void map(ImmutableBytesWritable row, RowResult value,
> >        OutputCollector<ImmutableBytesWritable, RowResult> output,
> >        Reporter reporter)
> >    throws IOException {
> >      boolean content = false;
> >      for (Map.Entry<byte [], Cell> e: value.entrySet()) {
> >        Cell cell = e.getValue();
> >        if (cell != null && cell.getValue().length > 0) {
> >          content = true;
> >          break;
> >        }
> >      }
> >      if (!content) {
> >        // Don't count rows that are all empty values.
> >        return;
> >      }
> >      // Give out same value every time.  We're only interested in the
> row/key
> >      reporter.incrCounter(Counters.ROWS, 1);
> >    }
> >
> >    public void configure(JobConf jc) {
> >      // Nothing to do.
> >    }
> >
> >    public void close() throws IOException {
> >      // Nothing to do.
> >    }
> >  }
> >
> >  public JobConf createSubmittableJob(String[] args) throws IOException {
> >    JobConf c = new JobConf(getConf(), getClass());
> >    c.setJobName(NAME);
> >    // Columns are space delimited
> >    StringBuilder sb = new StringBuilder();
> >    final int columnoffset = 2;
> >    for (int i = columnoffset; i < args.length; i++) {
> >      if (i > columnoffset) {
> >        sb.append(" ");
> >      }
> >      sb.append(args[i]);
> >    }
> >    // Second argument is the table name.
> >    TableMapReduceUtil.initTableMapJob(args[1], sb.toString(),
> >      RowCounterMapper.class, ImmutableBytesWritable.class,
> RowResult.class, c);
> >    c.setNumReduceTasks(0);
> >    // First arg is the output directory.
> >    FileOutputFormat.setOutputPath(c, new Path(args[0]));
> >    return c;
> >  }
> >
> >  static int printUsage() {
> >    System.out.println(NAME +
> >      " <outputdir> <tablename> <column1> [<column2>...]");
> >    return -1;
> >  }
> >
> >  public int run(final String[] args) throws Exception {
> >    // Make sure there are at least 3 parameters
> >    if (args.length < 3) {
> >      System.err.println("ERROR: Wrong number of parameters: " +
> args.length);
> >      return printUsage();
> >    }
> >    JobClient.runJob(createSubmittableJob(args));
> >    return 0;
> >  }
> >
> >  public static void main(String[] args) throws Exception {
> >    HBaseConfiguration c = new HBaseConfiguration();
> >    int errCode = ToolRunner.run(c, new RowCounter(), args);
> >    System.exit(errCode);
> >  }
> > }
> >
>

Reply via email to