分布式部署

使用scrapy-redis搭建分布式爬虫环境

妖精的绣舞 提交于 2019-11-28 16:33:34
scrapy-redis简介 scrapy-redis是scrapy框架基于redis数据库的组件,用于scrapy项目的分布式开发和部署。 有如下特征:  分布式爬取   您可以启动多个spider工程,相互之间共享单个redis的requests队列。最适合广泛的多个域名网站的内容爬取。  分布式数据处理   爬取到的scrapy的item数据可以推入到redis队列中,这意味着你可以根据需求启动尽可能多的处理程序来共享item的队列,进行item数据持久化处理  Scrapy即插即用组件   Scheduler调度器 + Duplication复制 过滤器,Item Pipeline,基本spider scrapy-redis架构 scrapy-redis整体运行流程如下: 1. 首先Slaver端从Master端拿任务(Request、url)进行数据抓取,Slaver抓取数据的同时,产生新任务的Request便提交给 Master 处理; 2. Master端只有一个Redis数据库,负责将未处理的Request去重和任务分配,将处理后的Request加入待爬队列,并且存储爬取的数据。 Scrapy-Redis默认使用的就是这种策略,我们实现起来很简单,因为任务调度等工作Scrapy-Redis都已经帮我们做好了,我们只需要继承RedisSpider、指定redis

tensorflow 分布式部署踩坑经历

你离开我真会死。 提交于 2019-11-28 16:19:58
世上本没有坑,挖的人多了,自然就有坑了。 公司最近要搭一个分布式集群来训练数据,作为一个无知而又热爱求知的小白,自然被虐得头发都掉了一地。 花了整整2.5个星期后,终于在开源哥们的指导下才大概估计到原因所在,最后才在华为的一个技术贴上找到答案,那时候真是Duang的一声,看着进程终于跑起来的那一刻,真的是想来个夕阳下的奔跑来庆祝一下。这过程真的不容易啊,期间基本把google和百度的资料不管相关和不相关都翻了个遍,也没有很好解决问题,那时候心态是真的爆炸了,最后改了一下关键字,才在谷歌结果的最后一页看到华为的帖子有那么几个字相关,没想到点开后就打开了新世界,激动!!!!! 扯淡到此为止,现在来介绍一下部署细节。 本部署是基于ubuntu 16.04 + hadoop + spark + tensorflowOnSpark + tensorflow 1.8 这里集群的环境是1个ps和2个worker hadoop和spark部署 hadoop和spark的部署这里不做叙述,网上的资料一大堆,按照来基本上没有问题,有问题的话再找一个其它靠谱的再配,反正最终能运行就可以了。 tensorflow和tensorflowOnSpark安装 这里是采取yarn作为资源管理器,具体安装过程可以参考 官网 。网上很多文章都说官方说明文档简略,但是其实踩完坑后发觉,其实真的就这么简略,跑不起来

史上最全的后端技术大全,你都了解哪些技术呢?

做~自己de王妃 提交于 2019-11-28 15:43:30
| 导语 工欲善其事,必先利其器; 士欲宣其义,必先读其书。 后台开发作为互联网技术领域的掌上明珠,一直都是开发者们的追逐的高峰。 本文将从后台开发所涉及到的技术术语出发,基于系统开发、架构设计、网络通信等几个方面让大家对后台 开 发有一个清晰的了解,讲解全面易懂。 系统开发 1. 高内聚/低耦合 高内聚指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。 模块的内聚反映模块内部联系的紧密程度。 模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。一个完整的系统,模块与模块之间,尽可能的使其独立存在。 通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。 2. 过度设计 过度设计就是进行了过多的面向未来的设计或者说把相对简单的事情想复杂了,过度追求模块化、可扩展性、设计模式等,为系统增加了不必要的复杂度。 3. 过早优化 过早指的不是在开发过程的早期,而是在还没弄清楚需求未来的变化的走向的时候。你的优化不仅可能导致你无法很好地实现新的需求,而且你对优化的预期的猜测有可能还是错的,导致实际上你除了把代码变复杂以外什么都没得到。 正确的方法是, 先有质量地实现你的需求,写够testcase,然后做profile去找到性能的瓶颈,这个时候才做优化。 4. 重构

分布式系统CAP定理与BASE理论

血红的双手。 提交于 2019-11-28 14:44:18
CAP定理: 一个分布式系统 不可能 同时满足 一致性 (C:Consistency)、 可用性 (A:Availability)和 分区容错性 (P:Partition tolerance)这三个基本要求,最多只能满足 其中的两项 。 一致性 在分布式环境中,一致性是指数据在 多个副本之间 是否能够 保持强一致 的特性。 对于一个将数据副本分布在不同节点上的分布式系统来说,如果对第一个节点的数据进行了更新操作并且更新成功后,却没有使得第二个节点上的数据得到相应的更新,于是在对第二个节点的数据进行读取操作时,获取的依然是更新前的数据(称为 脏数据 ),这就是典型的分布式数据不一致情况。在分布式系统中,如果能够做到针对一个数据项的更新操作执行成功后,所有的用户都能读取到最新的值,那么这样的系统就被认为具有 强一致性 (或严格的一致性)。 可用性 可用性是指系统提供的服务必须 一直处于可用 的状态,对于用户的每一个操作请求总是能够在 有限的时间 内 返回结果 ,如果超过了这个时间范围,那么系统就被认为是不可用的。 『有限的时间内』是一个在系统设计之初就设定好的运行指标, 不同的系统会有很大的差别 。比如对于一个在线搜索引擎来说,通常在0.5秒内需要给出用户搜索关键词对应的检索结果。而对应Hive来说,一次正常的查询时间可能在20秒到30秒之间。 『返回结果

Tensorflow分布式部署和开发

我与影子孤独终老i 提交于 2019-11-28 12:50:37
关于tensorflow的分布式训练和部署, 官方有个英文的文档介绍,但是写的比较简单, 给的例子也比较简单,刚接触分布式深度学习的可能不太容易理解。在网上看到一些资料,总感觉说的不够通俗易懂,不如自己写一个通俗易懂给大家分享一下。 如果大家有看不懂的,欢迎留言,我再改文章,改到大学一年级的学生可以看懂的程度。 1. 单机多GPU训练 先简单介绍下单机的多GPU训练,然后再介绍分布式的多机多GPU训练。 单机的多GPU训练, tensorflow的官方已经给了一个cifar的例子,已经有比较详细的代码和文档介绍, 这里大致说下多GPU的过程,以便方便引入到多机多GPU的介绍。 单机多GPU的训练过程: a) 假设你的机器上有3个GPU; b) 在单机单GPU的训练中,数据是一个batch一个batch的训练。 在单机多GPU中,数据一次处理3个batch(假设是3个GPU训练), 每个GPU处理一个batch的数据计算。 c) 变量,或者说参数,保存在CPU上 d) 刚开始的时候数据由CPU分发给3个GPU, 在GPU上完成了计算,得到每个batch要更新的梯度。 e) 然后在CPU上收集完了3个GPU上的要更新的梯度, 计算一下平均梯度,然后更新参数。 f) 然后继续循环这个过程。 通过这个过程,处理的速度取决于最慢的那个GPU的速度。如果3个GPU的处理速度差不多的话,

什么是分布式和微服务

 ̄綄美尐妖づ 提交于 2019-11-28 12:36:43
简单的说,微服务是架构设计方式,分布式是系统部署方式,两者概念不同 微服务是啥? 这里不引用书本上的复杂概论了,简单来说微服务就是很小的服务,小到一个服务只对应一个单一的功能,只做一件事。这个服务可以单独部署运行,服务之间可以通过RPC来相互交互,每个微服务都是由独立的小团队开发,测试,部署,上线,负责它的整个生命周期。 微服务架构又是啥? 在做架构设计的时候,先做逻辑架构,再做物理架构,当你拿到需求后,估算过最大用户量和并发量后,计算单个应用服务器能否满足需求,如果用户量只有几百人的小应用,单体应用就能搞定,即所有应用部署在一个应用服务器里,如果是很大用户量,且某些功能会被频繁访问,或者某些功能计算量很大,建议将应用拆解为多个子系统,各自负责各自功能,这就是微服务架构。 那么分布式又是啥? 分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是通过rpc来交互或者是webservice来交互的。逻辑架构设计完后就该做物理架构设计,系统应用部署在超过一台服务器或虚拟机上,且各分开部署的部分彼此通过各种通讯协议交互信息,就可算作分布式部署,生产环境下的微服务肯定是分布式部署的,分布式部署的应用不一定是微服务架构的,比如集群部署,它是把相同应用复制到不同服务器上,但是逻辑功能上还是单体应用。 微服务相比分布式服务来说

Hadoop单机版和伪分布式部署

回眸只為那壹抹淺笑 提交于 2019-11-28 11:58:51
说明:本文的hadoop安装环境为Ubuntu环境。 运行Hadoop集群的准备工作 1. 安装JDK,配置Java环境 2. SSH免登录(这一步可以忽略,但是启动hadoop的时候,需要手动为每个节点服务输入密码) 先确认能否不输入口令就用SSH登录localhost: $ ssh localhost 如果没有安装SSH服务,则安装SSH $ sudo apt-get install openssh-server -----安装SSH 实现SSH免登录 $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 3. 解压所下载的Hadoop发行版。编辑 etc/hadoop/hadoop-env.sh文件,配置JAVA_HOME环境。 export JAVA_HOME=/home/mango/jdk/jdk1.8.0_45 4.尝试如下命令, 将会显示hadoop 脚本的使用文档。 $ ./bin/hadoop 现在你可以用以下三种支持的模式中的一种启动Hadoop集群: 单机模式 伪分布式模式 完全分布式模式(后续补充) 单机模式的操作方法 默认情况下,Hadoop被配置成以非分布式模式运行的一个独立Java进程。这对调试非常有帮助。

JMeter分布式压测

ⅰ亾dé卋堺 提交于 2019-11-28 11:35:22
为了让jmeter工具提供更强大的负载能力,jmeter提供了多台机器同时产生负载的机制。 一、申请5台Linux服务器,配置好点。 二、分布式测试原理:其中一台作为主控机/调度机(server),其他为压力机(agent) 三、处理过程:   1)调度机server启动以后,会拷贝本地的jmx文件分发到远程的agent机器上;   2)agent机器拿到脚本以后启动命令行模式去执行脚本,对于每台agent机器拿到的脚本都是一样的,所以如果jmx脚本为50个线程跑3分钟,那么实际并发就是50*5=250个线程并发跑3分钟;   3)执行时,agent会把执行获得的数据结果传给server机器,server机器会收集所有agent机器的信息并汇总,这样server机器上就存在一份所有agent机器汇总的数据结果。 四、Jmeter分布式压测环境搭建   1、分布式环境压力服务器要求:   需要server(控制机)和agent(压力机),agent搭建在linux服务器环境下,server搭建在Linux或windows环境下。   压力测试瓶颈大都在带宽上面,需要保证压力机的带宽要比服务器的带宽高,不然压力上不去。   需要保证agent和server都在一个网络中,且在多网卡环境需要保证启动的网卡都在一个网段。   需要保证server和agent之间的时间同步。   关闭防火墙

MooseFS 分布式存储

早过忘川 提交于 2019-11-28 10:01:23
一、MooseFS介绍   MooseFS主要由管理服务器(master)、元日志服务器(Metalogger)、数据存储服务器(chunkserver)构成。 管理服务器:主要作用是管理数据存储服务器,文件读写控制、空间管理及节点间的数据拷贝等。 元日志服务器:备份管理服务器的变化日志,以便管理服务器出问题时能恢复工作。 数据存储服务器:听从管理服务器调度,提供存储空间,接收或传输客户数据等。 MooseFS的读过程如图所示: 总结:MooseFS结构简单,适合初学者理解分布式文件系统的工作过程,但MooseFS具有单点故障隐患,一旦master无法工作,整个分布式文件系统 都将停止工作,因此需要实现master服务器的高可用(比如heartbeat+drbd实现)     二、集群部署: 主机环境:RHEL6.5 selinux and iptables disabled Master:172.25.10.2 (HA) 172.25.10.3 (HA) VIP 172.25.10.100 ##Metalogger: 192.168.0.77 Chunkserver: 172.25.10.6 172.25.10.7 172.25.10.8 Client: 172.25.10.4 172.25.10.5 (iSCSI) 生成 rpm,便于部署: # yum install gcc

在Ubuntu 12.04中配置分布式爬虫框架——Cola

放肆的年华 提交于 2019-11-28 09:40:01
Cola是一个用Python编写的分布式爬虫框架,其目的是为了方便分布式的部署,目前虽仍有很多不完善的地方,但仍然值得对其进行一番探索。本文将对Cola的运行环境配置进行一番较为详细的介绍。在配置之前,请保证系统已经有正常的编译工具(gcc, make, autoconf, etc.)。另外,可能需要先安装python-dev: sudo apt-get install python-dev 1 安装MongoDB Cola所采用的数据库为文档型数据库MongoDB,因此首先需要配置MongoDB,这里给出一种较为方便的部署方法。 MongoDB是由10gen公司来负责维护开发的。首先给apt包管理添加10gen资源库: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/10gen.list sudo apt-get update 经过以上几步之后,就可以安装最新稳定版本的MongoDB: sudo apt-get install mongodb-10gen 安装完毕后