Flume收集log到HDFS(雏形)

Flume系列文章:
Flume 概述 & 架构 & 组件介绍
Flume 使用入门 & 入门Demo

在本篇文章中,将继续介绍Flume的使用

Flume的使用场景

监控某个文件,并把新增的内容输出到HDFS(这是离线处理的典型的一个场景)
Agent的技术选型,该如何选择?在这里我们的选择如下:

  • exec source
  • memory channel
  • hdfs sink

Flume收集log到HDFS(雏形)

Agent配置内容解读

a1.sources = r1
a1.sinks = k1.....
a1.channels = c1,c2,c3

# 官网:http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.0/FlumeUserGuide.html#exec-source
# 必填的属性:channels
#            type      必须是exec
#            command   命令,使用 tail -F 监控/home/hadoop/data/data.log  目前data.log是空的
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/data/data.log
a1.sources.r1.channels = c1

# 使用memory channel
a1.channels.c1.type = memory

# 官网:http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.0/FlumeUserGuide.html#hdfs-sink
# 如果我们自己进行设置的话,使用HDFS Sink,我们需要进行配置的内容有:路径、batch、压缩、存储格式
# 必填的属性:channel
#            type        必须是hdfs
#            hdfs.path
# 
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop000:8020/data/flume/tail
a1.sinks.k1.hdfs.batchSize = 10             每个批次放10条数据
a1.sinks.k1.hdfs.fileType = DataStream      文件类型;有SequenceFile(默认设置是这种,SequenceFile的内容我们是看不见的,是没有办法直接读取的),
                                                       DataStream(不能使用压缩,因此不能设置codec)
                                                       CompressedStream(需要去设置codec)
                                                      3种
a1.sinks.k1.hdfs.writeFormat = Text         写数据的格式,有Text,Writable 2种类型

conf文件配置

$FLUME_HOME/conf/exec-memory-hdfs.conf文件编写

a1.sources = r1
a1.sinks = k1
a1.channels = c1

a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/data/data.log
a1.sources.r1.channels = c1

a1.channels.c1.type = memory

a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://192.168.26.131:8020/data/flume/tail
a1.sinks.k1.hdfs.batchSize = 10
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.writeFormat = Text
a1.sinks.k1.channel = c1

运行Flume

启动Flume Agent:

$>flume-ng agent \
  --name a1  \
  --conf $FLUME_HOME/conf \
  --conf-file $FLUME_HOME/conf/exec-memory-hdfs.conf \
  -Dflume.root.logger=INFO,console

$>echo aaa >> data.log
$>echo aaa >> data.log
$>echo aaa >> data.log
$>echo aaa >> data.log
$>echo aaa >> data.log
$>echo aaa >> data.log
$>echo aaa >> data.log
...
不断向/home/hadoop/data/data.log追加内容

启动Agent的那端,所显示的log信息:
Serializer = TEXT, UseRawLocalFileSystem = false
Creating hdfs://192.168.26.131:8020/data/flume/tail/FlumeData.1517894275500.tmp
创建文件,前缀是FlumeData,中间是一个时间戳,后缀是.tmp(因为还在写)
注意:

  • 之所以前缀是FlumeData,是因为hdfs.filePrefix属性的默认值就是FlumeData(参照HDFS Sink的配置文件,官网可以查阅到)
    在生产上,就相当于业务线的名称(结合线下若泽所说的项目来想)

  • 之所后缀是.tmp,是因为hdfs.inUseSuffix属性的默认值是.tmp(参照HDFS Sink的配置文件,官网可以查阅到)

Closing hdfs://192.168.26.131:8020/data/flume/tail/FlumeData.1517894275500.tmp
Renaming hdfs://192.168.26.131:8020/data/flume/tail/FlumeData.1517894275500.tmp to
hdfs://192.168.26.131:8020/data/flume/tail/FlumeData.1517894275500

写完之后,做了一个Rename的操作,将带tmp的文件,给Rename成不带tmp文件了,没有后缀了,标志着真正的写完了

收集到HDFS之后,最终会在HDFS目录/data/flume/tail上所产生了2个文件:

Permission  Owner   Group       Size    Last Modified                   Replication     Block Size  Name
-rw-r--r--  hadoop  supergroup  40 B    Tue Feb 06 13:18:01 +0800 2018  1               128 MB      FlumeData.1517894275500
-rw-r--r--  hadoop  supergroup  16 B    Tue Feb 06 13:18:31 +0800 2018  1               128 MB      FlumeData.1517894275501

潜在的问题:
Block Size都是128MB,而Flume收集过来的文件分别只有40B与16B,这就产生了1个问题:
Flume收集过来的文件过小,这点必然是不行的;同时,这点会造成集群的Block的数量扛不住,对此需要采取相应的措施去规避,这点将在下篇文章中介绍
这里,分享一篇关于Block计算的相关issue:hadoop-1687

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flume 是一种用于数据采集、聚合和移动的工具,它可以将多种来源的数据收集HDFS(Hadoop分布式文件系统)。通过 Flume,用户可以轻松地配置和管理数据流,确保数据的可靠性和一致性。 首先,用户需要在 Flume 的配置文件定义数据源,例如日志文件、网络源或其他存储位置。接着,用户需要定义数据的处理流程,包括数据的过滤、转换和路由策略。然后,用户需要指定目的地为 HDFS,并设置 HDFS 的相关参数,包括数据的写入路径、文件格式和压缩方式等。 当 Flume 启动后,它会按照用户定义的规则和流程,从数据收集数据,并将其经过处理后写入到 HDFS Flume 可以确保数据的高效传输和存储,同时具有容错和重试机制,以保证数据的可靠性和完整性。 在数据采集到 HDFS 后,用户可以通过 Hadoop 生态系统的其他工具和框架,如 MapReduce、Spark 等进行数据处理和分析。同时,用户也可以通过 HDFS 提供的 API 和命令行工具,对数据进行管理和检索,以满足各种业务需求和分析任务。 总之,通过 Flume数据采集到 HDFS ,用户可以实现大规模数据收集存储和分析,为企业决策和业务运营提供基础支持。同时,Flume 也为数据工程师和分析师提供了一个灵活、高效的数据采集和处理工具,助力他们更好地利用数据来推动业务发展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值