苦逼呀,这两天我在分析了爬虫的日志,和一小部分的cdn的日志。爬虫的日志收集cs是我们自己写的一套收集系统。 现在需要做的是离线分析。 也就是对接工单系统,可以方便的自动分析特定的日志。 以前有个哥们是个geek,分析的程序是groovy写的,虽然他已经在很大程度让我爽了很多,但是不怎么好改。 java派系的那些东西,玩不转呀。
最近爬虫很是凶猛呀。原文地址是,http://xiaorui.cc
那一开始是用python写的,逻辑也简单,就是拆分成多个文件,然后多进程处理,最后的结果入库。 总起来说,速度还是有些慢。一个5g的日志,经常干到最少40分钟。 因为日志会做域名的抽取。 爬虫log里面肯定是有很多域名的, 但是域名都是详细的域名,所以需要抽取他的一级域名。 就这个操作是很费cpu的。
其实做这件事情前,我也考虑过用pig,毕竟以前用pig从hadoop里面抽取访问次数和ip排名。 只是我印象中 pig 没有regex的功能,也就没有搜他的文档,直接用python搞的。
#coding:utf-8
from urlparse import urlparse
from buzz.lib.consts import CATEGORY
import 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管道取数据,性能不是那么太靠谱。
带我,ruishen
上次在群里说,写个详细的pig,请问详细的在哪里?
正在准备下,这次环境有些问题,就写点概念性质的东西。