Hive Job log解析——perl脚本

Hive Job log解析

catparseHiveJobLog.pl

use Data::Dumper;

if (!defined($ARGV[0]) or $ARGV[0] eq '')
{
    print "useage: perl parseJobHistory.pl filename\n";
    exit;
}

my $filename = $ARGV[0];
my $json = new JSON;

my %QueryStatus;
my %TaskStatus;

open FILE, "<$filename" or print("can't open $filename\n");
while(<FILE>)
{
    chomp;
    my $spacepos = index($_,' ');
    my $type = substr($_,0,$spacepos);
    my $info = substr($_,$spacepos+1,length $_);
    if(lc($type) eq 'querystart' || lc($type) eq 'queryend')
    {
        my %parseBuffer;
        $info =~ s/:" /:"/g;
        while($info =~ s/(\w+?)="(.*?)"( |$)//)
        {
            $parseBuffer{$1} = $2;
        }
        my $queryid = $parseBuffer{'QUERY_ID'};
        foreach my $key ( keys %parseBuffer )
        {
            next if $key eq 'QUERY_ID';
            $QueryStatus{$queryid}{$key} = $parseBuffer{$key};
        }
    }elsif(lc($type) eq 'taskstart' || lc($type) eq 'taskend')
    {
        my %parseBuffer;
        $info =~ s/:" /:"/g;
        while($info =~ s/(\w+?)="(.*?)"( |$)//)
        {
            $parseBuffer{$1} = $2;
        }
        my $queryid = $parseBuffer{'QUERY_ID'};
        my $taskid = $parseBuffer{'TASK_ID'};
        foreach my $key ( keys %parseBuffer )
        {
            next if $key eq 'QUERY_ID' || $key eq 'TASK_ID';
            if($key eq 'TASK_COUNTERS')
            {
                my %taskcounters;
                while ($parseBuffer{$key} =~ s/(.*?):(.*?)(,|$)//)
                {
                   $taskcounters{$1} = $2; 
                }
                foreach my $ckey ( keys %taskcounters )
                {
                    $TaskStatus{$queryid}{$taskid}{$key}{$ckey} = $taskcounters{$ckey};
                }
            }else
            {
                $TaskStatus{$queryid}{$taskid}{$key} = $parseBuffer{$key};
            }
        }
    }
    %parseBuffer = {};
}
close(FILE);

print Dumper %QueryStatus;
print Dumper %TaskStatus;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值