前言
几乎停顿了1年之久,很久没写博客了,一方面是在院里做项目太忙,另一方面是自己也在摸索大数据领域的技术,终于自己搭起来了个基于kafka的分布式爬虫程序,可以抓网站的图像了,不多说,先看抓的图像数据。
目前存储在elastic中的图像记录条数为1.7亿条,用了13个节点,具体的图像数据存储在hbase中。抓取的数据量超过2T,并20台机器同时抓取保持每天800w条数据增长,每天这么大的数据量当然需要一个可靠的爬虫系统。
(图1 elasticsearch中存储图像的索引) (图2 hbase中的图像)
内容:
爬虫架构图
在讲如何实现这种庞大的数据爬虫前先看下这个爬虫系统的整体架构图,方便大家理解这个爬虫能干什么事,要干什么事。
(图3 分布式爬虫架构图)
上图3的左边是我们今天要说的爬虫系统,图3 的右边是图像的存储应用系统。存储应用系统可以将我们抓的数据做实时的流计算和其他有价值的应用。
图像处理流程
图像抓下后可以对这些小图像进行拼接,然后对拼接后的图像做识别,分类。拼接流程如下:
(图4 图像拼接算法)
这么大的图那不是合成到牛年马月了,不用担心用分布式计算,这个用spark就可。算法原理后面单独讲,今天讲分布式爬虫系统。
拼接图像的应用
将google地图上的遥感图像抓取下来,进行图像拼接处理,可以做森林植被识别,建筑物识别,分析分析,比如某个深山老林新建了一个房,好家伙,竟然是违法建筑,被我查到了。下图是通过抓取google很多的小图像,拼接成一个陆家嘴的大卫星图,绝对高清。
(图5 图像拼接图)
爬虫系统组成
要抓数据首先需要知道要抓什么数据,因此必须有一个任务的主机来分配要抓的任务。然后,拿到这些任务的机器要能知道这些任务是什么。最后这些数据抓到了以后如何分类的保存,已经如何处理失败的任务,总不能某些任务抓图像失败后就丢掉了吧。因此我们爬虫系统主要有3部分组成。(1)任务的发放(2)抓取任务中的数据(3)将任务结果输出至对应的管道处理
这三部分我还是拆开放到后面的章节讲好了。