0 Star 0 Fork 22

妙吉幸福启俱霖/exCrawler

forked from sixliu/crawler 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
readme 5.51 KB
一键复制 编辑 原始数据 按行查看 历史
38134 提交于 2017-04-15 18:13 . update
整个分布式系统引用了hadoop job jobtracker tasktracker 分别对应本系统jobSnapshot workerSnapshot 概念。
每个job有自己的工作空间。
支持多节点,多线程运行。
状态说明:
job状态:
READY 准备
WAITING_EXECUTED 等待执行 job被提交待执行队列中状态
EXECUTING 执行 job正在执行状态
SUSPEND 暂停 job被暂停状态
STOP 停止 job被停止状态或者 工作空间处理数据为空,并且触发此job的job状态为stop时状态
FINISHED 完成 工作空间处理数据为空,并且触发此job的job状态为finished时状态
worker状态:
READY 准备 worker初始化时,还没有运行时状态
STARTED 开始 worker提交到线程池运行时状态
WAITED 等待 当工作空间为空时状态
SUSPEND 暂停 job被暂停,worker会被设置此状态
STOPED 停止 job被停止状态或者工作空间处理数据为空,并且触发此job的job状态为stop时状态,worker会被设置此状态
FINISHED 完成 工作空间处理数据为空,并且触发此job的job状态为finished时状态,worker会被设置此状态
DESTROY 销毁 worker退出工作循环然后销毁
对于master调度器来说job的触发类型为手动触发,定时触发,job依赖关系触发三种.
手动触发:通过手动调用master调度器执行job,当job工作空间里的处理数据为空时,job会以finished状态结束
定时触发:master定时调度执行job,当job工作空间里的处理数据为空时,job会以finished状态结束
job依赖关系触发:job与job间可能存在当前job a的下个job b流程关系,可以通过配置成并发或者串行。
如果b job是被a job触发执行的话,那么当job b 工作空间里的处理数据为空时,job b的worker进入wait状态,此时
会检查job a是否运行。如果在运行那么job b的worker休眠指定时间继续运行,如果job a 状态为stop 或者 finish
job b的状态会保持一样的状态结束。
对于worker调度器来说job的触发类型只有master触发一种。
系统采用zookeeper作为节点注册,集群锁等实现。
系统采用redis作为集群缓存和job工作空间实现。
系统采用netty作为集群rpc实现
系统采用mysql作为元数据存储
1:clone exCrawler项目
2:进入exCrawler目录下 命令行 mvn eclipse:eclipse
3:将exCrawler/oklib下的jar替换到本地Maven库对应的jar包
4:打开eclipse,导入exCrawler为可执行的Maven项目.
5:StartMain 是整个项目的启动类
6:SchedulerManager 实现了任务的调度
7:AbstractCrawlWorker 是整个爬虫工作流程类,采用模板设计模式
8:AbstractWorker 是整个worker流程类(跟业务没关系),采用模板设计模式
9:mysql初始化脚本 在src/main/script 下
整个系统分层:
后台管理api层
后台管理服务层
任务调度层
节点基础层
数据存储层
执行任务流程:
人为触发任务------
job依赖关系触发 -->主节点执行任务,在缓存中初始化任务执行信息--->主节点计算出执行任务的节点List---->call工作节点执行任务--->
定时触发任务------
---->工作节点接收到主节点执行任务的信号--->工作节点创建worker--->工作节点运行worker--->通知主节点worker运行--->
---->主节点接收到工作节点worker运行信息,并登记运行信息--->
--->工作空间处理数据为空--->任务完成
---->worker运行--->停止 ----工作节点worker通知主节点,worker运行结束--->
--->手动停止--------------->任务停止
---->主节点接收到工作节点worker运行结束信号--->检查任务的全部worker是否结束--->没有全部结束,不做任何处理
---->全部结束,统计各worker的运行信息,并生成运行任务运行记录入库,删除缓存中任务运行记录--->
---->如果任务是完成结束的话,那么检查检查任务是否有下一个执行任务
爬虫采集流程:
初始化种子链接到工作空间(工作空间由同一个任务下的所有worker共享)--->从工作空间读取处理数据--->没有读取到数据时爬虫任务视为finished
读取到处理数据--->下载前数据处理--->下载器处理数据--->下载后处理(接口可实现验证码识别和用户登录)
--->解析数据(支持普通的cssQuery抽取,表格单挑数据抽取,表格多条数据抽取,json抽取,正则抽取)--->解析后处理
--->存储(支持db保存,http发送,文件保存,其他存储等方式)
系统默认输出字段:
采集数据id(此id跟业务无关):执行任务的workerName+当前worker计数
采集数据的日期
采集数据的数据源url
监控概述:
1.对于目标网站健康度监控
2.对于目标网站版本监控
3.对于自身节点健康度监控
4.对于任务每次执行情况监控
5.对于代理ip健康度监控
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/wangweijason/spider.git
git@gitee.com:wangweijason/spider.git
wangweijason
spider
exCrawler
master

搜索帮助