常用的内部数据获取工具是ETL,数据采集ETL
1-flume 2-fluent D3-logstash 4-chuk wa5-scribe 6-splunk 7-scratch
单水槽
Flume作为Hadoop的一个组件,是Cloudera专门开发的一个分布式日志收集系统。尤其是近几年,随着Flume的不断完善,用户在开发过程中的易用性有了很大的提高,Flume现在已经成为Apache顶级项目之一。
Flume提供了从控制台、RPC、text、tail、Syslog、Exec等数据源收集数据的功能。
Flume采用多主机模式。为了保证配置数据的一致性,Flume引入了ZooKeeper来保存配置数据。ZooKeeper本身可以保证配置数据的一致性和高可用性。此外,如果配置数据发生变化,ZooKeeper可以通知Flume主节点。使用Gossip协议在Flume主节点之间同步数据。
Flume适用于大多数日常数据采集场景,因为Flume对于特殊场景也有很好的定制扩展性。Flume是由JRuby生成的,所以它依赖于Java运行时环境。Flume被设计成一个分布式管道架构。认为数据源和目标之间存在代理网络,支持数据路由。
Flume支持Sink故障设置和负载均衡设置。这样,即使代理出现故障,也能保证整个系统正常采集数据。Flume传输的内容定义为一个由头(包含元数据或元数据的事件和有效载荷)组成的事件。
Flume提供SDK支持用户定制开发。Flume客户端负责将事件发送到事件源的Flume代理。客户端通常与生成数据源的APP应用程序位于同一个流程区域。典型的Flume客户端包括Avro、Log4J、Syslog和HTTP Post。
2-Fluent Fluent是另一种开源的数据收集架构,如图1所示。Fluentd用C/Ruby开发,用JSON文件统一日志数据。的丰富插件使您能够从各种系统和应用程序中收集日志,并根据用户定义对日志进行分类和处理。使用Fluentd,跟踪日志文件、过滤日志文件并将其导出到MongoDB非常简单。Fluentd可以完全摆脱麻烦的日志处理。
Fluentd有几个功能特性,包括安装简单、占用空间小、半结构化数据记录、灵活的插件机制、可靠的缓冲和日志传输。宝数据公司为该产品提供支持和维护。此外,JSON统一的数据/日志形式也是其特点。与水槽相比,流体的组成相对简单。
Fluentd具有非常好的可扩展性,客户可以自定义自己的输入/缓冲/输出。Fluentd存在跨平台问题,不支持Windows平台。
Fluentd的输入/缓冲区/输出与Flume的源/通道/汇非常相似。Fluentd架构如图2所示。
3- Logstash Logstash是著名开源数据栈elk(Elasticsearch,Logstash,Kibana)中的L。Logstash是用JRuby开发的,所以在运行时依赖于JVM。Logstash的部署架构如图3所示。当然,这只是部署的一个选项。
典型的Logstash配置如下。包括输入和过滤器在内的输出设置如下。
输入{ file } type= Apache-access path=/var/log/Apache 2/other _ vhosts _ access . log }文件{ type= le .filter { grok { match={ message = %(combinedapachelog()} date { match={ timestamp = ddate } output { stdot } Redis { host= 192 . 168 . 1 . 289 data _ type= list key= log stash }大多数情况下,ELK会同时将您的数据系统显示为一个堆栈。
4- Chukwa Chukwa是Apache拥有的另一个开源数据收集平台。其他人未知。Chukwa基于Hadoop的HDFS和MapReduce,由Java实现,提供可扩展性和可靠性。提供多种型号。
块来支持Hadoop集群日志分析。Chukwa还提供数据显示、分析和监控。该项目目前处于非活动状态。
Chukwa适应以下需求:
(1)灵活、动态、可控的数据源。
(2)高性能和高度可扩展的存储系统。
(3)用于分析收集的大规模数据的合适框架。
Chukwa架构如下图所示。
5- Scribe Scribe是由脸书开发的数据(日志)收集系统。官网已经很多年没有维护了。Scribe为日志的“分布式收集和统一处理”提供了可扩展的容错方案。当中央存储系统的网络或机器出现故障时,Scribe会将日志转移到本地或其他位置;当中央存储系统恢复时,Scribe会将传输的日志重新传输到中央存储系统。Scribe通常与Hadoop结合使用,将日志推送到HDFS,而Hadoop通过MapReduce作业定期处理日志。
Scribe架构如下图所示。
划片架构比较简单,主要包括三个部分,分别是划片代理、划片和存储系统。
6- Splunk在商业化的大数据平台产品中,Splunk提供完整的数据采集、数据存储、数据分析和处理以及数据呈现能力。Splunk是一个分布式机器数据平台,有三个主要角色。
Splunk架构如下图所示。
搜索:负责数据搜索和处理,在搜索过程中提供信息提取功能。
Inde:负责数据存储和索引。
Forwarder:负责数据收集,清洗,变形,发送到索引器。
Splunk内置了对系统日志、TCP/UDP和假脱机的支持。同时,用户可以通过开发输入和模块化输入获得具体数据。Splunk提供的软件仓库中有很多成熟的数据采集应用,如AWS、DBConnect等。可以轻松从云端或数据库获取数据,进入Splunk的数据平台进行分析。
搜索头和索引器都支持集群的配置,即高可用、高扩展,但是Splunk还没有Forwarder的集群功能。也就是说,如果其中一个货代的机器出现故障,数据收集就会中断,正在运行的数据收集任务就无法故障转移到其他货代。
7- Scrapy Python的爬虫架构叫做Scrapy。Scrapy是Python语言开发的一种快速、高级的屏幕抓取和网页抓取架构,用于抓取网站和从页面中提取结构化数据。Scrapy用途广泛,可用于数据挖掘、监控和自动化测试。
Scrapy的吸引力在于它是一个架构,任何人都可以根据自己的需要轻松修改它。它还为各种类型的爬虫提供基类,如BaseSpider、Sitemap crawler等。最新版本提供了对Web 2.0爬虫的支持。
Scrapy的工作原理如下图所示。
Scrapy的整个数据处理过程由Scrapy引擎控制。Scrapy操作流程如下:
(1)当1)Scrapy引擎打开一个域名时,crawler处理该域名,并让crawler获得第一个爬取的URL。
(2)Scrapy引擎首先从爬虫中获取第一个要爬取的URL,然后在调度中作为请求进行调度。
(3)Scrapy引擎从时间表中获取下一页。
(4)调度将下一个爬取的URL返回给引擎,引擎通过下载中间件将它们发送给下载器。
(5)网页被下载器下载后,响应内容通过下载器中间件发送给垃圾引擎。
(6)Scrapy引擎接收下载器的响应,通过爬虫中间件发送给爬虫进行处理。
(7)爬虫处理响应并返回爬行的项目,然后向Scrapy引擎发送新的请求。
(8)Scrapy引擎将捕获的项目放入项目管道,并向调度程序发送请求。
(9)系统重复步骤(2)之后的操作,直到调度程序中没有请求,然后将Scrapy引擎与域断开。