Flume探索笔记

Apache Flume是一个用于高效收集、聚合和移动大量日志数据的系统。本文详细介绍了Flume的Event、Agent、Source、Channel和Sink概念,并提供了配置文件的例子,包括NetCat、Avro、Exec和Spooling Directory Source,以及HDFS和Hive Sink的配置。Flume Channel包括Memory、File和Kafka Channel。最后,文章提到了启动Flume Agent的步骤及需要注意的事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.flume模型

1.1 Event

flume 事件,被定义为一个具有有效荷载的字节数据流和可选的字符串属性集。

1.2 Agent

flume 代理,是一个进程承载从外部源事件流到下一个目的地的过程。包含source channel 和 sink。

1.3 Source

数据源,消耗外部传递给他的事件,外部源将数据按照flume Source 能识别的格式将Flume 事件发送给flume Source。

1.4 Channel

数据通道,是一个被动的存储,用来保持事件,直到由一个flume Sink消耗。

1.5 Sink

数据汇聚点,代表外部数据存放位置。发送flume event到指定的外部目标。

2.flume 配置文件

2.1 配置文件例子如下
# example.conf 单节点flume配置
# 命名Agent a1的组件 (这是一个给组件起名的过程)
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 描述/配置source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = 文件路径和数据源名称
a1.sources.r1.fileHeader = true

#描述sink 设置kafka接收器 也就是接受到哪里去
a1.sinks.s1.type=hive
a1.sinks.s1.hive.metastore=thrift://服务器ip:端口
a1.sinks.s1.hive.database=hive数据库名称
a1.sinks.s1.hive.table=hive表名
a1.sinks.s1.batchSize=3000
a1.sinks.s1.serializer=JSON
a1.sinks.s1.serializer.fieldnames=business_id,type,create_time

#描述channels 设置接收器 用什么传递,这里可以默认用内存,也可以配合用kafka 还很多方式,可以多选一

#kafka
a1.channels.c1.type=org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers=地址ip:kafka端口
a1.channels.c1.kafka.topic=设置topic
a1.channels.c1.kafka.consumer.group.id=1

#内存
#a1.channels.c1.type=memory
#a1.channels.c1.capacity=10000
#a1.channels.c1.transactionCapacity=10000

说明:

1.source主要有四种: NetCat 、Avro 、Exec 、 Spooling Directory
1.1.NetCat Source : 绑定端口(Tcp、Udp),将流经端口的每个文本行数据作为Event输入
  • type:类型,必须是netcat
  • bind:要监听的(本机的)主机名或者ip。此监听不是过滤发送方。一台电脑不是说只有一个IP。有多网卡的电脑,对应多个IP
  • port:绑定的本地端口
    #####1.2.Avro Source:监听一个Avro服务端口。采集Avro数据序列化后的数据
  • type:类型,必须是avro。
  • bind:要监听的(本机的)主机名或者ip。此监听不是过滤发送方。一台电脑不是说只有一个IP。有多网卡的电脑,对应多个IP。
  • port:绑定的本地的端口。
    #####1.3.Exec Source: 于Unix的command在标准输出上采集数据
  • type:source的类型:必须是exec。
  • command:要执行命令。
    #####1.4.Spooling Directory Source :监听一个文件夹里的文件新增,如果有则采集作为source
  • type:类型:必须是spooldir
  • spoolDir:监听的文件夹 【提前创建目录】
  • fileSuffix:上传完毕后文件的重命名后缀,默认为.COMPLETED
  • deletePolicy:上传后的文件的删除策略never和immediate,默认为never。
  • fileHeader:是否要加上该文件的绝对路径在header里,默认是false。
  • basenameHeader:是否要加上该文件的名称在header里,默认是false。
2.sink主要记录两个 HDFS 和 Hive
2.1 HDFS Sink : 将数据传输到hdfs集群
  • type : sink的类型。必须写hdfs
  • hdfs.path : hdfs的上传路径
  • hdfs.filePrefix:hdfs文件的前缀。默认是:FlumeData
  • hdfs.rollInterval:间隔多久产生新文件,默认是:30(秒) 0表示不以时间间隔为准。
  • hdfs.rollSize:文件到达多大再产生一个新文件,默认是:1024(bytes)0表示不以文件大小为准。
  • hdfs.rollCount:event达到多大再产生一个新文件,默认是:10(个)0表示不以event数目为准。
  • hdfs.batchSize:每次往hdfs里提交多少个event,默认为100
  • hdfs.fileType:hdfs文件的格式主要包括:SequenceFile, DataStream ,CompressedStream,如果使用了CompressedStream就要设置压缩方式。
  • hdfs.codeC:压缩方式:gzip, bzip2, lzo, lzop, snappy
    注:%{host}可以使用header的key。以及%Y%m%d来表示时间,但关于时间的表示需要在header里有timestamp这个key。
2.2 Hive Sink : 将数据直接整hive里去
  • type : 类型,必须写hive
  • hive.metastore:元数据存储位置
  • hive.database:数据库名称
  • hive.table:表名
  • batchSize:再将文件刷新到HDFS之前写入文件的事件数
  • serializer :序列化格式
  • mserializer.fieldnames:可以理解为列名,以逗号隔开即可
3.channel :通道 主要写三种Memory、File、KafkaChannel
3.1 Memory Channel
  • type :类型 必须是memory
  • capacity : channel中最大event的数
  • transactionCapacity:channel中允许事务的最大event数目
3.2 File Channel
  • Type channel的类型:必须为 file
  • checkpointDir:检查点的数据存储目录【提前创建目录】
  • dataDirs:数据的存储目录【提前创建目录】
  • transactionCapacity:channel中允许事务的最大event数目
3.3 Kafka Channel
  • type:org.apache.flume.channel.kafka.KafkaChannel
  • 组件名.channels.c1.kafka.bootstrap.servers=服务器ip:kafka端口(默认9092)
  • 组件名.channels.c1.kafka.topic=定义主题
  • 组件名.channels.c1.kafka.consumer.group.id=id号

文件配置好之后就要准备使用flume传日志内容到hive去了

3.执行启动

bin目录下执行
./flume-ng agent 指令 这里简单说一下参数和选项
命令:

参数描述
help打印帮助信息
agent运行一个Flume Agent
avro-client运行一个Avro Flume 客户端
version显示Flume版本

全局选项:

参数描述
–conf-file,-f 指定配置文件,这个配置文件必须在全局选项的–conf参数定义的目录下。(必填)
–name,-n Agent的名称(必填)
–help,-h帮助

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-ng agent --conf …/conf/ --conf-file …/conf/xcx_dir_hive.conf --name xcx -Dflume.root.logger=INFO,console &
首先是客户端,启动一个agent, 然后–conf选择配置文件的路径, --conf-file选择具体的配置文件。 --name是必要的!要给Agent起名! 最后在控制台输出~

#已经踩过的坑!!!注意事项

  • 1.首先,flume是一直执行的,如果想要执行启动同名的Agent,请先kill掉之前的flume进程,同时,Spooling Directory Source源的情况下,源文件会被修改后缀,一定要在关闭flume之后去修改名字。否则会报错。
  • 2.如果hive中没有数据库,同时没有表,那么执行Agent将会帮我们创建数据库和表,但是!如果我们已经有数据库了,flume是不会帮我们创建表的,还会持续不断的报错!!!非常烦人!有的同学们表示,删除数据库之后再次执行还是会报错,是因为我们要通过dfs去删除相关hive库的信息。
  • 3.手动建表的话,需要明确一点!可以采用直接建表法,但是一定要加上事务!否则会报错
    例如: create table 表名(user_id int,user_name string) clustered by (user_id) into 2 buckets stored as orc tblproperties(‘transactional’=‘true’);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值