使用pig来实现快速的分析爬虫及cdn日志

苦逼呀,这两天我在分析了爬虫的日志,和一小部分的cdn的日志。爬虫的日志收集cs是我们自己写的一套收集系统。 现在需要做的是离线分析。 也就是对接工单系统,可以方便的自动分析特定的日志。 以前有个哥们是个geek,分析的程序是groovy写的,虽然他已经在很大程度让我爽了很多,但是不怎么好改。 java派系的那些东西,玩不转呀。

最近爬虫很是凶猛呀。原文地址是,http://xiaorui.cc

那一开始是用python写的,逻辑也简单,就是拆分成多个文件,然后多进程处理,最后的结果入库。 总起来说,速度还是有些慢。一个5g的日志,经常干到最少40分钟。 因为日志会做域名的抽取。 爬虫log里面肯定是有很多域名的, 但是域名都是详细的域名,所以需要抽取他的一级域名。 就这个操作是很费cpu的。

其实做这件事情前,我也考虑过用pig,毕竟以前用pig从hadoop里面抽取访问次数和ip排名。 只是我印象中 pig 没有regex的功能,也就没有搜他的文档,直接用python搞的。

#coding:utf-8from urlparse import urlparsefrom buzz.lib.consts import CATEGORYimport re""" 针对没有分类和channel_name"""class knowDomainClass():    def __init__(self):        self.topHostPostfix = (            '.com','.la','.io',            '.co', '.cn','.info',            '.net', '.org','.me',            '.mobi', '.us', '.biz',            '.xxx', '.ca', '.co.jp',            '.com.cn', '.net.cn', '.org.cn',            '.mx','.tv', '.ws',            '.ag', '.com.ag', '.net.ag',            '.org.ag','.am','.asia',            '.at', '.be', '.com.br',            '.net.br',            '.bz',            '.com.bz',            '.net.bz',            '.cc',            '.com.co',            '.net.co',            '.nom.co',            '.de',            '.es',            '.com.es',            '.nom.es',            '.org.es',            '.eu',            '.fm',            '.fr',            '.gs',            '.in',            '.co.in',            '.firm.in',            '.gen.in',            '.ind.in',            '.net.in',            '.org.in',            '.it',            '.jobs',            '.jp',            '.ms',            '.com.mx',            '.nl','.nu','.co.nz','.net.nz',            '.org.nz',            '.se',            '.tc',            '.tk',            '.tw',            '.com.tw',            '.idv.tw',            '.org.tw',            '.hk',            '.co.uk',            '.me.uk',            '.org.uk',            '.vg')        self.extractPattern = r'[^\.]+('+'|'.join([h.replace('.',r'\.') for h in self.topHostPostfix])+')$'    def parse_url(self,url):        parts = urlparse(url)        host = parts.netloc#        extractPattern = r'[^\.]+('+'|'.join([h.replace('.',r'\.') for h in self.topHostPostfix])+')$'        pattern = re.compile(self.extractPattern,re.IGNORECASE)        m = pattern.search(host)        return m.group() if m else host    def if_url_class(self,url):        if re.search('(space|blog)',url):            return 2        if re.search('(ask|question)',url):            return 5        if re.search('(forum|club|bbs|thread)',url):            return 3        return 1

今天看了下文档,发现 尼玛 是支持regex的。哎。。 坑死了。 简单介绍下pig

Apache Pig是用来处理大规模数据的高级查询语言,配合Hadoop使用,可以在处理海量数据时达到事半功倍的效果,比使用Java,C++等语言编写大规模数据处理程序的难度要小N倍,实现同样的效果的代码量也小N倍。Apache Pig为大数据集的处理提供了更高层次的抽象,为mapreduce算法(框架)实现了一套类SQL的数据处理脚本语言的shell脚本,在Pig中称之为Pig Latin,在这套脚本中我们可以对加载出来的数据进行排序、过滤、求和、分组(group by)、关联(Joining),Pig也可以由用户自定义一些函数对数据集进行操作,也就是传说中的UDF(user-defined functions)。

Pig有两种运行模式:Loca模式和MapReduce模式。当Pig在Local模式下运行时,Pig只访问本地一台主机;当Pig在MapReduce模式下运行时,它将访问一个Hadoop集群和HDFS的安装位置。这时,Pig将自动地对这个集群进行分配和回收。因为Pig系统可以自动对MapReduce程序进行优化,所以当用户使用Pig Latin语言进行编程的时候,不必关心程序运行的效率,Pig系统将会自动对程序进行优化,这样可以大了节省编程时间。Pig的Local模式和MapReduce模式都有三种运行方式,分别为:Grunt Shell方式、脚本文件方式和嵌入式程序方式。

Pig是一种编程语言,它简化了Hadoop常见的工作任务。Pig可加载数据、表达转换数据以及存储最终结果。Pig内置的操作使得半结构化数据变得有意义(如日志文件)。同时Pig可扩展使用Java中添加的自定义数据类型并支持数据转换。

([a-z0-9A-Z]+\\.(com|hk|la|io|net|mx|com.cn|fm|tv|ws|cc|org|tv)).

本来想周六写个pig的文档,结果 mac下pig装的有问题。公司的那个测试机还连不上,尼玛。 现在正在下载vm,过会给大家演示下。

总起来说,pig的速度要比python要快不少,尤其是从hadoop输入文件的时候。 毕竟像python这样靠着streaming管道取数据,性能不是那么太靠谱。

使用pig来实现快速的分析爬虫及cdn日志

相关文章:

你感兴趣的文章:

标签云: