吐血整理:常用的大数据采集工具,你不可不知
大数据的来源多种多样,在大数据时代背景下,如何从大数据中采集出有用的信息是大数据发展的最关键因素。大数据采集是大数据产业的基石,大数据采集阶段的工作是大数据的核心技术之一。为了高效采集大数据,依据采集环境及数据类型选择适当的大数据采集方法及平台至关重要。下面介绍一些常用的大数据采集平台和工具。
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 的设置。
几乎在大部分的情况下,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 引擎与域之间的联系。
以上内容摘自《大数据采集与处理》一书。
评论