大数据架构简述(二):数据获取

来源:互联网 发布:网络数据传输原理详解 编辑:程序博客网 时间:2024/06/07 06:46

1.数据分类

按数据形态,我们把数据分为结构化数据和非结构化数据两种。

结构化数据如传统的Data Warehouse数据,字段有固定的长度和语义,计算机程序可以直接处理

非结构化数据有文本数据、图像数据、自然语言数据等,计算机程序无法直接进行处理,需要进行格式转换或信息提取。

2.数据获取组件

常见的信息获取组件包括电信特有的探针技术,为获取网页数据常用的爬虫,采集日志数据的组件Flume,以及用于消息转发的Kafka消息中间件

2.1 探针

在电信运营商领域,从电信的路由器、交换机上把数据采集上来的专有设备是探针


2.2 网络爬虫

网络爬虫的主要目的是将互联网上的网页下载到本地,形成一个或联网内容的镜像备份。

2.2.1 基本原理

下图是一个典型的网络爬虫框架


网络爬虫的工作流程如下:

1)首先人工选取一部分种子URL

2)将这些URL放入待抓取URL队列

3)从待抓取URL队列中取出待抓取URL,解析DNS得到主机IP,并将URL对应的网页下载下来,存储到自己的网页库中。将这些已抓取的URL放入已抓取URL队列中

4)分析已抓取网页中的其他URL,并将URL放入待抓取的URL队列中,进行下一个循环。

2.2.2 抓取策略

1)深度优先遍历策略

2)广度悠闲遍历策略

3)反向链接数策略策略

反向链接数是指一个网页被其他网页链接指向的数量。反向链接数表示的是一个网页的内容受到其他人的推荐的程度。因此,很多时候搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后顺序。

4)PartialPageRank策略

Partial PageRank算法借鉴了PageRank算法的思想:对于已经下载的网页,连同待抓取URL队列中的URL,形成网页集合,计算每个页面的PageRank值,计算完之后,将待抓取URL队列中的URL按照PageRank值的大小排列,并按照该顺序抓取页面。如果每次抓取一个页面,就重新计算PageRank值,一种折中方案是:每抓取K个页面后,重新计算一次PageRank值。但是这种情况还会有一个问题:对于已经下载下来的页面中分析出的链接,也就是我们之前提到的未知网页那一部分,暂时是没有PageRank值的。为了解决这个问题,会给这些页面一个临时的PageRank值:将这个网页所有入链传递进来的PageRank值进行汇总,这样就形成了该未知页面的PageRank值,从而参与排序。

5)OPIC策略

该算法实际上也是对页面进行一个重要性打分。在算法开始前,给所有页面一个相同的初始现金(cash)。当下载了某个页面P之后,将P的现金分摊给所有从P中分析出的链接,并且将P的现金清空。对于待抓取URL队列中的所有页面按照现金数进行排序。

6)大站优先策略

对于待抓取URL队列中的所有网页,根据所属的网站进行分类。对于待下载页面数多的网站,优先下载。这个策略也因此叫做大站优先策略。

2.2.3 两个Python爬虫实例

Python爬虫实例——基于urlib、urlib和re实现

Python爬虫实例——基于BeautifulSoup和requests实现

2.3 日志收集(Flume)

任何一个系统在运行过程中都会产生大量有用的数据。

Flume是一款分布式日志收集系统。

Flume的逻辑架构如下所示:


Flume采用了分层架构:分别为agent,collector和storage

1)agent的作用是将数据源的数据发送给collector,数据源包括文件,网络端口等

2)collector的作用是将多个agent的数据汇总后,加载到storage中

3)storage是存储系统,可以是一个普通file,也可以是HDFS,HIVE,HBase,分布式存储等

4)Master是管理协调agent和collector的配置等信息,是flume集群的控制器

2.4 数据分发中间件(Kafka)

数据采集上来后,需要送到后端组件进一步分析,为了简化传送逻辑、增强灵活度,在前端和后端的处理之需要一个消息中间件,以保障消息可靠性、匹配前后端的速度差。

Kafka架构如下图所示


整个架构包括3个角色

1)生产者:消息和数据产生者

2)代理:缓存代理,Kafka的核心功能

3)消费者:消息和数据消费者

整体架构很简单,Kafka给Produce和Consumer提供注册接口,数据从Produce发送到Broker,Broker承担一个中间缓存和分发的作用,负责分发注册到系统中的Consumer

阅读全文
0 0
原创粉丝点击