一.flume概览

1.概述:

    Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据。它具有基于流数据流的简单灵活的架构。它具有可靠的可靠性机制和许多故障 转移和恢复机制,具有强大的容错性。它使用简单的可扩展数据模型,允许在线分析应用程序。

2.大数据架构

  • 数据采集(爬虫\日志数据\flume)
  • 数据存储(hdfs/hive/hbase(nosql))
  • 数据计算(mapreduce/hive/sparkSQL/sparkStreaming/flink)
  • 数据可视化

3.Flume基于流式架构,容错性强,也很灵活简单。

4.Flume、Kafka用来实时进行数据收集,Spark、Flink用来实时处理数据,impala用来实时查询。

二.flume角色

1.source

  • 数据源,用户采集数据,source产生数据流,同时会把产生的数据流传输到channel。

2.channel

  • 传输通道,用于桥接source和sink

3.sink

  • 下沉,用于收集channel传输的数据,将数据源传递到目标源

4.event

  • 在flume中使用事件作为传输的基本单元

flume支持python爬虫数据源 flume主要用来采集什么数据_配置文件

5.Flume常用的Type

(1)source

名称

含义

注意点

avro

avro协议的数据源

主要用于agent to agent之间的连接

exec

unix命令

可以命令监控文件 tail -F

spooldir

监控一个文件夹

不能含有子文件夹,不监控windows文件夹,处理完文件不能再写数据到文件 ,文件名不能冲突

TAILDIR

既可以监控文件也可以监控文件夹

支持断点续传功能, 重点使用这个

netcat

监听某个端口

kafka

监控卡夫卡数据

(2)sink

名称

含义

注意点

kafka

写到kafka中

HDFS

将数据写到HDFS中

logger

输出到控制台

avro

avro协议

配合avro source使用

(3)channel:

名称

含义

注意点

memory

存在内存中

kafka

将数据存到kafka中

file

存在本地磁盘文件中

6.flume的启动参数

(1)命令

参数

描述

help

打印帮助信息

agent

运行一个Flume Agent

avro-client

运行一个Avro Flume 客户端

version

显示Flume版本。

(2)全局选项

参数

描述

–conf,-c

在目录使用配置文件。指定配置文件放在什么目录

–classpath,-C

追加一个classpath

–dryrun,-d

不真正运行Agent,而只是打印命令一些信息。

–plugins-path

插件目录列表。默认:$FLUME_HOME/plugins.d

-Dproperty=value

设置一个JAVA系统属性值。

-Xproperty=value

设置一个JAVA -X的选项。

(3)Agent选项

参数

描述

–conf-file ,-f <file>

指定配置文件,这个配置文件必须在全局选项的–conf参数定义的目录下。(必填)

–name,-n <name>

Agent的名称(必填)

–help,-h

帮助

日志相关:

  • -Dflume.root.logger=INFO,console

该参数将会把flume的日志输出到console,为了将其输出到日志文件(默认在FLUME_HOME/logs),可以将console改为LOGFILE形式,具体的配置可以修改$FLUME_HOME/conf/log4j.properties

  • -Dflume.log.file=./wchatAgent.logs

该参数直接输出日志到目标文件

(4)Avro客户端选项

参数

描述

–rpcProps,-P

连接参数的配置文件。

–host,-H

Event所要发送到的Hostname。

–port,-p

Avro Source的端口。

–dirname


Avro Source流到达的目录。

–filename,-F

Avro Source流到达的文件名。

–headerFile,-R

设置一个JAVA -X的选项。

启动Avro客户端要么指定–rpcProps,要么指定–host和–port

三.Flume传输过程:

    source监控某个文件或数据流,数据源产生新的数据,拿到该数据后,将数据封装在一个Event中,并put到channel后commit提交,channel队列先进先出,sink去channel队列中拉取数据,然后写入到HDFS中。