zoukankan      html  css  js  c++  java
  • 分布式爬虫部署,爬虫需要什么样的服务器配置,现在爬虫岗位都要会这个

    ####

    做分布式爬虫和搜索引擎对于服务器配置有什么要求?

    实验室要做主题爬虫,附带简单的搜索查询功能,现在要租用10~20台服务器,不知道什么配置好。
    我们之前使用了三台服务器(租用的阿里云),用nutch1.7+hdfs爬取8000个URL(两层深度)用了两个多小时,第三层达到了40万用了3天还没完全爬完,感觉很慢。
    服务器配置如下:
    - 服务器A:主节点CPU 4核,内存32G,20Mbps(峰值)公网带宽(按流量)
    - 服务器B,C:CPU 1核,2G内存,1Mbps公网带宽(固定带宽)
    其中服务器A既做主节点又做从节点,服务器B,C只做从节点。
    我有几点困惑:
    1.制约爬取速度的,是带宽还是cpu的处理能力?我看任务日志,在nutch流程中fetch(连接并下载网页)这一步耗时最长,占据了绝大部分时间,是不是意味着带宽是主要瓶颈?
    2.关于一台2核4G1M的配置和2台1核2G1M的配置,哪个更好?为什么?(阿里云的阿里云推荐配置https://www.aliyun.com/easybuy)
    3.如果租用10~20台服务器,配置如何选择?使用标准配置还是加带宽,带宽如何选择

    ####

    首先,最重要的一点,你需要一点Money。大概多少呢?那你得先搞清楚Money是用来干啥的。一是用来租云服务器;二是用来买代理。云服务器的用途显而易见;代理则是用来动态切换IP,避免被封。好,假设我们需要不间断爬一周,带宽1M,数据盘100G。阿里云,1C1G实例来一个,ecs.t5-lc1m1.small,关了公网IP,¥24.36一周;(同配置t5一周18.48)IP代理,快代理私密代理均匀提取,3~5分钟 * 2500个/天,¥120一周。然后稍稍改改代码,关掉延时,扔上服务器跑呗。

    #####

    1. 买一个vps。通过web方式,给vps装上操作系统,如ubuntu。这个供应商会有专门教程。2. 用ssh 登录到vps上,然后把你的代码放上去。然后运行“nohup python ./youcode.py &”,于是你的crawler就会持续运行下去。将转到的数据存在文件里,这个是你代码里写的。3. 退出ssh。过了几天几个星期,ssh登录上去看看抓了多少。然后scp回自己的电脑分析。

    ####

    页面爬取总数已经确定(30w±),接下来需要确定的是:页面每天都需要爬一遍还是说每天只爬其中某一部分即可。这里我们以最大上限来假设,每天爬30w页面(假设已经考虑了目标的反爬机制、代理池什么的都已经弄好),那么需要测算的就是单位时间单核多线程的正常工作效率是多少(能爬多少页面)。也即:a.不限网速下,单位内存及CPU最高使用率下能够爬多少个页面,设为N。b.额定网速下,内存及CPU有闲置资源时能够爬多少个页面,设为M。若基于M/N的爬取速度,都能满足每天爬30w的需求,就可以用b假设的网速,a假设的硬件配置。这里你可以选择弹性云,先用最小配置测试,若不满足需求,逐渐增加配置。

    ###

    记得选个可以换ip的云主机,因为ip可能被封。地理位置选距离你的抓取对象物理距离近的。选小配置的,不够用扩容就行。

    ###

    https://zhuanlan.zhihu.com/p/89548664

    ###

    需要一个单独的redis服务器

    安卓redis

    启动redis,

    验证一下redis是可以连接的,

    ###

    redis 搭建完

    接着我们来搭建数据库的服务器

    把 MongoDB 给装上

    先连接到数据库的服务器上

    下载 mongoDB

    创建个 db 文件夹

    开启 mongodb
    这里顺便把 bind_ip 设置一下

    这样才能被远程访问

    使用本地连接试试,验证可以连接数据库,

    #####

    接着我们需要在
    爬虫服务器安装 Python3 环境

    slave-02 和 slave-03 服务器

    同上安装 python3

    ok
    环境搭起来了

    ####

    我们把它改成适用分布式的

    将 Pipeline 中的数据库地址配置成
    我们创建的 mongodb 数据库地址

    接着在 setting 中配置
    redis 调度和去重

    再设置一下延迟访问

    设置delay有起码两个好处, 一个是对被爬对象表示礼貌, 另一个是爬的太快,很多服务器会封ip,或限制访问。

    搞完了之后

    将虚拟环境中的库打包一下,pip freeze > requirement.txt

    接着把项目

    都扔到爬虫服务器上去

    连接到爬虫服务器

    可以看到刚刚传来的文件

    把刚刚在虚拟环境中
    生成的第三方库列表

    在服务器上一顿安装


    其它两台爬虫服务器

    和上面一样安装所需要的库

    都安装完之后

    就终于可以都 TM 跑起来了

    #####

    4台机器开始一顿爬取

    可以看到 mongodb 都监听到了
    这几台服务器的连接了

    我们连到 redis 看看

    可以看到scrapy-redis生成的键

    可以看到

    redis 在调度着请求的消息队列
    以及过滤重复的请求

    再连接到 mongodb 看看

    统计一下爬取到的数据,发现数据都是增加的,

    ###

    ok
    以上就是分布式爬虫的
    搭建及部署的过程了

    当然了

    数据库还可以搭建一下集群
    数据库之间的连接最好设置账户
    进行安全访问等

    主要还是让你了解这个过程中

    分布式爬虫的搭建和使用
    以及体会它的可扩展性和高效性

    ###

    ######

  • 相关阅读:
    androidstudio gradle下载速度慢
    paddlex 使用-11 实例图像分割
    paddlex 使用-10 语义图像分割
    redis C# Windows下测试环境
    CSS Flex弹性布局(多个div自动换行)
    扩展排序后重新编号
    纯css制作的打勾(√)小图标
    layui表格-template模板的三种用法
    VB中各种数据类型转换函数
    将ACCESS 的数据库中的表的文件 导出了EXCEL格式
  • 原文地址:https://www.cnblogs.com/andy0816/p/15257298.html
Copyright © 2011-2022 走看看