fluem读取文件并写入到hadoop的hdfs

   接上一章,本章介绍使用 crontab 像指定文件定时写入,使用fluem 读取并写入到hadoop的hdfs 前提准备已安装好fluem ,和hadoop(推荐单机即可毕竟做实验)

一、进入终端执行命令查看 crond 服务状态

service crond status

 如下表示服务正常运行,如无服务或服务关闭,需自行安装启动(略)

二 、执行命令 crontab –e  配置定时任务

crontab –e

写入 如下内容(表示每分钟向opt/software/test.log 插入一条数据)

*/1 * * * * /bin/echo "test===================>flume" >> /opt/software/test.log

 

 三、配置fluem agent配置文件 读取/opt/software/test.log 并写出到hdfs

进入job目录下创建file-flume-hdfs.conf

cd /usr/local/flume/job/
mkidr file-flume-hdfs.conf

添加如下内容

# example.conf: 一个单节点的 Flume 实例配置

# 配置Agent a1各个组件的名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 配置Agent a1的source r1的属性
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /opt/software/test.log

# 配置Agent a1的sink k1的属性
a1.sinks.k1.type = hdfs
# 配置hdfs地址加要生成的目录和文件格式,此处按时间生成
a1.sinks.k1.hdfs.path = hdfs://10.0.2.66:9001/flume/%Y%m%d/%H

# 文件前缀
a1.sinks.k1.hdfs.filePrefix = logs-
# 滚动生成
a1.sinks.k1.hdfs.round = true
# 每分钟
a1.sinks.k1.hdfs.roundValue = 1
a1.sinks.k1.hdfs.roundUnit = minute

a1.sinks.k1.hdfs.useLocalTimeStamp = true

a1.sinks.k1.hdfs.batchSize = 100
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.rollInterval = 30
a1.sinks.k1.hdfs.rollSize = 134217700
a1.sinks.k1.hdfs.rollCount = 0
# 配置Agent a1的channel c1的属性,channel是用来缓冲Event数据的
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 把source和sink绑定到channel上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

 四、启动flume agent(要确保hadoop在线并且网络通畅)

bin/flume-ng agent --conf conf/ --conf-file ../job/file-flume-hdfs.conf  --name a1

 执行成功,日志打印如下

 

 进入到flume安装目录的conf下查看flume.log,可以看到已经生成文件

 

五、 访问hadoop的web控制台查看

 

 文件已生成,可下载查看

 

posted @ 2022-01-14 18:28  采采卷耳&不盈倾筐  阅读(101)  评论(0编辑  收藏  举报