文章目录
- 第一章 大数据概述
- 1.1 进入大数据时代的原因
- 1.2 大数据概念
- 1.3 大数据应用
- 第二章 大数据采集基础
- 2.1 传统数据采集技术
- 2.2 大数据采集基础
- 2.2.1数据的发展
- 2.2.2大数据来源
- 2.2.3大数据采集技术
- 第三章 大数据采集架构
- 3.1 概述
- 3.2 Chukwa数据采集
- 3.3 Flume数据采集
- 3.4 Scribe数据采集
- 3.5 Kafka数据采集
- 3.5.1 概念理解
- 3.5.2 消息队列通信模型
- 3.5.3 kafka的架构原理
- 3.6 小结
- 第四章 大数据迁移技术
- 4.1数据迁移
- 4.2 数据迁移相关技术
- 4.3 数据迁移工具
- 4.4 Kettle数据迁移实例
- 第五章 互联网数据抓取与处理
- 5.1 网络爬虫概述
- 5.2 网络爬虫
- 5.3 网络爬虫的抓取策略
- 5.4 网页更新策略
- 5.5 网络爬虫方法
- 5.6 网络爬虫工具
第一章 大数据概述
1.1 进入大数据时代的原因
- 第三次信息化浪潮
- 信息科技为大数据时代提供支撑
1)存储设备容量不断增加
2)CPU处理能力大幅提升
3)网络带宽不断增加 - 数据产生方式的变革促成大数据时代来临
1.2 大数据概念
大数据不仅仅是数据的“大量化(数据量大)”,而是包含“快速化(产生速度快,处理速度快)”“多样化(数据格式多样化,来源多样化)”和 “价值化(潜在的)”等多重属性
1.3 大数据应用
- 大数据关键技术
1)大数据处理过程:
大数据采集-大数据预处理-大数据存储-大数据分析与挖掘-大数据可视化
2)大数据技术体系:数据采集与预处理技术,分布式数据存储技术,分布式计算技术 - 大数据采集技术
1)传统数据采集与分布式大数据采集
2)分布式架构的数据采集平台:Apache Chukwa,Flume,Scrible, Apache kafka
3)互联网大数据采集:爬虫技术,构建自己企业的大数据采集架构
4)企事业单位内部数据 - 大数据预处理技术
1)预处理的必要性:原始数据有杂乱性,重复性,不完整性
2)常用预处理技术:
数据清理:异常数据清理,数据错误纠正,重复数据的清除等目标
数据集成:将多个数据源中的数据结合起来并统一存储,建立数据仓库
数据变换:通过平滑聚集,数据概化,规范化等方式,将数据转换成适用于数据挖掘的形式
数据规约:寻找依赖于发现目标的数据应用特征,以缩减数据规模,从而在尽可能保持数据原貌的前提下,最大限度的精简数据量
第二章 大数据采集基础
2.1 传统数据采集技术
- 数据采集:将要获取的信息通过传感器转换为信号,并经过对信号的调整,采样,量化,编码和传输等步骤,最后送到计算机系统中进行处理,分析,存储和显示
- 传统数据采集系统特点
1.数据采集系统一般都包含有计算机系统,这使得数据采集的质量和效率等大为提高,同时节省了硬件投资。
2.软件在数据采集系统中的作用越来越大,增加了系统设计的灵活性。
3.数据采集与数据处理相互结合得日益紧密,形成了数据采集与处理相互融合的系统,可实现从数据采集、处理到控制的全部工作。
4.速度快,数据采集过程一般都具有“实时”特性。
5.随着微电子技术的发展,电路集成度的提高,数据采集系统的体积越来越小,可靠性越来越高。
6.出现了很多先进的采集技术,比如总线采集技术、分布式采集技术等。 - 数据采集系统框架
- 1.微型计算机数据采集系统
传感器:把各种非电的物理量,比如温度,压力,位移,流量等转成电信号的器件
模拟多路开关:数据采集系统往往要对多路模拟量进行采集。可以用模拟多路开关来轮流切换各路模拟量与A/D转换器间的通道,使得在一个特定的时间内,只允许一路模拟信号输入到 A/D转换器,从而实现分时转换的目的
程控放大器:在数据采集时,来自传感器的模拟信号一般都是比较弱的低电平信号。程控放大器的作用是将微弱输入信号进行放大,以便充分利用A/D转换器的满量程分辨率
采样/保持器:AD转换器完成一次转换需要一定的时间,在这段时间内希望AD转换器输入端的模拟信号电压保持不变,以保证有较高的转换精度。这可以用采样/保持器来实现,采样/保持器的加入,大大提高了数据采集系统的采样频率
A/D转换器:模拟信号转为数字信号
接口:用来将传感器输出的数字信号进行整形或电平调整,然后再传送到计算机的总线
绘图机:对数据采集系统的工作进行管理和控制,并对采集到的数据做必要的处理,然后根据需要进行存储,显示或打印
2.集散型数据采集系统
数据采集站:一般是由单片机数据采集装置组成,位于生产设备附近,独立完成数据采集和处理任务,并将数据以数字信号的形式传送给上位机
上位机:一般为PC计算机,配置有打印机和绘图机。上位机用来将各个数据采集站传送来的数据,集中显示在显示器上或用打印机打印各种报表,或以文件形式存储在磁盘上。此外,还可以将系统的控制参数发送给各个数据采集站,以调整数据采集站的工作状态
通信接口:异步串行传送数据。数据通信通常采用主从方式,由上位机确实与哪一个数据采集站进行数据传送
主要优点:系统的适应能力强;系统的可靠性高;系统可以实时响应;对系统硬件的要求不高
3.微型数据采集系统是基本型系统,由它可组成集散型数据采集系统
4.数据采集系统的软件
模拟信号采集与预处理程序:对模拟信号采集,标度变换,滤波处理及次数数据计算,并将数据存储到硬盘
数字信号采集与处理程序:对数字输入信号进行采集及码制之间的转换,如BCD码转换为ASCII码
脉冲信号处理程序:对输入的脉冲信号进行电平高低判断和计数
开关信号处理程序:判断开关信号输入状态的变化情况,如果发生变化,则执行相应的处理程序
运行参数设置程序:对数据采集系统的运行参数进行设置,运行参数有:采样通道号,采样点数等
系统管理(主控)程序:将各个工程模块程序组织成一个程序系统,并管理和调用各个功能模块的程序,还可以来管理系统数据文件的存储和输出。一般以文字菜单和图形菜单的人机界面技术来组织,管理和运行系统程序
通信程序:完成上位机与各个数据采集站之间的数据传送工作 - 数据采集关键技术
数据采集系统中采用计算机作为处理机。计算机处理的信号是二进制的离散数字信号,而被采集的各种物理量一般都是连续模拟信号,因此,在数据采集系统中,首先遇到的问题是传感器所测量到的连续模拟信号怎样转换成离散的数字信号。其关键技术包括:
采样技术: - 1)常规采样技术,遵循采样定理。采样频率必须大于模拟信号的最高频率的二倍
2)间歇采样技术, - 3)变频采样技术, 变频采样是指在采样过程中采样频率可以变化。例如,如果模拟信号的频率是随时间增大而减小的,那么就可以采用变频采样技术,从而减少采样的数据量。因此,实现变频采样的先决条件是清楚目标信号的频率随时间变化的关系
量化技术 - 编码技术
2.2 大数据采集基础
2.2.1数据的发展
- 大数据产生:分布式计算,互联网技术发展(物联网,移动互联网,社交网络等)
- 大数据区别于传统数据之处:
大数据关注数据流,而不是数据库中的“库表”
大数据分析依赖于数据科学家,而不是传统的数据分析师
大数据正改变传统数据采集,存储,分析和处理流程
大数据正引领新的数据思维
2.2.2大数据来源
- 大数据分类
2.2.3大数据采集技术
大数据采集常用方法包括系统日志采集,利用ETL工具采集,网络爬虫等
- 系统日志采集
- 利用ETL工具采集
- 网络爬虫
第三章 大数据采集架构
3.1 概述
数据采集的方式多种多样,如通过卫星摄像机和传感器等硬件设备进行遥感数据、交通数据、人流数据的采集;通过半自动整理的方式采集商业景气数据、税务数据、人口普查数据等;通过互联网服务器自动采集业务数据、用户行为数据等等。
大型的互联网公司、金融行业、零售行业、医疗行业等都有自己的业务平台,在此平台上,每天都会产生大量的系统日志数据。
通过采集系统日志数据,可以获得大量数据。(属于半结构化数据,也可转化为结构化数据–二维表)
常用大数据采集架构:
- Hadoop的Chukwa:Chukwa是一个开源的用于监控大型分布式系统的数据收集系统。这是构建在Hadoop 的 HDFS 和 map/reduce 框架之上的,继承了Hadoop 的可伸缩性和鲁棒性。
- Cloudera的Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。*
- Facebook的Scribe:Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用。
- Apache Kafka:是由Apache开发的一个开源消息系统项目。它是一个分布式的、分区的、多副本的日志提交服务。
- 其他大数据采集框架
负载均衡:将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
容错性:系统在部分组件发生故障时仍能正常运作的能力。
可扩展性:规划网络过程中预留一些可扩展的地方以应对未来可能的更高要求的需求,比如在接入交换机上预留更多的接口应对业务的扩展,在核心交换机上预留板卡插槽等等
3.2 Chukwa数据采集
Chukwa是一个针对大型分布式系统的数据采集系统,其构建于Hadoop之上
Chukwa使用HDFS作为其存储,最初的设计是用于收集和分析Hadoop系统的日志
Chukwa继承了Hadoop的伸缩性和鲁棒性
Chukwa也内置一个功能强大的工具箱,用于显示系统监控和分析结果,使得通过Chukwa搜集的数据,发挥最大的用处。
Chukwa旨在为分布式数据收集和大数据处理提供一个灵活、强大的平台,这个平台不仅现时可用,而且能够与时俱进的利用更新的存储技术(比如HDFS、HBase等)
Chukwa被设计成收集和处理层级的管道线,在各个层级之间有非常明确和狭窄的界面
- Adaptors 和 Agents
在每个数据的产生端(基本上是集群中每一个节点上), Chukwa 使用一个Agent 来采集它感兴趣的数据
每一类数据通过一个Adaptor 来实现,Chukwa 对常见的数据来源提供相应的 adaptor
Adaptor 会定期运行(比如每分钟读一次数据文件的结果)或事件驱动地执行(比如 kernel的一条错误日志)。
如果这些Adaptor 不够用,用户也可以方便地自己实现一个Adaptor 来满足需求
为防止数据采集端的Agent出现故障,Chukwa的 Agent 采用了所谓的“watchdog” 机制,会自动重启终止的数据采集进程,防止原始数据的丢失。另一方面, 对于重复采集的数据, 在 Chukwa 的数据处理过程中,会自动对它们进行去重。这样,就可以对于关键的数据在多台机器上部署相同的 agent,从而实现容错的功能。 - Collectors
Agents 采集到的数据存储到Hadoop 集群上。Hadoop 集群擅长处理少量大文件,而对于大量小文件的处理则不是它的强项,针对这一点,Chukwa 设计了Collector
Collector 用于把数据先进行部分合并,再写入集群,防止大量小文件的写入
为防止 Collector 成为性能瓶颈或成为单点产生故障, Chukwa 允许和鼓励设置多个Collector
Agents 随机地从Collectors 列表中选择一个Collector 传输数据,如果一个 Collector 失败或繁忙,就换下一个Collector,从而可以实现负载的均衡 - Demux 和 Archive
Chukwa架构中放在集群上的数据是通过 map/reduce 作业来实现数据分析,在 map/reduce 阶段,Chukwa 提供了Demux 和Archive 任务两种内置的作业类型
Demux 作业负责对数据的分类、排序和去重
Demux 作业在执行过程中,通过数据类型和配置文件中指定的数据处理类,执行相应的数据分析工作,一般是把非结构化的数据结构化,抽取中其中的数据属性。
Demux 的本质是一个 map/reduce 作业,所以可以根据自己的需求制定自己的 Demux 作业,进行各种复杂的逻辑分析
Chukwa 提供的 Demux interface 可以用 java 语言来方便地扩展。
Archive 作业则负责把同类型的数据文件合并,一方面保证了同一类的数据都在一起,便于进一步分析, 另一方面减少文件数量, 减轻Hadoop 集群的存储压力 - dbadmin
主要用于数据存储
Chukwa使用 mdl 语言,把集群上的数据抽取到 mysql 数据库中,对近一周的数据,完整保存,超过一周的数据,按数据离当前时间长短作稀释,离当前越久的数据,所保存的数据时间间隔越长
通过 mysql 来作数据源,展示数据。同时使用 hbase 或类似的技术,直接把索引化的数据存储在集群上。 - HICC
主要用于数据展示
HICC 是 Chukwa 提供的数据展示端
在展示端,Chukwa 提供了一些默认的数据展示 widget,可以使用“列表”、“曲线图”、“多曲线图”、“柱状图”、“面积图式展示一类或多类数据,给用户直观的数据趋势展示
在 HICC 展示端,对不断生成的新数据和历史数据,采用robin 策略,防止数据的不断增长增大服务器压力,并对数据在时间轴上“稀释”,可以提供长时间段的数据展示。
从本质上, HICC 是用 jetty 来实现的一个 web 服务端,内部用的是jsp 技术和 javascript 技术
3.3 Flume数据采集
- Hadoop大数据业务处理流程:Flume数据采集–MapReduce清洗–存入Hbase–Hive统计分析–存入Hive表–Sqoop导出–Mysql数据库–Web展示
- Apache Flume 是一个从可以收集日志、事件等数据资源的数据采集系统,它将这些数量庞大的数据从各项数据资源中集中或者存储。
Apache Flume是基于将数据流,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。
Flume的运行机制
Flume的核心是Agent。Agent对外有两个进行交互的地方,一个是接受数据的输入Source,一个是数据的输出Sink。
Source接收到数据之后,将数据发送给Channel,Chanel作为一个数据缓冲区会临时存放这些数据,随后Sink会将Channel中的数据发送到指定的地方,例如HDFS等。
Flume可以支持多级Flume的Agent。例如Sink可以将数据写到下一个Agent的Source中,这样的话就可以连成串。
Flume还支持扇入(fan-in)、扇出(fan-out)。所谓扇入就是Source可以接受多个输入,所谓扇出就是Sink可以将数据输出多个目的地。
注意:
为保证Flume的可靠性,Flume在Source和Channel之间采用 Interceptors拦截器用来更改或者检查Flume的events数据。
在多channel情况下,Flume可以采用默认管道选择器(即,每一个管道传递的都是相同的events)或者多路复用通道选择器(即,依据每一个event的头部header的地址选择管道)实现 channel的选择。
为了保证负载均衡,采用sink线程用于激活被选择的sinks群中特定的sink。
3.4 Scribe数据采集
3.5 Kafka数据采集
3.5.1 概念理解
- 背景
- 特性
持久性、可靠性— Kafka 使用“分布式提交日志”,消息被持久化到本地磁盘,并且支持数据备份防止丢失。
可扩展性-Kafka集群支持热扩展。
高吞吐量、低延迟—Kafka每秒可以处理十几万条消息,延迟最低只有几毫秒。
容错性—允许集群中节点失败(若副本数量为n,则允许n-1个结点失败)
高并发—支持数千个客户端同时读写 - 应用场景
日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
消息系统:解耦和生产者和消费者、缓存消息等。
用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
流式处理:比如spark streaming和storm
事件源 - 重要设计思想
Consumergroup:各个consumer可以组成一个组,每个消息只能被组中的一个consumer消费,如果一个消息可以被多个consumer消费的话,那么这些consumer必须在不同的组。
消息状态:在Kafka中,消息的状态被保存在consumer中,broker不会关心哪个消息被消费了被谁消费了,只记录一个offset值(指向partition中下一个要被消费的消息位置),这就意味着如果consumer处理不好的话,broker上的一个消息可能会被消费多次。
消息持久化:Kafka中会把消息持久化到本地文件系统中,并且保持极高的效率。
消息有效期:Kafka会长久保留其中的消息,以便consumer可以多次消费,当然其中很多细节是可配置的。
批量发送:Kafka支持以消息集合为单位进行批量发送,以提高push效率。
push-and-pull :Kafka中的Producer和consumer采用的是push-and-pull模式,即Producer只管向broker push消息,consumer只管从broker pull消息,两者对消息的生产和消费是异步的。
Kafka集群中broker之间的关系:不是主从关系,各个broker在集群中地位一样,我们可以随意的增加或删除任何一个broker节点。
负载均衡方面: Kafka提供了一个 metadata API来管理broker之间的负载(对Kafka0.8.x而言,对于0.7.x主要靠zookeeper来实现负载均衡)。
同步异步:Producer采用异步push方式,极大提高Kafka系统的吞吐率(可以通过参数控制是采用同步还是异步方式)。
分区机制partition:Kafka的broker端支持消息分区,Producer可以决定把消息发到哪个分区,在一个分区中消息的顺序就是Producer发送消息的顺序,一个主题中可以有多个分区,具体分区的数量是可配置的。分区的意义很重大,后面的内容会逐渐体现。
离线数据装载:Kafka由于对可拓展的数据持久化的支持,它也非常适合向Hadoop或者数据仓库中进行数据装载。
插件支持:现在不少活跃的社区已经开发出不少插件来拓展Kafka的功能,如用来配合Storm、Hadoop、flume相关的插件。
3.5.2 消息队列通信模型
- 消息系统:
消息系统负责将数据从一个应用程序传输到另一个应用程序,因此应用程序可以专注于数据,但不担心如何共享它。 分布式消息传递基于可靠消息队列的概念。 消息在客户端应用程序和消息传递系统之间异步排队。 - 点对点消息系统:
在点对点系统中,消息被保留在队列中。点对点模式通常是基于拉取或者轮询的消息传送模型。 一个或多个消费者可以消耗队列中的消息,但是特定消息只能由最多一个消费者消费。 一旦消费者读取队列中的消息,它就从该队列中消失。这个模型的特点是发送到队列的消息被一个且只有一个消费者进行处理。
点对点模型的的优点是消费者拉取消息的频率可以由自己控制。但是消息队列是否有消息需要消费,在消费者端无法感知,所以在消费者端需要额外的线程去监控。
该系统的典型示例是订单处理系统,其中每个订单将由一个订单处理器处理,但多个订单处理器也可以同时工作。 下图描述了结构。 - 发布-订阅消息系统
在发布 - 订阅系统中,消息被保留在主题中。 与点对点系统不同,消费者可以订阅一个或多个主题并使用该主题中的所有消息。 在发布 - 订阅系统中,消息生产者称为发布者,消息使用者称为订阅者。 一个现实生活的例子是Dish电视,它发布不同的渠道,如运动,电影,音乐等,任何人都可以订阅自己的频道集,并获得他们订阅的频道时可用。
发布订阅模式是一个基于消息送的消息传送模型,该模型可以有多种不同的订阅者。生产者将消息放入消息队列后,队列会将消息推送给订阅过该类消息的消费者(类似微信公众号)。由于是消费者被动接收推送,所以无需感知消息队列是否有待消费的消息。但是consumer1、consumer2、consumer3由于机器性能不一样,所以处理消息的能力也会不一样,但消息队列却无法感知消费者消费的速度!所以推送的速度成了发布订阅模模式的一个问题!假设三个消费者处理速度分别是8M/s、5M/s、2M/s,如果队列推送的速度为5M/s,则consumer3无法承受!如果队列推送的速度为2M/s,则consumer1、consumer2会出现资源的极大浪费!
3.5.3 kafka的架构原理
1.生产者分为producer0,producer1,producer2。消费者以消费者组的形式存在,consumer0,consumer1在consumer GroupA里,consumer0,consumer1在consumer GroupB里面。kakfa集群里面存的以topic分类的消息。
2.producer0生产了一个以topicA分类的消息分别存在了partition0和partition1里(leader),broker0中存的partition0消息复制到了broker1和broker2(follower),同样broker1里存的partition2消息复制到了broker0和broker2中
3.在一个消费者组里的consumer0和consumer1分别消费broker0中的主消息和broker1中的主消息
- Topics
Topics是消息的分类名
Broker为每一个Topic维护一个分区日志。每一个分区日志都是有序的消息序列,消息是连续追加到分区日志上,并且这些消息是不可更改的。
分区中的每条消息都会被分配顺序ID号,也称为偏移量,是其在该分区中的唯一标识。
一个topics可以有多个分区,这些分区可以作为并行处理单元,从而使Kafka有能力高效地处理大量数据。
Topics消息会被均匀的分布到Partition0、Partition1和Partition2分区日志中
每个Partition中的消息都是有序的
生产的消息被不断追加到Partition log上,其中的每一个消息都被赋予了一个唯一的offset(偏移)值。 - Producers----消息的生产者(消息的入口)
Producers是向它们选择的主题发布数据。生产者可以选择分配某个主题到哪个分区上。
Producers直接发送消息到Broker上的leader partition,不需要经过任何中介一系列的路由转发。
Producer客户端自己控制着消息被推送到哪些Partition。实现的方式可以是随机分配、实现一类随机负载均衡算法或者指定一些分区算法。
Kafka Producer 可以将消息在内存中累计到一定数量后作为一个batch发送请求。Batch的数量大小可以通过Producer的参数控制,参数值可以设置为累计的消息的数量(如500条)、累计的时间间隔(如100ms)或者累计的数据大小(64KB)。
Producers可以异步、并行的向Kafka发送消息,但是通常producer在发送完消息之后会得到一个future响应,返回的是offset值或者发送过程中遇到的错误 - Consumers—消息的消费者(消息的出口)
Kafka提供一种单独的消费者抽象,此抽象具有两种模式的特征消费组:Queuing 和Publish-SubScribe。
消费者使用相同的消费组名字来标识,每个主题的每条消息都会发送到某个consumers实例,这些实例所在的消费者需要提出订阅,才能获得消息。
Kafka支持以组的形式消费Topic,如果Consumers有同一个组名,那么Kafka就相当于一个队列消息服务,而各个Consumer均衡的消费相应Partition中的数据。
若Consumers有不同的组名,那么Kafka就相当与一个广播服务,它会把Topic中的所有消息广播到每个Consumer。 - push-and-pull
Kafka的发布和订阅消息过程中,Producer 到 Broker 的过程是 push,也就是有数据就推送到 Broker;而 Consumer 到 Broker 的过程是 pull。它是通过 consumer 主动取数据的,而不是 Broker 把数据主动发送到 consumer 端的。
从图可以看出,Kafka采用了push-and-pull消息传输机制。这种机制中,Broker决定了消息推送的速率,而Consumer可以自主决定是否批量的从Broker接受数据。 - Apache Zookeeper
Apache Zookeeper是Apache Hadoop的一个子项目,作为一种分布式服务框架,提供协调和同步分布式系统各节点的资源配置等服务,是分布式系统一致性服务的软件。Apache Kafka主要是利用Zookeeper解决分布式应用中遇到的数据管理问题,比如,名称服务、状态同步服务、集群管理、分布式应用配置项的管理等。 - Kafka架构核心特性
压缩功能:Kafka支持对消息进行压缩,压缩的好处就是减少传输的数据量,减轻对网络传输的压力。
消息可靠性:为保证信息传输成功,当一个消息被发送后,Producer会等待Broker成功接收到消息的反馈,如果消息在途中丢失或是其中一个Broker挂掉,Producer会重新发送。
备份机制:备份机制是Kafka 0.8版本的新特性。一个备份数量为n的集群允许n-1个节点失败。在所有备份节点中,有一个节点作为lead节点,这个节点保存了其它备份节点列表,并维持各个备份间的状体同步。 - Kafka写入原则
Partition在服务器上的表现形式就是一个一个的文件夹,每个partition的文件夹下面会有多组segment文件,每组segment文件又包含.index文件、.log文件、.timeindex文件(早期版本中没有)三个文件, log文件就实际是存储message的地方,而index和timeindex文件为索引文件,用于检索消息。
partition在写入的时候可以指定需要写入的partition,如果有指定,则写入对应的partition。
如果没有指定partition,但是设置了数据的key,则会根据key的值hash出一个partition。
如果既没指定partition,又没有设置key,则会轮询选出一个partition。
3.6 小结
Hadoop的Chukwa、Cloudera的Flume、Facebook的Scribe以及 Apache Kafka大数据采集框架,这些框架基本都能提供高可靠和高扩展的数据采集方法。他们的框架都抽象出了输入,输出和中间的缓冲的架构,并且利用分布式技术能实现一定程度的扩展性和高可靠性。
除了这四种常见的大数据采集框架之外,Fluentd、Splunk Forwarder等也是经常使用的大数据采集框架。此外,像阿里巴巴、美团、携程等国内的大型互联网公司一般都基于上述大数据采集框架构建了相应的框架。
第四章 大数据迁移技术
4.1数据迁移
- 数据迁移的原因:数据的快速增长,多种业务数据,不同软硬件平台的数据
- 数据迁移(HSM):又称分级存储管理,是一种将离线存储与在线存储融合的技术。它将高速、高容量的非在线存储设备作为磁盘的下一级设备,然后将磁盘中常用的数据按指定的策略自动迁移到磁带库(简称带库)等二级大容量存储设备上。
- 数据迁移的三个阶段:
1.数据迁移前的准备,
要进行待迁移数据源的详细说明(包括数据的存储方式、数据量、数据的时间跨度)
建立新旧系统数据库的数据字典——>数据索引
对旧系统的历史数据进行质量分析,新旧系统数据结构的差异分析
新旧系统代码数据的差异分析
建立新老系统数据库表的映射关系,对无法映射字段的处理方法
开发、部属ETL工具,编写数据转换的测试计划和校验程序;制定数据转换的应急措施
2.数据迁移的实施(最重要的过程),
要求制定数据转换的详细实施步骤流程
包括数据迁移环境、业务准备、数据迁移技术测试等
3.数据迁移后的校验
对迁移工作的检查,结果将会判定新系统能否使用
质量检查工具或使用程序进行校验
4.2 数据迁移相关技术
- 基于主机的迁移方式
直接拷贝方法
1.利用操作系统命令直接拷贝。UNIX系统一般可以使用cp、dd、tar、savevg等命令。在Windows系统,一般使用图形界面工具或copy命令
2.特点:此方法简单灵活,可以方便的决定哪些数据需要迁移,但其缺点也很明显,由于从主机端发起,对主机的负载压力和应用的冲击较大
逻辑卷级数据镜像技术
1.逻辑卷:逻辑磁盘形成的虚拟盘,也可称为磁盘分区(LV)
2.镜像:一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本
3.对于服务器操作系统(Linux)已经采用逻辑卷管理器(LVM)的系统,可以直接利用LVM的管理功能完成原有数据到新存储的迁移
4.特点:此方法支持任意存储系统之间的迁移,且成功率较高,支持联机迁移。但在镜像同步的时候,仍会对主机有一定影响,适合于主机存储的非经常性迁移 - 基于存储的数据迁移
基于存储的数据迁移,主要分为同构存储和异构存储的数据迁移
1.同构存储的数据迁移是利用其自身复制技术,实现磁盘或卷 LUN的复制
2.LUN:逻辑单元号,是在硬件层分出各个逻辑盘后指定的号码
3.卷:当连接存储设备时,就可以识别到存储设备上逻辑设备LUN,此时LUN相对于主机来讲就是一个“物理硬盘”,在该“物理硬盘”上创建一个或多个分区,就可以得到一个或多个卷。此时卷相对于主机是一个逻辑设备
从容量大小方面比较卷,分区、LUN的关系如下:
4.卷 = 分区 ≤ 主机设备管理器中的磁盘 = LUN ≤ 存储设备中硬盘的总容量
5.同构存储的复制技术又分为同步复制和异步复制
6.同步复制是主机 I/O需写入主存储和从存储后才可继续下一个 I/O写入
7.异步复制为主机的 I/O写入主存储后便可继续写入操作而无需等待I/O写入从存储
8.基于存储的数据迁移主要应用于机房相隔距离较远、海量数据、关键业务不能长时间中断等情景,如机房搬迁、存储更换、数据灾难备份建设等方面,电信、金融等企业容灾中心大都基于此技术 - 备份恢复的方式
1.利第用二备级份管理软件将数据备份到磁带(或其他虚拟设备),然后恢复到新的存储设备中
2.对于联机要求高的设备,可以在线备份
3.特点:可以有效缩短停机时间窗口,一旦备份完成,其数据的迁移过程完全不会影响生产系统。但备份时间点至切换时间点,源数据因联机操作所造成的数据变化,需要通过手工方式进行同步 - 基于主机逻辑卷的迁移
1.Unix、 Linux 操作系统具有稳定性好、不易感染病毒等优点,通常作为数据库服务器操作系统使用, 且一般均使用逻辑卷管理磁盘
2.实现过程:主机的逻辑卷管理使卷组(VG)的信息保存于磁盘,只要操作系统平台一致,其卷组信息在新主机上能够识别,即可对卷组直接挂载使用,实现更换主机
3.基于主级机的逻辑卷镜像数据迁移主要是为既有逻辑卷添加物理卷(PV)映射,通过数据的初始化同步使新加入的PV与既有PV数据完全一致,再删除位于原存储上的PV,实现数据在不同存储之间数据的迁移
4.适用场景:逻辑卷的数据迁移一般适用于存储、主机更换等情景
5.使•用逻级辑卷更换主机:
6.如果新主机操作系统与旧主机一致,且采用了逻辑卷管理存储,仅须主机识别存储和导入卷组就可以实现数据迁移
7.注意:尽量使用逻辑卷管理,方便存储空间动态调整,方便主机更换。否则,需重新划分空间、调整系统参数、安装数据库及导出、导入数据库数据,耗时且影响系统稳定性
8.使用主机逻辑卷镜像更换存储:
9.仅须将新存储添加至当前系统卷组,同时逻辑卷镜像写入两份数据,然后对旧存储删除就可以实现数据迁移 - 基于数据库的迁移
同构数据库数据迁移
1.同构数据库的数据迁移技术,通常是利用数据库自身的备份和恢复功能来实现数据的迁移,可以是整个库或是单表
2.大型数据库都有专门的数据复制技术,可以用于数据迁移,如 Sybase 的Replication Server、Oracle的DataGuard
3.数据量不大时,一般为原数据库主机导出数据再通过网络通道将数据传输至目标数据库主机并导入,例如Oracle的export/import、Sybase的dump/load
4.同构数据库的数据迁移较为简单、不限操作系统平台,但是这种方法的缺点在对业务影响时间较长,数据迁移的速度取决于主机的读写速度以及网络传输速度
异构数据库数据迁移
1.异构数据库的数据迁移一般使用第三方软件实现数据库的数据迁移,这
种方法适用于纯数据迁移,并且不需要关注存储过程
2.数据迁移时存在问题 :
字段类型的长度发生了变化,如字符型的长度均变为了 255
自增序列不一致等问题,数据转换后需要重新定义
程序不完全兼容,如在分页时需要设置记录集为客户端游标
主键、索引丢失,需要重新建立
3.异构数据库的迁移不限操作系统、数据库平台,但是需要花费一定的时间及费用,特别是专门的定制开发,时间可能很长且代价较高,在数据迁移后应用需一定时间才能趋于稳定 - 服务器虚拟化数据迁移
1.服务器虚拟化可以提高设备资源的利用率,尤其是可以使 CPU、内存、
存储空间得到充分的使用,可实现服务器整合,也符合目前的云计算需
求
2.目前较为成熟、应用广泛的产品有 VMware vSphere、Microsoft
Hyper-V、RedHat KVM 等
物理器虚拟机迁移:是指将包含应用配置的物理服务器迁移到虚拟机,而不需要重新安装操作系统和应用软件,也称之为P2V(Physical to Virtual)
3.虚拟机的迁移:是将虚拟机从运行的主机或存放数据的存储迁移至另外的主机或存储,其可用于处理主机或存储故障,同时也方便更换主机或存储。
4.虚拟机的迁移通常分为冷迁移和热迁移,冷迁移是将已经关停的虚拟机在不同的主机上启动或将相关虚拟机文件静态拷贝至目标存储,热迁移指的是在不影响虚拟机可用性的情况下将虚拟机迁移至目的地 - 其他数据迁移技术
备份恢复方法,数据库工具方法,存储虚级化方法,历史数据迁移方法,网络数据传输
4.3 数据迁移工具
- Apache Sqoop
Apache Sqoop 是一种用于 Apache Hadoop 与关系型数据库之间结构化、非结构化数据转换的工具,它是Java语言编写的数据迁移开源
工具
Sqoop可以通过Sqoop这个工具实现传统的关系型数据库(RDBMS )与Hadoop云环境平台的数据迁移 - ETL
数据抽取是从不同的数据源(不同物理环境和背景以及多样化的数据)中通过采用不同的方法抽取数据的一个过程。此外,可以通过使用机器学习方法对网页内容中半结构化的数据进行抽取。而对于非结构化数据,可通过一种模拟线性模型的模糊匹配方法进行处理;在实际的应用中,数据源通常为传统关系型数据库,数据抽取的方法大概包括全量抽取(数据迁移)、增量抽取(只抽取自上次抽取后传统关系型数据库的数据表中有变化的数据)
数据转换是从数据源中抽取获得的数据格式与目标数据格式可能存在不一致的情况。所以需要对抽取后的数据进行数据转换以及加工处理,包括数据的合并、汇总、过滤和转换,重新对数据进行格式化等过程。
数据清洗是指数据在加载到数据仓库之前,可能会存在一些问题数据,即“脏数据”,如不完整数据、错误数据和重复数据等,须进行数据清洗,这是一个不断反复的过程。对于数据清洗的研究,以及有比较丰富的数据清洗算法可供参考使用,相似重复数据监测与消除算法、DBMS的集成数据清理算法和增量数据清洗算法等层出不穷。
数据加载是将经过数据转换和数据清洗后的数据依照实际数据模型定义的表结构装载到目标库中。通常包含两种方式装载,一种是通过SQL语句进行直接的插入(insert)、删除(delete)和更新(Update)操作,另一种是采用批量装在方法,如bcp,bulk
4.4 Kettle数据迁移实例
Kettle是 Pentaho中的ETL工具
Kettle可以在 Windows、Linux、UNIX上运行,无须安装,数据抽取高效稳定
Kettle允许用户管理来自不同数据库的数据,它包括transformation和job两种脚本文件
Kettle目前包括Spoon、Pan、CHEF、Kitchen 4个产品
Kettle(现在已经更名为PDI,Pentaho Data Integration-Pentaho数据集成)。
- Kettle核心组件
- kettle的特点
- kettle的目录说明
- kettle的文件说明
- kettle的两种设计
Transformation(转换):完成针对数据的基础转换。
Job(作业):完成整个工作流的控制。
作业是步骤流,转换是数据流。这是作业和转换最大的区别。
作业的每一个步骤,必须等到前面的步骤都跑完了,后面的步骤才会执行;而转换会一次性把所有空间全部先启动(一个控件对应启动一个线程),然后数据流会从第一个控件开始,一条记录、一条记录地流向最后的控件。 - kettle的核心概念
1、可视化编程
Kettle可以被归类为可视化编程语言(Visula ProgrammingLanguages,VPL),因为Kettle可以使用图形化的方式定义复杂的ETL程序和工作流。
可视化编程一直是Kettle里的核心概念,它可以让你快速构建复杂的ETL作业和减低维护工作量。它通过隐藏很多技术细节,使IT领域更贴近于商务领域。
Kettle里的代码就是转换和作业。
2、转换
转换(transaformation)负责数据的输入、转换、校验和输出等工作。Kettle 中使用转换完成数据 ETL 全部工作。转换由多个步骤 (Step) 组成,如文本文件输入,过滤输出行,执行SQL 脚本等。各个步骤使用跳 (Hop) 来链接。 跳定义了一个数据流通道,即数据由一个步骤流 (跳) 向下一个步骤。在Kettle 中数据的最小单位是数据行(row),数据流中流动的其实是缓存的行集 (RowSet) 。
3、步骤
步骤(控件)是转换里的基本的组成部分,快速入门的案例中就存在两个步骤,“CSV文件输入”和“Excel输出”。
一个步骤有如下几个关键特性:
①步骤需要有一个名字,这个名字在同一个转换范围内唯一。
②每个步骤都会读、写数据行(唯一例外是“生成记录”步骤,该步骤只写数据)。
③步骤可将数据写到与之相连的一个或多个输出跳(hop),再传送到跳的另一端。
④大多数的步骤都可以有多个输出跳。一个步骤的数据发送可以被设置为分发和复制,
4、跳
跳就是步骤之间带箭头的连线,跳定义了步骤之间的数据通路。
跳实际上是两个步骤之间的被称之为行集的数据行缓存,行集的大小可以在转换的设置里定义。当行集满了,向行集写数据的步骤将停止写入,直到行集里又有了空间。当行集空了,从行集读取数据的步骤停止读取,直到行集里又有可读的数据行。
5、元数据
每个步骤在输出数据行时都有对字段的描述,这种描述就是数据行的元数据。通常包含下面一些信息。
①名称:数据行里的字段名是唯一的。
②数据类型:字段的数据类型。
③格式:数据显示的方式,如Integer的#、0.00。
④长度:字符串的长度或者BigNumber类型的长度。
⑤精度:BigNumber数据类型的十进制精度。
⑥货币符号:¥
⑦小数点符号:十进制数据的小数点格式。不同文化背景下小数点符号是不同的,一般是点(.)或逗号(,)。
⑧分组符号:数值类型数据的分组符号,不同文化背景下数字里的分组符号也是不同的,一般是点(.)或逗号(,)或单引号(’)
击此处编辑母版文本样式
• 第二级
6、数据类型
数据以数据行的形式沿着步骤移动。一个数据行是零到多个字段的集合,字段包含下面几种数据类型。
①String:字符类型数据
②Number:双精度浮点数。
③Integer:带符号长整型(64位)。
④BigNumber:任意精度数据。
⑤Date:带毫秒精度的日期时间值。
⑥Boolean:取值为true和false的布尔值。
⑦Binary:二进制字段可以包含图像、声音、视频及其他类型的二进制数据。
7、并行
跳的这种基于行集缓存的规则允许每个步骤都是由一个独立的线程运行,这样并发程度最高。这一规则也允许数据以最小消耗内存的数据流的方式来处理。在数据仓库里,我们经常要处理大量数据,所以这种高并发低消耗的方式也是ETL工具的核心需求。
对于kettle的转换,不能定义一个执行顺序,因为所有步骤都以并发方式执行:当转换启动后,所有步骤都同时启动,从它们的输入跳中读取数据,并把处理过的数据写到输出跳,直到输入跳里不再有数据,就中止步骤的运行。当所有的步骤都中止了,整个转换就中止了。
8、作业
作业 (Job),负责定义一个完成整个工作流的控制,比如将转换的结果发送邮件给相关人员。因为转换(transformation)以并行方式执行,所以必须存在一个串行的调度工具来执行转换,这就是 Kettle中的作业。
第五章 互联网数据抓取与处理
5.1 网络爬虫概述
- 网络爬虫,也称网络蜘蛛, 或网络机器人。它是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本,被广泛用于互联网搜索引擎、资讯采集、舆情监测等
- 网络爬虫一般分为数据采集,处理,储存三个部分
网络爬虫一般从一个或者多个初始 URL 开始,下载网页内容
通过搜索或是内容匹配手段获取网页中感兴趣的内容,同时不断从当前页面提取新的 URL
根据网络爬虫策略,按一定的顺序放入待抓取 URL 队列中,整个过程循环执行,一直到满足系统相应的停止条件
对这些被抓取的数据进行清洗,整理,并建立索引,存入数据库或文件中
最后根据查询需要,从数据库或文件中提取相应的数据,以文本或图表的方式显示出来
5.2 网络爬虫
- 主要应用
爬取网站上面的图片,以便集中进行浏览
爬取相关金融信息,并进行投资分析
将这多个新闻网站中的新闻信息爬取下来,集中进行阅读
利用爬虫将对应网页上的信息爬取过来,自动过滤掉网页中的广告,方便对信息的阅读与使用
利用爬虫,可以设置相应的规则,自动地从互联网中采集目标用户公开信息,方便营销使用
爬取网站的用户活跃度、发言数、热门文章等信息,进行相关分析
网络爬虫是一个功能很强的网页自动抓取程序,也是搜索引擎的重要组成部件
5.3 网络爬虫的抓取策略
网络爬虫的抓取策略是指在网络爬虫系统中决定URL在待抓取URL队列中排列顺序的方法
常见的网络爬虫抓取策略包括:
- 深度优先策略
- 广度优先策略
- 局部PageRank策略
局部PageRank策略是借鉴 PageRank的思想,按照一定的网页分析算法,预测候选URL与目标网页的相似度,或与主题的相关性,并选取评价最好的一个或几个URL进行抓取,即对于已经下载的网页,连同待抓取URL队列中的URL,形成网页集合,计算每个页面的PageRank值,计算完之后,将待抓取URL队列中的URL按照PageRank值的大小排列,并按照该顺序抓取页面
PageRank算法分为两步:
给每个网页一个PageRank值
通过(投票)算法不断迭代,直至每个网页的值达到平稳为止
基本概念:
(1)出链:如果在网页A中附加了网页B的超链接B-Link,用户浏览网页A时可以点击B-Link然后进入网页B。上面这种A附有B-Link这种情况表示A出链B。可知,网页A也可以出链C,如果A中也附件了网页C的超链接C-Link
(2)入链:上面通过点击网页A中B-Link进入B,表示由A入链B。如果用户自己在浏览器输入栏输入网页B的URL,然后进入B,表示用户通过输入URL入链B - OPIC策略
OPIC(Online Page Importance Computation)策略实际上也是对页面进行一个重要性打分。初始时,给所有页面一个相同的初始现金(cash)。当下载了某个页面P之后,将P的现金分摊给所有从P中分析出的链接,并且将P的现金清空。对于待抓取URL队列中的所有页面按照现金数进行排序
与PageRank相比,PageRank每次都需要迭代计算,而OPIC策略不需要迭代过程。因此,OPIC计算速度明显快于局部PageRank策略,是一种较好的重要性衡量策略,适合实时计算场景 - 大站优先策略
大站优先策略是指对于待抓取URL队列中的所有网页,根据所属的网站进行分类。对于待下载页面数多的网站,优先下载
这种策略的本质思想倾向于优先下载大型网站,大型网站往往包含更多的页面,而且大型网站往往是著名企业的内容,其网页质量一般较高。大量实际应用表明这种策略优先于深度优先策略 - 反向链接数策略
反向链接数策略是指一个网页被其他网页链接指向的数量。反向链接数表示的是一个网页的内容受到其他人的推荐的程度。因此,很多时候搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后顺序 - 最佳优先策略
最佳优先搜索策略是通过计算URL 描述文本与目标网页的相似度,或者与主题的相关性,根据所设定的阈值选出有效URL 进行抓取
5.4 网页更新策略
互联网中的网页信息经常更新,而网络爬虫程序需在网页更新后,对这些网页进行重新爬取
网页的更新频率与爬虫的频率越接近,则爬虫的效果越好。爬虫服务器资源有限的时候,爬虫也需要根据对应策略,让不同的网页具有不同的更新优先级,优先级高的网页更新,将获得较快的爬取响应
常见的网页更新策略包括:
- 用户体验策略
在搜索引擎查询某个关键词的时候,通常会搜索大量的网页,并且这些网页会按照一定的规则进行排名,但是,大部分用户都只会关注排名靠前的网页,所以,在爬虫服务器资源有限的情况下,爬虫会优先更新排名结果靠前的网页。这种更新策略称之为用户体验策略。
在这种策略中,爬虫程序中会保留对应网页的多个历史版本,并进行对应分析,依据这多个历史版本的内容更新、搜索质量影响、用户体验等信息,来确定对这些网页的爬取周期
- 历史数据策略
历史数据策略是依据某一个网页的历史更新数据,通过泊松分布进行建模等手段,预测该网页下一次更新的时间,从而确定下一次对该网页的爬取时间,也就是更新周期
- 聚类分析策略
以上两种策略,都需要历史数据作为依据。但是,若一个网页为新网页,则不会有对应的历史数据,爬虫服务器需要采取新的更新策略。比较常见的策略是聚类分析策略
聚类分析策略的基本原理是首先将海量网页进行聚类分析(即按照相似性进行分类),因为一般来说,相似的网页的更新频率类似。聚类之后,这些海量会被分为多个类,每个类中的网页具有类似的属性,即一般具有类似的更新频率。然后,对聚类结果中的每个类中的网页进行抽样,并计算出抽样网页的平均更新频率,从而确定每个聚类的网页爬行频率
5.5 网络爬虫方法
- 按网络爬虫功能可以分为:
– 批量型爬虫
批量型爬虫是根据用户配置进行网络数据的抓取,用户通常需要配置的信息包括URL或URL池、爬虫累计工作时间和爬虫累计获取的数据量等信息
这种方法适用于互联网数据获取的任何场景,通常用于评估算法的可行性以及审计目标URL数据的可用性。批量式爬虫实际上是增量型爬虫和垂直型爬虫的基础
– 增量型爬虫
增量型爬虫是根据用户配置持续进行网络数据的抓取,用户通常需要配置的信息包括URL或URL池、单个URL数据抓取频度和数据更新策略等信息。因此,增量型爬虫是持续不断的抓取,对于抓取到的网页,要定期更新,并且增量型爬虫需要及时反映这种变化。
这种方法可以实时获取互联网数据,通用的商业搜索引擎基本采用这种爬虫技术。
–垂直型爬虫
垂直型爬虫是根据用户配置持续进行指定网络数据的抓取,用户通常需要配置的信息包括URL或URL池、敏感热词和数据更新策略等信息。
垂直型爬虫的关键是如何识别网页内容是否属于指定行业或者主题。
这种方法可以实时获取互联网中与指定内容相关的数据,垂直搜索网站或者垂直行业网站通常采用这种爬虫技术 - 按网络爬虫系统结构和实现技术可以分为:
–通用网络爬虫
通用网络爬虫又称全网爬虫,它是根据预先设定的一个或若干初始种子URL开始,以此获得初始网页上的URL列表
在爬行过程中不断从URL队列中获取一个的URL,进而访问并下载该页面
页面下载后,页面解析器去掉页面上的HTML标记后得到页面内容,将摘要、URL等信息保存到Web数据库中
同时抽取当前页面上新的 URL,保存到 URL队列,直到满足系统停止条件 - –聚焦网络爬虫
聚焦网络爬虫也叫主题网络爬虫,顾名思义,聚焦网络爬虫是按照预先定义好的主题有选择地进行网页爬虫的一种爬虫技术,聚焦网络爬虫不像通用网络爬虫一样将目标资源定位在全互联网中,而是将爬取的目标网页定位在与主题相关的页面中,可以大大节省爬虫时所需的带宽资源和服务器资源 - 聚焦网络爬虫的功能模块
页面采集模块:主要是根据待访问URL队列进行页面下载,再将下载的页面交给页面分析模块处理
页面分析模块:对采集到的页面进行分析,主要用于连接链接排序模块和页面相关计算模块
页面相关度计算模块:系统核心模块,主要用于评估页面与主题的相关度,并提供爬行策略指导爬行过程
页面过滤模块:过滤掉与主题无关的链接,同时将该URL及其所有隐含的子链接一并去除,保证爬虫效率
链接排序模块:将过滤后页面按照优先级加入待访问URL队列
内容评价模块:评价内容重要性,根据内容重要性,可以确定哪些页面优先访问
–深层网络爬虫
DeepWeb(深层页面) 是指普通搜索引擎难以发现的信息内容Web页面
深层网络爬虫比表层网的更复杂些,它在访问并解析出URL后,还需要继续分析该页面是否包含有深层网入口的表单。若有包含,则还要模拟人的行为对该表单进行分析、填充、并提交,最后从返回页面中提取所需要的内容,将其加入到搜索引擎中参与索引,以提供用户查找
–分布式爬虫
分布式网络爬虫包含多个爬虫,***每个爬虫需要完成的任务和单个的爬行器类似,***它们从互联网上下载网页,并把网页保存在本地的磁盘,从中抽取URL并沿着这些URL的指向继续爬行
分布式网络爬虫按通信方式不同分布式网路爬虫可以分为主从式和对等式
主从式架构:
对等式架构
5.6 网络爬虫工具
Googlebot 是Google公司的网页抓取器,也称为Google 机器人或Google 探测器
百度蜘蛛是百度搜索引擎的一个自动程序。它的作用是访问收集整理互联网上的网页、图片、视频等内容,然后分门别类建立索引数据库,使用户能在百度搜索引擎中搜索到各网站的网页、图片、视频等内容
Apache Nutch是一个包含Web爬虫和全文搜索功能的开源搜索引擎,使用Java语言实现。相对于商用的搜索引擎,它的工作流程更加公开透明,拥有很强的可定制性,并且支持分布式爬虫,Nutch最新版本的底层实现使用Hadoop
八爪鱼数据采集系统以完全自主研发的分布式云计算平台为核心的,可以非常容易的从任何网页精确采集需要的数据,生成自定义的、规整的数据格式
火车采集器是合肥乐维信息技术有限公司开发的一款专业网络数据采集软件。它是一个供各大主流文章系统、论坛系统等使用的多线程内容采集发布程序
集搜客是一款功能强大的网页数据抓取软件,它既可以实现数据采集,也可以进行数据挖掘等分析处理
- Googlebot
Google将Googlebot 分布在多台计算机上,以便提高性能并随着网络规模的扩大而扩大。此外,为了降低带宽占用,Google会在计算机上运行多个抓取工具,这些抓取工具主要包括:
Googlebot:抓取网页中的文字内容。
Googlebot-Mobile:抓取网页中的文字内容,用于Google 手机搜索。
Googlebot-Image:抓取网页内的图片内容,保存入Google 图片搜索数据库。
Mediapartners-Google:抓取网页中的文字内容,用于Google Adsense 分析关键词。
Adsbot-Google:抓取网页中的文字内容,用于为Google AdWords 提供参考 - 百度蜘蛛
百度蜘蛛使用深度优先搜索策略和权重优先策略抓取页面。
百度蜘蛛主要包括的搜索工具有网页搜索Baiduspider、图片搜索Baiduspider-image、视频搜索 Baiduspider-video、新闻搜索 Baiduspider-news、百度搜藏 Baiduspider-favo、百度联盟Baiduspider-cpro和竞价蜘蛛Baiduspider-sfkr工具 - Apache Nutch
Nutch爬虫使用广度优先策略进行抓取,设计主要包括存储与爬虫
Nutch存储主要使用数据文件。它的数据文件包括WebDatabase、segment和index三类
Nutch爬虫过程:
1、根据WebDB生成一个待抓取的URL集合
2、根据URL集合进行网页抓取,用抓取到的网页更新WebDB
3、根据更新后的WebDB生成新的待抓取URL集合
4、下一轮抓取循环开始
总之是“产生-抓取-更新”的循环过程
Nutch对于抓取的数据和索引是采用分布式存储的,实际上,Nutch分布式文件系统的基础架构是Hadoop文件系统,另外Nutch采用Map/Reduce进行分布式计算 - 火车采集器
火车采集器功能强大,拥有内容采集和数据导入功能,并且可以将采集的任何网页数据发布到远程服务器
抓取过程:
1、如果需要获取一个栏目的网页里的所有内容,则需要采集这个网页的网址
2、火车采集器按照规则抓取列表页面,从中分析出网址,再去抓取获得网址的网页内容
3、根据自定义采集规则,对下载网页进行分析,将标题内容等信息分离开并保存
火车采集器采集数据是分成两个步骤的,一是采集数据,二是发布数据
采集数据:确定采集网址和采集内容,用户可以自定义采集规则获取需要的数据
发布数据:将数据发布到自己的论坛,系统支持Web在线发布到网站、保存到本地文件、导入自定义数据库等方式 - 集搜客
集搜客网络爬虫功能强大且简单易用,支持Windows/Mac/Linux三种操作系统
集搜客网络爬虫是由服务器和客户端两部分组成,服务器是用来存储规则和线索(待抓网址);客户端包括MS谋数台和DS打数机,其中MS谋数台是用来制作网页抓取规则的、DS打数机就是用来采集网页数据的 - 八爪鱼数据采集
八爪鱼数据采集系统功能丰富,可以采集金融数据、实时监控各大门户网站数据、实时监控社交网站数据、监控各大房地产相关网站数据等
八爪鱼采集系统主要优势:
1、操作简单,完全可视化图形操作,使用简单
2、云采集
3、拖拽式采集流程
4、图文识别
5、定时自动采集
6、免费开源 - Python爬虫技术
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,它是由荷兰人Guido van Rossum于1989年发明。
Python 语言的特点如下:
简单、易学、容易维护
可解释性和可移植性
可扩展和可嵌入性
支持面向对象
丰富的库