采集工具(如何从大数据中采集出有用的信息是大数据发展的最关键因素)
优采云 发布时间: 2022-01-02 05:14采集工具(如何从大数据中采集出有用的信息是大数据发展的最关键因素)
大数据的来源多种多样。在大数据时代背景下,如何采集从大数据中获取有用的信息,是大数据发展的最关键因素。大数据采集是大数据产业的基石,大数据阶段的工作采集是大数据的核心技术之一。为了高效采集大数据,根据采集环境和数据类型选择合适的大数据采集方法和平台非常重要。以下是一些常用的大数据平台和工具。
1 个水槽
Flume 作为 Hadoop 的一个组件,是 Cloudera 专门开发的分布式日志采集系统。尤其是近几年,随着Flume的不断完善,用户在开发过程中的便利性大大提高,Flume现在已经成为Apache Top项目之一。
Flume 提供了从 Console(控制台)、RPC(Thrift-RPC)、Text(文件)、Tail(UNIX Tail)、Syslog 和 Exec(命令执行)等数据源采集数据的能力。
Flume 使用多主方法。为了保证配置数据的一致性,Flume 引入了 ZooKeeper 来保存配置数据。 ZooKeeper 本身可以保证配置数据的一致性和高可用。此外,ZooKeeper 可以在配置数据发生变化时通知 Flume Master 节点。使用 Gossip 协议在 Flume Master 节点之间同步数据。
Flume对于特殊场景也有很好的自定义扩展能力,所以Flume适用于大部分日常数据采集场景。由于 Flume 使用 JRuby 构建,因此它依赖于 Java 运行时环境。 Flume 被设计为分布式管道架构,可以看作是数据源和目的地之间的 Agent 网络,以支持数据路由。
Flume 支持设置Sink 的Failover 和负载均衡,这样可以保证在Agent 出现故障的情况下,整个系统仍然可以正常采集数据。 Flume中传输的内容定义为一个事件,由Headers(包括元数据,即Meta Data)和Payload组成。
Flume 提供 SDK,可支持用户定制开发。 Flume 客户端负责将事件发送到事件源的 Flume Agent。客户端通常与生成数据源的应用程序位于同一进程空间中。常见的 Flume 客户端有 Avro、Log4J、Syslog 和 HTTP Post。
2 流利
Fluentd 是另一种开源的数据采集架构,如图 1 所示。Fluentd 是用 C/Ruby 开发的,使用 JSON 文件来统一日志数据。通过丰富的插件,您可以采集各种系统或应用程序的日志,然后根据用户定义对日志进行分类。通过 Fluentd,可以非常轻松地实现跟踪日志文件并对其进行过滤并转储到 MongoDB 等操作。 Fluentd 可以将人们从繁琐的日志处理中彻底解放出来。
图 1 Fluentd 架构
Fluentd 具有多个特点:安装方便、占用空间小、半结构化数据记录、灵活的插件机制、可靠的缓冲和日志转发。为本产品提供支持和维护。此外,使用JSON统一数据/日志格式是它的另一个特点。与Flume相比,Fluentd的配置相对简单。
Fluentd 有很好的扩展性,客户可以自己定制(Ruby)Input/Buffer/Output。 Fluentd 存在跨平台问题,不支持 Windows 平台。
Fluentd 的 Input/Buffer/Output 与 Flume 的 Source/Channel/Sink 非常相似。 Fluentd 架构如图 2 所示。
图 2 Fluentd 架构
3 日志存储
Logstash 是著名的开源数据栈 ELK(ElasticSearch、Logstash、Kibana)中的 L。因为 Logstash 是用 JRuby 开发的,所以它在运行时依赖于 JVM。 Logstash的部署架构如图3所示,当然这只是一个部署选项。
图 3 Logstash 部署架构
一个典型的Logstash配置如下,包括Filter的Input和Output的设置。
输入{
文件{
type =>"Apache 访问"
path =>"/var/log/Apache2/other_vhosts_access.log"
}
文件{
type =>"pache-error"
path =>"/var/log/Apache2/error.log"
}
}
过滤器{
grok {
match => {"message"=>"%(COMBINEDApacheLOG)"}
}
日期{
match => {"timestamp"=>"dd/MMM/yyyy:HH:mm:ss Z"}
}
}
输出{
标准输出{}
Redis {
host=>"192.168.1.289"
data_type =>“列表”
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 是 Facebook 开发的数据(日志)采集系统。它的官方网站已经很多年没有维护了。 Scribe 为日志的“分布式采集、统一处理”提供了可扩展、高容错的解决方案。当中央存储系统的网络或机器出现故障时,Scribe 会将日志转储到本地或其他位置;当中央存储系统恢复时,Scribe 会将转储的日志重新传输到中央存储系统。 Scribe 通常与 Hadoop 结合使用,将日志推送(push)到 HDFS,Hadoop 通过 MapReduce 作业进行定期处理。
Scribe 架构如图 5 所示。
图 5 Scribe 架构
Scribe 架构比较简单,主要包括三部分,分别是 Scribe agent、Scribe 和存储系统。
6 Splunk
在商业化的大数据平台产品中,Splunk提供了完整的数据采集、数据存储、数据分析处理、数据呈现能力。 Splunk 是一个分布式机器数据平台,具有三个主要作用。 Splunk 架构如图 6 所示。
图 6 Splunk 架构
搜索:负责数据的搜索和处理,提供搜索过程中的信息提取功能。
Indexer:负责数据存储和索引。
Forwarder:负责数据的采集、清理、变形、发送到Indexer。
Splunk 内置了对 Syslog、TCP/UDP 和假脱机的支持。同时,用户可以通过开发Input和Modular Input来获取具体的数据。 Splunk提供的软件仓库中有很多成熟的数据应用,如AWS、数据库(DBConnect)等,可以方便地从云端或数据库中获取数据,进入Splunk的数据平台进行分析。
Search Head 和Indexer 都支持Cluster 的配置,具有高可用和高扩展性,但Splunk 尚不具备Cluster for Forwarder 的功能。也就是说,如果一台 Forwarder 机器出现故障,数据采集也会中断,并且正在运行的数据采集任务无法故障转移到其他 Forwarder。
7 Scrapy
Python 的爬虫框架叫做 Scrapy。 Scrapy 是一种由 Python 语言开发的快速、高级的屏幕抓取和网页抓取架构,用于抓取网站并从页面中提取结构化数据。 Scrapy 用途广泛,可用于数据挖掘、监控和自动化测试。
Scrapy 的吸引力在于它是一种任何人都可以根据自己的需要轻松修改的架构。它还提供了多种爬虫的基类,如BaseSpider、Sitemap爬虫等,最新版本提供了对Web2.0爬虫的支持。
Scrapy 的工作原理如图 7 所示。
图7 Scrapy运行原理
Scrapy 的整个数据处理流程由 Scrapy 引擎控制。 Scrapy运行流程如下:
(1)Scrapy引擎打开域名时,爬虫对域名进行处理,让爬虫得到第一个爬取到的URL。
(2)Scrapy 引擎首先从爬虫那里获取需要爬取的第一个 URL,然后在调度中作为请求进行调度。
(3)Scrapy 引擎从调度器获取下一个要爬取的页面。
(4)调度返回下一个爬取的URL给引擎,引擎通过下载中间件发送给下载器。
(5)当下载器下载网页时,响应内容通过下载器中间件发送给Scrapy引擎。
(6)Scrapy 引擎收到下载器的响应,通过爬虫中间件发送给爬虫进行处理。
(7)爬虫处理响应并返回爬取的item,然后向Scrapy引擎发送新的请求。
(8)Scrapy 引擎将捕获的项目放入项目管道并向调度程序发送请求。
(9)系统重复以下步骤(2)的操作,直到调度器中没有请求,然后断开Scrapy引擎与域的连接。