つうか全然仕事が進んでいない。思う方向に進んでいない。していない訳ではないんだけど別方向に仕事が増えている印象がある。ということでHacheroのコードは全然手がついていない。なのでもはやこのままいくしか。→あれ。Hadoop 0.19.0が出てるじゃんすか。21日に。いやんもう。またhadoop-ec2のimageを構築し直しですのう。あとでやろう。

  • Perl with Hadoop
    • Analyzing access_logs, or any large text data
      • heavy
      • how to scale??
sudo cat /var/log/httpd/access_log|awk -F'"' '{print $2}'|awk '{print $2}'|sort|uniq -c|sort -rn|head
  • App::Hachero
    • sudo cpan App::Hachero
    • log analyzing framework
    • hadoop-streaming ready
  • Hadoop Streaimng
    • http://wiki.apache.org/hadoop/HadoopStreaming
    • mapper/reducer by other languages (than Java).
    • treats only STDIN/STDOUT
  • Hadoop with EC2/S3
    • processors with EC2, storage with S3
    • on-demand cluster!
  • Net::Amazon::HadoopEC2, Net::Amazon::HadoopEC2::S3fs
    • perl wrapper for ‘Hadoop with EC2/S3’
  • example
cat access_log | hachero.pl -c mapper.yaml | hachero.pl -c reducer.yaml
$HADOOP jar $HADOOP_STREMING \

- input input_dir \

- output output_dir \

- mapper 'hachero.pl -c mapper.yaml \
- reducer 'hachero.pl -c reducer.yaml \

- file mapper.yaml \

- file reducer.yaml \

- file MyAnalyzer.pm
# mapper.yaml

global:
    log:
        level: error
    plugin_path: .
    time_zone: Asia/Tokyo
plugins:
    - module: Input::Stdin
    - module: Parse::Common
    - module: Parse::Normalize
    - module: Analyze::MyAnalyzer
    - module: OutputLine::HadoopMap
# reducer.yaml

global:
    log:
        level: error
    plugin_path: .
    time_zone: Asia/Tokyo
plugins:
    - module: Input::Stdin
    - module: Parse::HadoopReduce
    - module: OutputLine::MyOutput
package App::Hachero::Plugin::Analyzer::MyAnalyzer;
use strict;
use warnings;
use base qw(App::Hachero::Plugin::Base);

sub analyzer : Hook {
    my ( $self, $context ) = @_;
}

package App::Hachero::Plugin::Analyzer::MyAnalyzer::Result;
use base qw(App::Hachero::Result);
__PACKAGE__->primary([qw()]);

package App::Hachero::Plugin::Output::MyOutput;
use base qw(App::Hachero::Plugin::Base);

sub output : Hook {
    my ( $self, $context ) = @_;
    my $fh = \*STDOUT;
    my $result = $context->result->{myanalyzer} or return;
    for my $data ($result->values) {
        my $hashref = $data->hashref;
        print $fh join("\t", map {$hashref->{$_}} (@{$result->primary}, 'count')), "\n";
    }
}

1;
  • TODO
    • more easier
      • Hachero plugins
      • Hadoop wrappers
      • ec2 images