大数据的起源多种多样,在大数据时代背景下,如何从大数据中采集出有用的信息是大数据倒退的最关键因素。大数据采集是大数据产业的基石,大数据采集阶段的工作是大数据的核心技术之一。为了高效采集大数据,根据采集环境及数据类型抉择适当的大数据采集办法及平台至关重要。上面介绍一些罕用的大数据采集平台和工具。
1 Flume
Flume 作为 Hadoop 的组件,是由 Cloudera 专门研发的分布式日志收集零碎。尤其近几年随着 Flume 的不断完善,用户在开发过程中应用的便利性失去很大的改善,Flume 现已成为 Apache Top 我的项目之一。
Flume 提供了从 Console(控制台)、RPC(Thrift-RPC)、Text(文件)、Tail(UNIX Tail)、Syslog、Exec(命令执行)等数据源上收集数据的能力。
Flume 采纳了多 Master 的形式。为了保障配置数据的一致性,Flume 引入了 ZooKeeper,用于保留配置数据。ZooKeeper 自身可保障配置数据的一致性和高可用性。另外,在配置数据发生变化时,ZooKeeper 能够告诉 Flume Master 节点。Flume Master 节点之间应用 Gossip 协定同步数据。
Flume 针对非凡场景也具备良好的自定义扩大能力,因而 Flume 实用于大部分的日常数据采集场景。因为 Flume 应用 JRuby 来构建,所以依赖 Java 运行环境。Flume 设计成一个分布式的管道架构,能够看成在数据源和目的地之间有一个 Agent 的网络,反对数据路由。
Flume 反对设置 Sink 的 Failover 和加载均衡,这样就能够保障在有一个 Agent 生效的状况下,整个零碎仍能失常收集数据。Flume 中传输的内容定义为事件(Event),事件由 Headers(蕴含元数据,即 Meta Data)和 Payload 组成。
Flume 提供 SDK,能够反对用户定制开发。Flume 客户端负责在事件产生的源头把事件发送给 Flume 的 Agent。客户端通常和产生数据源的利用在同一个过程空间。常见的 Flume 客户端有 Avro、Log4J、Syslog 和 HTTP Post。
2 Fluentd
Fluentd 是另一个开源的数据收集架构,如图 1 所示。Fluentd 应用 C /Ruby 开发,应用 JSON 文件来对立日志数据。通过丰盛的插件,能够收集来自各种零碎或利用的日志,而后依据用户定义将日志做分类解决。通过 Fluentd,能够十分轻易地实现像追踪日志文件并将其过滤后转存到 MongoDB 这样的操作。Fluentd 能够彻底地把人从繁缛的日志解决中解放出来。
图 1 Fluentd 架构
Fluentd 具备多个性能特点:装置不便、占用空间小、半结构化数据日志记录、灵便的插件机制、牢靠的缓冲、日志转发。Treasure Data 公司对该产品提供反对和保护。另外,采纳 JSON 对立数据 / 日志格局是它的另一个特点。绝对 Flume,Fluentd 配置也绝对简略一些。
Fluentd 的扩展性十分好,客户能够本人定制(Ruby)Input/Buffer/Output。Fluentd 具备跨平台的问题,并不反对 Windows 平台。
Fluentd 的 Input/Buffer/Output 十分相似于 Flume 的 Source/Channel/Sink。Fluentd 架构如图 2 所示。
图 2 Fluentd 架构
3 Logstash
Logstash 是驰名的开源数据栈 ELK(ElasticSearch,Logstash,Kibana)中的那个 L。因为 Logstash 用 JRuby 开发,所以运行时依赖 JVM。Logstash 的部署架构如图 3 所示,当然这只是一种部署的选项。
图 3 Logstash 的部署架构
一个典型的 Logstash 的配置如下,包含 Input、Filter 的 Output 的设置。
input {
file {
type =>"Apache-access"
path =>"/var/log/Apache2/other_vhosts_access.log"
}
file {
type =>"pache-error"
path =>"/var/log/Apache2/error.log"
}
}
filter {
grok {match => {"message"=>"%(COMBINEDApacheLOG)"}
}
date {match => {"timestamp"=>"dd/MMM/yyyy:HH:mm:ss Z"}
}
}
output {stdout {}
Redis {
host=>"192.168.1.289"
data_type => "list"
key => "Logstash"
}
}
简直在大部分的状况下,ELK 作为一个栈是被同时应用的。在你的数据系统应用 ElasticSearch 的状况下,Logstash 是首选。
4 Chukwa
Chukwa 是 Apache 旗下另一个开源的数据收集平台,它远没有其余几个有名。Chukwa 基于 Hadoop 的 HDFS 和 MapReduce 来构建(用 Java 来实现),提供扩展性和可靠性。它提供了很多模块以反对 Hadoop 集群日志剖析。Chukwa 同时提供对数据的展现、剖析和监督。该我的项目目前曾经不沉闷。
Chukwa 适应以下需要:
(1)灵便的、动静可控的数据源。
(2)高性能、高可扩大的存储系统。
(3)适合的架构,用于对收集到的大规模数据进行剖析。
Chukwa 架构如图 4 所示。
图 4 Chukwa 架构
5 Scribe
Scribe 是 Facebook 开发的数据(日志)收集零碎。其官网曾经多年不保护。Scribe 为日志的“分布式收集,对立解决”提供了一个可扩大的,高容错的计划。当地方存储系统的网络或者机器呈现故障时,Scribe 会将日志转存到本地或者另一个地位;当地方存储系统复原后,Scribe 会将转存的日志从新传输给地方存储系统。Scribe 通常与 Hadoop 联合应用,用于向 HDFS 中 push(推)日志,而 Hadoop 通过 MapReduce 作业进行定期解决。
Scribe 架构如图 5 所示。
图 5 Scribe 架构
Scribe 架构比较简单,次要包含三局部,别离为 Scribe agent、Scribe 和存储系统。
6 Splunk
在商业化的大数据平台产品中,Splunk 提供残缺的数据采集、数据存储、数据分析和解决,以及数据展示的能力。Splunk 是一个分布式机器数据平台,次要有三个角色。Splunk 架构如图 6 所示。
图 6 Splunk 架构
Search:负责数据的搜寻和解决,提供搜寻时的信息抽取性能。
Indexer:负责数据的存储和索引。
Forwarder:负责数据的收集、荡涤、变形,并发送给 Indexer。
Splunk 内置了对 Syslog、TCP/UDP、Spooling 的反对,同时,用户能够通过开发 Input 和 Modular Input 的形式来获取特定的数据。在 Splunk 提供的软件仓库里有很多成熟的数据采集利用,如 AWS、数据库(DBConnect)等,能够不便地从云或数据库中获取数据进入 Splunk 的数据平台做剖析。
Search Head 和 Indexer 都反对 Cluster 的配置,即高可用、高扩大的、但 Splunk 当初还没有针对 Forwarder 的 Cluster 的性能。也就是说,如果有一台 Forwarder 的机器出了故障,则数据收集也会随之中断,并不能把正在运行的数据收集工作因故障切换(Failover)到其余的 Forwarder 上。
7 Scrapy
Python 的爬虫架构叫 Scrapy。Scrapy 是由 Python 语言开发的一个疾速、高层次的屏幕抓取和 Web 抓取架构,用于抓取 Web 站点并从页面中提取结构化数据。Scrapy 的用处宽泛,能够用于数据挖掘、监测和自动化测试。
Scrapy 吸引人的中央在于它是一个架构,任何人都能够依据需要不便地进行批改。它还提供多种类型爬虫的基类,如 BaseSpider、Sitemap 爬虫等,最新版本提供对 Web 2.0 爬虫的反对。
Scrapy 运行原理如图 7 所示。
图 7 Scrapy 运行原理
Scrapy 的整个数据处理流程由 Scrapy 引擎进行管制。Scrapy 运行流程如下:
(1)Scrapy 引擎关上一个域名时,爬虫解决这个域名,并让爬虫获取第一个爬取的 URL。
(2)Scrapy 引擎先从爬虫那获取第一个须要爬取的 URL,而后作为申请在调度中进行调度。
(3)Scrapy 引擎从调度那里获取接下来进行爬取的页面。
(4)调度将下一个爬取的 URL 返回给引擎,引擎将它们通过下载中间件发送到下载器。
(5)当网页被下载器下载实现当前,响应内容通过下载器中间件被发送到 Scrapy 引擎。
(6)Scrapy 引擎收到下载器的响应并将它通过爬虫中间件发送到爬虫进行解决。
(7)爬虫解决响应并返回爬取到的我的项目,而后给 Scrapy 引擎发送新的申请。
(8)Scrapy 引擎将抓取到的放入我的项目管道,并向调度器发送申请。
(9)零碎反复第(2)步前面的操作,直到调度器中没有申请,而后断开 Scrapy 引擎与域之间的分割。