实践:Flume同步信息到HDFS

实践:Flume同步信息到HDFS

环境介绍

  本次实战基于cdh5.8.5,flume 1.8。

实战背景

  应用程序通过log4j记录日志信息(用户ip,访问url,请求方式,状态码信息,时间戳),记录到服务器上(地址:/data/flume/log)。通过flume组件将不断更新的日志信息传递给hdfs做离线处理,kafka做实时处理。
  当然我们本次先演示flume-hdfs的过程。

架构图

在这里插入图片描述

配置

flume-agent配置

# 组装agent
a1.channels = ch_1
a1.sources = src_1
a1.sinks = sink_1

# 配置 source:从目录中读取文件
a1.sources.src_1.type = spooldir
a1.sources.src_1.channels = ch_1
a1.sources.src_1.spoolDir = /data/flume/log
a1.sources.src_1.includePattern=^.*$
a1.sources.src_1.ignorePattern=^.*log$
a1.sources.src_1.deletePolicy= never
a1.sources.src_1.fileHeader = true
## 增加时间header
a1.sources.src_1.interceptors = i1
a1.sources.src_1.interceptors.i1.type = timestamp

# 配置 channel:缓存到文件中
a1.channels.ch_1.type = memory
a1.channels.ch_1.capacity = 10000
a1.channels.ch_1.transactionCapacity = 10000

# 配置 sink:保存到hdfs中
a1.sinks.sink_1.channel = ch_1
a1.sinks.sink_1.type = hdfs
a1.sinks.sink_1.hdfs.path = hdfs://master:8020/user/jeremy/flume/accesslog/%Y-%m-%d
a1.sinks.sink_1.hdfs.filePrefix = logs
a1.sinks.sink_1.hdfs.rollInterval = 10
a1.sinks.sink_1.hdfs.rollSize = 0
a1.sinks.sink_1.hdfs.rollCount = 0
a1.sinks.sink_1.hdfs.batchSize = 100
a1.sinks.sink_1.hdfs.writeFormat = Text
a1.sinks.sink_1.hdfs.minBlockReplicas = 1

遇到问题

执行

flume-ng agent -n a1 -c ./ -f ./flume-conf-hdfs.properties -Dflume.root.logger=DEBUG,console

报错:
在这里插入图片描述  哎,问题很明显了——权限问题。这个在cdh集群中已经遇到过很多次了。究其原因,就是cdh为每个组件都单独创建了用户。
  当然我们可以将hdfs上的文件所属用户都改成root,但既然cdh这样做了,想必还是基于安全方面的考量吧。所以改用hdfs用户接着执行刚才的命令。

sudo -u hdfs flume-ng agent -n a1 -c ./ -f ./flume-conf-hdfs.properties -Dflume.root.logger=DEBUG,console

报错:
在这里插入图片描述  哈哈,原来是因为使用hdfs用户时,source读取文件的时候又报了权限错误,将.flumespool的用户更改为hdfs。
在这里插入图片描述重新执行

sudo -u hdfs flume-ng agent -n a1 -c ./ -f ./flume-conf-hdfs.properties -Dflume.root.logger=DEBUG,console

成功执行:
在这里插入图片描述再看一下我们的日志文件,都变成了.COMPLETED结尾。没有传输前都是以日期结尾的。
在这里插入图片描述最后,切换到NameNode的文件管理界面,发现文件已经被成功传递到了hdfs上。
在这里插入图片描述通过命令行查看一下hdfs块中的内容信息:
在这里插入图片描述

结束语

关于Flume、HDFS更多的介绍,欢迎浏览我的另两篇博文:
Flume 海量日志收集利器
https://blog.csdn.net/JeremyJiaming/article/details/88068609

HDFS 分布式存储基石
https://blog.csdn.net/JeremyJiaming/article/details/87991195

猜你喜欢

转载自blog.csdn.net/JeremyJiaming/article/details/88312656