头歌Flume 第2关 采集目录下所有新文件到Hdfs

# 配置source,channel,sink名称

a1.sources = source1

a1.sinks = sink1

a1.channels = channel1




# 配置source

a1.sources.source1.type = spooldir

a1.sources.source1.spoolDir = /opt/flume/data

##定义文件上传完后的后缀,默认是.COMPLETED

a1.sources.source1.fileSuffix=.FINISHED

##默认是2048,如果文件行数据量超过2048字节(1k),会被截断,导致数据丢失

a1.sources.source1.deserializer.maxLineLength=5120




# 配置 channel

a1.channels.channel1.type = memory

## event条数

a1.channels.channel1.capacity = 500000

##flume事务控制所需要的缓存容量600条event

a1.channels.channel1.transactionCapacity = 600



# 配置 sink

a1.sinks.sink1.type = hdfs

a1.sinks.sink1.hdfs.path =hdfs://localhost:9000/flume

#上传文件的前缀

a1.sinks.sink1.hdfs.filePrefix = flume

#上传文件的后缀

a1.sinks.sink1.hdfs.fileSuffix = .log

#积攒多少个Event才flush到HDFS一次

a1.sinks.sink1.hd
采集目录下所有文件HDFS有多种方法,下面分别介绍使用shell脚本和Flume的实现方式。 ### 使用shell脚本 可以通过shell脚本自动采集文件HDFS。以下是一个示例脚本,它会设置文件上传路径并将日志文件上传到HDFS: ```bash # 设置日期 date1=`date +%Y_%m_%d` echo "date1:$date1" # 日志文件上传到hdfs的根路径 hdfs_root_dir=/data/clickLog/$date1/ # 打印环境变量信息 echo "envs: hadoop_home:$HADOOP_HOME" # 读取日志文件目录,判断是否有需要上传的文件 echo "log_src_dir:"$log_src_dir ``` 在这个脚本中,首先获取当前日期并将其作为路径的一部分,然后设置HDFS的根路径,最后可以根据`log_src_dir`目录中的文件情况进行上传操作。不过,该脚本还需要进一步完善上传逻辑,比如使用`hdfs dfs -put`命令将文件上传到HDFS [^1]。 ### 使用Flume Flume是一个分布式、可靠、可用的系统,可用于高效地采集、聚合和移动大量日志数据。以下是使用Flume采集目录中的文件HDFS的配置示例: ```properties # 配置sink组件 ag1.sinks.sink1.type = hdfs ag1.sinks.sink1.hdfs.path = hdfs://hdp-01:9000/access_log/%y-%m-%d/%H-%M ## 放置文件目录 ag1.sinks.sink1.hdfs.filePrefix = app_log ## 放置文件的前缀 ag1.sinks.sink1.hdfs.fileSuffix = .log ## 放置文件的后缀 ag1.sinks.sink1.hdfs.batchSize = 100 ## 按100条数据写入一次 ag1.sinks.sink1.hdfs.fileType = DataStream ## 写入的文件和读取的文件类型保持一致 ag1.sinks.sink1.hdfs.writeFormat = Text ## 写入的时候对应fileType ``` 上述配置中,定义了一个名为`sink1`的HDFS sink,指定了文件的存储路径、前缀、后缀等信息。同时,还需要配置source和channel。以下是完整的配置示例: ```properties # Name the components on this agent ag1.sources = source1 ag1.sinks = sink1 ag1.channels = channel1 # Describe/configure the source ag1.sources.source1.type = spooldir ag1.sources.source1.spoolDir = /path/to/your/directory # Describe the sink ag1.sinks.sink1.type = hdfs ag1.sinks.sink1.hdfs.path = hdfs://hdp-01:9000/access_log/%y-%m-%d/%H-%M ag1.sinks.sink1.hdfs.filePrefix = app_log ag1.sinks.sink1.hdfs.fileSuffix = .log ag1.sinks.sink1.hdfs.batchSize = 100 ag1.sinks.sink1.hdfs.fileType = DataStream ag1.sinks.sink1.hdfs.writeFormat = Text # Use a channel which buffers events in memory ag1.channels.channel1.type = memory ag1.channels.channel1.capacity = 1000 ag1.channels.channel1.transactionCapacity = 100 # Bind the source and sink to the channel ag1.sources.source1.channels = channel1 ag1.sinks.sink1.channel = channel1 ``` 配置完成后,启动Flume: ```bash bin/flume-ng agent -c ./conf -f ./conf/spooldir.conf -n a1 -Dflume.root.logger=INFO ``` 之后将文件上传到指定目录Flume就会自动将文件采集HDFS [^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M_inherit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值