Flume+HDFS实战及遇到的坑

本文介绍了如何使用Flume的HDFS Sink将日志实时写入HDFS,包括配置参数详解、实战过程以及遇到的Channel溢出错误和小文件过多的问题。通过调整rollSize、rollCount和rollInterval参数,解决了文件创建过频繁的问题,强调了配置参数之间的配合使用关键。
摘要由CSDN通过智能技术生成

Flume Source组件实战—Avro、Spool、Exec(详细图文)》一文中,我们介绍了集中不同的Source 组件的使用方式,Source监控取到的数据大多数都是通过LoggerSink输出Cli端界面上,并没有将这些数据真正下沉落地,那么这里LoggerSink记录INFO级别的日志,一般多数用来进行系统调试。在本文中,我们将着重介绍在生产环境中常用的sink组件:HDFS Sink

Flume Sink的目的是从Flume Channel中获取数据然后输出到存储或者其他Flume Source中。Flume Agent启动的时候,它会为每一个Sink都启动一个SinkRunner的对象,SinkRunner.start()方法会启动一个新的线程去管理每一个Sink的生命周期。每一个Sink需要实现start()、Stop()和process()方法。本文只是例举几个Sink而已,Flume本身含有丰富的Source 和Sink组件,并且支持随意组合,只要你按照配置的规则来生产数据、传输数据即可,使用非常方便。

HDFS Sink 实战

在本节我们要实现Flume实时监测日志文件,并将新增的日志数据写入到HDFS文件中

读其名可知,HDFS Sink就是Sink将从Channel中get到的时间写入到Hadoop分布式文件系统HDFS,从而完成日志文件的持久化操作。目前Flume支持创建文本文件和序列化文件,这些文件可以按照指定的时间或数据量或事件的数量为基础进行存放,HDFS的目录路径可以包含将要由HDFS替换格式的转移序列用以生成存储事件的目录/文件名。agent从WebServer拿到数据之后再存放到HDFS,整个过程如下图所示:

1、添加配置文件内容  cd /usr/flume/conf  在conf目录下,将我们之前写的exec.conf直接copy过来进行修改即可,cp exec.conf exec_hdfs_sink.conf,增加以下内容:

#example.conf: A single-node flume configuration
#use hdfsSink 

#Name the components on this agent
a1.sources = r1
a1.sinks &
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个使用Flume实现HTTP方式采集数据,并将数据存储到HDFS中的方案: 1. 配置Flume Agent 在Flume的conf目录中,新建一个配置文件flume.conf,并添加以下内容: ``` # Name the components on this agent agent.sources = http-source agent.channels = memory-channel agent.sinks = hdfs-sink # Define the source agent.sources.http-source.type = http agent.sources.http-source.port = 8080 # Define the channel agent.channels.memory-channel.type = memory agent.channels.memory-channel.capacity = 10000 agent.channels.memory-channel.transactionCapacity = 1000 # Define the sink agent.sinks.hdfs-sink.type = hdfs agent.sinks.hdfs-sink.hdfs.path = /user/hadoop/flume agent.sinks.hdfs-sink.hdfs.filePrefix = events- agent.sinks.hdfs-sink.hdfs.fileSuffix = .log agent.sinks.hdfs-sink.hdfs.rollInterval = 3600 agent.sinks.hdfs-sink.hdfs.rollSize = 0 agent.sinks.hdfs-sink.hdfs.rollCount = 100 agent.sinks.hdfs-sink.hdfs.writeFormat = Text agent.sinks.hdfs-sink.hdfs.batchSize = 1000 agent.sinks.hdfs-sink.hdfs.useLocalTimeStamp = true agent.sinks.hdfs-sink.hdfs.fileType = DataStream agent.sinks.hdfs-sink.hdfs.writeOnClose = true # Bind the source and sink to the channel agent.sources.http-source.channels = memory-channel agent.sinks.hdfs-sink.channel = memory-channel ``` 上述配置中,我们使用了HTTP Source来接收数据,将数据存储到Memory Channel中,并使用HDFS Sink将数据存储到HDFS中。 2. 启动Flume Agent 在Flume的bin目录中,执行以下命令启动Flume Agent: ``` ./flume-ng agent --conf-file ../conf/flume.conf --name agent -Dflume.root.logger=INFO,console ``` 3. 发送数据 在终端中,使用curl命令向Flume Agent发送POST请求,发送数据: ``` curl -X POST -H "Content-Type:application/json" -d '{"name":"John", "age":30}' http://localhost:8080/ ``` 4. 查看结果 在HDFS中,可以看到Flume Agent已经将数据存储到了指定的路径中。 通过以上方案,我们可以轻松地使用Flume实现HTTP方式的数据采集,并将数据存储到HDFS中进行处理和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值