文章目录
- 1. 需求
- 2. 配置
- 2.1 Source
- 2.2 Channel
- 2.3 Sink
- 2.4 完整的配置代码
- 3. 实践
1. 需求
使用Flume从文件夹中采集数据并上传到HDFS中。要完成这个任务就需要使用在采集数据时使用Spooling Directory Source组件;传输数据时为了保证数据没有丢失风险,使用File Channel组件;输出数据时使用HDFS Sink。
2. 配置
Flume各个组件的参数很多,因此通常复制官网的各组件样例程序并参照参数表进行修改。
2.1 Source
Source组件使用Spooling Directory Source,本次实践需要指定两个参数,分别是:
- type参数指定组件类型;
- spoolDir参数指定要采集数据的源文件夹。
根据需求编写的Source配置如下:
a1.sources.r1.type = spooldir a1.sources.r1.spoolDir = /data/log/studentDir
2.2 Channel
Channel组件使用File Channel,本次实践需要指定三个参数,分别是:
- type参数指定组件类型;
- checkpointDir参数指定存放检查点文件的目录;
- dataDirs 表示存放数据的目录。
根据需求编写的Channel配置如下:
a1.channels.c1.type = file a1.channels.c1.checkpointDir = /data/soft/apache-flume-1.9.0-bin/data/studentDir/checkpoint a1.channels.c1.dataDirs = /data/soft/apache-flume-1.9.0-bin/data/studentDir/data
2.3 Sink
Sink组件使用HDFS Sink,本次实践需要指定八个参数,分别是:
- type参数指定组件类型;
- path参数指定最终数据要上传到的HDFS目录地址;
- filePrefix参数指定存放数据的文件前缀;
- fileType参数指定存放文件的类型,共有三种:SequenceFile、DataStream和CompressedStream,其中SequenceFile在Hadoop的MapReduce任务解决小文件问题时使用过;
- writeFormat参数指定写文件的格式,有两种:Text和Writable(默认),如果后期想使用Hive或者Impala操作这份数据的话,必须在生成数据之前设置为Text,Text表示是普通文本数据;
- rollInterval参数指定Sink间隔多长将临时文件滚动成最终目标文件,以秒为单位,默认值为30s。如果设置成0,则表示不根据时间来滚动文件(滚动roll指的是,Sink将临时文件重命名成最终目标文件,并新打开一个临时文件来写入数据);
- rollSize参数指定当临时文件达到多大时(单位:bytes),滚动成目标文件,默认值为1024。如果设置成0,则表示不根据临时文件大小来滚动文件;
- rollCount参数指定当events数据达到该数量时候,将临时文件滚动成目标文件,默认值为10。如果设置成0,则表示不根据events数据来滚动文件。
根据需求编写的Sink配置如下:
a1.sinks.k1.type = hdfs a1.sinks.k1.hdfs.path = hdfs://bigData01:9000/flume/studentDir a1.sinks.k1.hdfs.filePrefix = stu- a1.sinks.k1.hdfs.fileType = DataStream a1.sinks.k1.hdfs.writeFormat = Text a1.sinks.k1.hdfs.rollInterval = 3600 a1.sinks.k1.hdfs.rollSize = 134217728 a1.sinks.k1.hdfs.rollCount = 0
2.4 完整的配置代码
将上述三个组件的配置完成后,再将其连接起来(设置Source后接的Channel和Sink前接的Channel),完整代码如下:
# Name the components on this agent a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe/configure the source a1.sources.r1.type = spooldir a1.sources.r1.spoolDir = /data/log/studentDir # Describe the sink a1.channels.c1.type = file a1.channels.c1.checkpointDir = /data/soft/apache-flume-1.9.0-bin/data/studentDir/checkpoint a1.channels.c1.dataDirs = /data/soft/apache-flume-1.9.0-bin/data/studentDir/data # Use a channel a1.sinks.k1.type = hdfs a1.sinks.k1.hdfs.path = hdfs://bigData01:9000/flume/studentDir a1.sinks.k1.hdfs.filePrefix = stu- a1.sinks.k1.hdfs.fileType = DataStream a1.sinks.k1.hdfs.writeFormat = Text a1.sinks.k1.hdfs.rollInterval = 3600 a1.sinks.k1.hdfs.rollSize = 134217728 a1.sinks.k1.hdfs.rollCount = 0 # Bind the source and sink to the channel a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1
3. 实践
在运行Flume之前应该先检查建立采集数据的文件夹和文件,且系统此时直接启动会报错提示找不到SequenceFile,虽然我们已经把fileType改为了DataStream,但是Flume默认还是会加载这个类。这个问题的解决思路有两种:
- 第一种解决思路:把SequenceFile相关的jar包都拷贝到Flume的lib目录下。但后续还会报错缺少HDFS相关的jar包,再拷贝对应的jar包即可。
- 第二种解决思路:把这个节点设置为Hadoop集群的一个客户端节点,即在这个节点上配置Hadoop的框架。
解决了这个问题后,在a1.sinks.k1.hdfs.path路径的机器上开启Hadoop服务框架,即可启动Flume服务采集信息并上传,运行过程如下:
- 运行Flume
bin/flume-ng agent --name a1 --conf conf --conf-file conf/file2hdfs.conf -Dflume.root.logger=INFO,console
- 检查HDFS的上传结果
可以看到文件后有一个.tmp的后缀,是因为当前该文件并未达到配置中设置的滚动的要求,后续的数据依旧要写入到该文件。若要去掉这个后缀那根据配置需要等待1h或者等文件达到128M,除去配置的条件外,我们也可以强制关闭这个Agent来达到目的。但需要注意一点,当我们再重启Agent后,并不会给这个文件再给加上.tmp后缀,每次停止之前都会把所有的文件解除占用状态,下次启动的时候如果有新数据,则会产生新的文件,这其实仅仅模拟了自动切文件的效果。
[root@bigData01 soft]# hdfs dfs -ls /flume/studentDir Found 1 items -rw-r--r-- 1 root supergroup 65 2023-02-03 06:23 /flume/studentDir/stu-.1675376620835.tmp [root@bigData01 soft]# hdfs dfs -cat /flume/studentDir/* jack 18 male jessic 20 female tom 17 male
- 检查数据源文件
为了防止重复读取同一个文件,Flume会在读取过的文件加上COMPLETED后缀,再不关闭Flume的前提下再加入一个class2.dat文件,会发现该文件立即读取并写入HDFS文件中。
[root@bigData02 studentDir]# ll total 4 -rw-r--r--. 1 root root 65 Feb 3 05:31 class1.dat.COMPLETED [root@bigData02 studentDir]# vi class2.dat [root@bigData02 studentDir]# ll total 8 -rw-r--r--. 1 root root 65 Feb 3 05:31 class1.dat.COMPLETED -rw-r--r--. 1 root root 15 Feb 3 06:26 class2.dat.COMPLETED ------------------------------------------------------------------- [root@bigData01 soft]# hdfs dfs -cat /flume/studentDir/* jack 18 male jessic 20 female tom 17 male Chaoql 23 male
- 检查数据源文件
- 检查HDFS的上传结果
- 运行Flume
猜你喜欢
- 11小时前【论文阅读】One For All: Toward Training One Graph Model for All Classification Tasks
- 11小时前清华大学操作系统rCore实验-第零章-Lab环境搭建
- 11小时前[Halcon&3D] 3D手眼标定理论与示例解析
- 8小时前柠檬英语(柠檬英语复数怎么读)
- 6小时前自然景观资料(自然景观资源有哪些)
- 3小时前金盾服装(金盾服装的标志是什么)
- 2小时前沈阳辉山乳业(沈阳辉山乳业是国企吗)
- 2小时前奋笔勤书还是奋笔疾书(奋笔疾书还是奋书疾笔)
- 1小时前patrol尼桑(patrol尼桑途乐价格)
- 44分钟前gt是啥意思(gt属于什么车)
网友评论
- 搜索
- 最新文章
- 热门文章