大数据的起源多种多样,在大数据时代背景下,如何从大数据中采集出有用的信息是大数据倒退的最关键因素。大数据采集是大数据产业的基石,大数据采集阶段的工作是大数据的核心技术之一。为了高效采集大数据,根据采集环境及数据类型抉择适当的大数据采集办法及平台至关重要。上面介绍一些罕用的大数据采集平台和工具。
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引擎与域之间的分割。