1、采集目录到HDFS

采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去
根据需求,首先定义以下3大要素
采集源,即source——监控文件目录 : spooldir
下沉目标,即sink——HDFS文件系统 : hdfs sink
source和sink之间的传递通道——channel,可用file channel 也可以用内存channel

配置文件spooldir-hdfs.conf编写:

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1# Describe/configure the source
##注意:不能往监控目中重复丢同名文件
## 通过spooldir来监控文件内容的变化
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /home/tuzq/software/flumedata
a1.sources.r1.fileHeader = true# Describe the sink
## 表示下沉到hdfs,下面配置的类型不同,type下面的参数就不同
a1.sinks.k1.type = hdfs
#sinks.k1只能连接一个channel,source可以配置多个
a1.sinks.k1.channel = c1
#下面的配置告诉用hdfs去写文件的时候写到什么位置,下面的表示不是写死的,而是动态变化的。表示输出的目录名称是可变的
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/
#表示文件的前缀
a1.sinks.k1.hdfs.filePrefix = events-
#表示到了需要触发的时间时,是否要更新文件夹,true:表示要更新
a1.sinks.k1.hdfs.round = true
##表示每隔1分钟改变一下文件夹
a1.sinks.k1.hdfs.roundValue = 1
##切换文件的时候单位是分钟
a1.sinks.k1.hdfs.roundUnit = minute
##表示只要过了3秒钟,就切换生成一个新的文件
a1.sinks.k1.hdfs.rollInterval = 3
##如果记录的文件大于20字节时切换一次
a1.sinks.k1.hdfs.rollSize = 20
##当写了5个事件时触发
a1.sinks.k1.hdfs.rollCount = 5
##收到了多少条消息往hdfs中追加内容
a1.sinks.k1.hdfs.batchSize = 1
#使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#生成的文件类型,默认是Sequencefile,可用DataStream,则为普通文本
a1.sinks.k1.hdfs.fileType = DataStream# Use a channel which buffers events in memory
##使用内存的方式
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

Channel参数解释:
capacity:默认该通道中最大的可以存储的event数量
trasactionCapacity:每次最大可以从source中拿到或者送到sink中的event数量
keep-alive:event添加到通道中或者移出的允许时间

Flume有HDFS Sink,可以将Source进来的数据写入到hdfs中。HDFS Sink具体的逻辑代码是在HDFSEventSink这个类中。HDFS Sink跟写文件相关的配置如下:hdfs.path -> hdfs目录路径hdfs.filePrefix -> 文件前缀。默认值FlumeDatahdfs.fileSuffix -> 文件后缀hdfs.rollInterval -> 多久时间后close hdfs文件。单位是秒,默认30秒。设置为0的话表示不根据时间close hdfs文件hdfs.rollSize -> 文件大小超过一定值后,close文件。默认值1024,单位是字节。设置为0的话表示不基于文件大小hdfs.rollCount -> 写入了多少个事件后close文件。默认值是10个。设置为0的话表示不基于事件个数hdfs.fileType -> 文件格式, 有3种格式可选择:SequenceFile, DataStream or CompressedStreamhdfs.batchSize -> 批次数,HDFS Sink每次从Channel中拿的事件个数。默认值100hdfs.minBlockReplicas -> HDFS每个块最小的replicas数字,不设置的话会取hadoop中的配置hdfs.maxOpenFiles -> 允许最多打开的文件数,默认是5000。如果超过了这个值,越早的文件会被关闭serializer -> HDFS Sink写文件的时候会进行序列化操作。会调用对应的Serializer借口,可以自定义符合需求的Serializerhdfs.retryInterval -> 关闭HDFS文件失败后重新尝试关闭的延迟数,单位是秒hdfs.callTimeout -> HDFS操作允许的时间,比如hdfs文件的open,write,flush,close操作。单位是毫秒,默认值是10000

执行命令

[root@hadoop1 apache-flume-1.6.0-bin]#cd /home/tuzq/software/apache-flume-1.6.0-bin
[root@hadoop1 apache-flume-1.6.0-bin]#bin/flume-ng agent -c ./conf -f ./agentconf/spool-logger.conf -n a1 -Dflume.root.logger=INFO,console;

接着往/home/tuzq/software/flumedata文件夹中扔文件

[root@hadoop1 flumedata]# pwd
/home/tuzq/software/flumedata
[root@hadoop1 flumedata]# echo 111111111 >> 1.txt
[root@hadoop1 flumedata]# ls
1.txt.COMPLETED  test.log.COMPLETED
[root@hadoop1 flumedata]# echo 22222222 >> 2.txt
[root@hadoop1 flumedata]# echo 33333333 >> 3.txt
[root@hadoop1 flumedata]# echo 44444444 >> 4.txt
[root@hadoop1 flumedata]# ls
1.txt.COMPLETED  2.txt.COMPLETED  3.txt.COMPLETED  4.txt.COMPLETED  test.log.COMPLETED
[root@hadoop1 flumedata]#

扔了之后,现象是
1、/home/tuzq/software/flumedata文件文件夹下的文件倍加了一个一个后缀.COMPLETED,
2、在flume的监控位置,出现类似下图一样的文件:
3、到hdfs上查看文件:

[root@hadoop1 flumedata]# hdfs dfs -ls /
Found 5 items
drwxr-xr-x   - root supergroup          0 2017-06-13 12:01 /40000
drwxr-xr-x   - root supergroup          0 2017-06-13 23:43 /flume
-rw-r--r--   3 root supergroup       3719 2017-06-10 12:11 /kms.sh
drwxrwxrwx   - root supergroup          0 2017-06-10 22:06 /tmp
drwxr-xr-x   - root supergroup          0 2017-06-10 22:27 /user
[root@hadoop1 flumedata]# hdfs dfs -ls /flume
Found 2 items
drwxr-xr-x   - root supergroup          0 2017-06-13 23:43 /flume/events
drwxr-xr-x   - root supergroup          0 2017-06-13 22:01 /flume/tailout
[root@hadoop1 flumedata]# hdfs dfs -ls /flume/events
Found 1 items
drwxr-xr-x   - root supergroup          0 2017-06-13 23:47 /flume/events/17-06-13
[root@hadoop1 flumedata]# hdfs dfs -ls /flume/events/17-06-13
Found 3 items
drwxr-xr-x   - root supergroup          0 2017-06-13 23:43 /flume/events/17-06-13/2343
drwxr-xr-x   - root supergroup          0 2017-06-13 23:46 /flume/events/17-06-13/2346
drwxr-xr-x   - root supergroup          0 2017-06-13 23:47 /flume/events/17-06-13/2347
[root@hadoop1 flumedata]#

综上所述:说明通过flume已经把新增的文件下沉到了hdfs中。

Flume监听文件夹中的文件变化,并把文件下沉到hdfs相关推荐

  1. html设置选择多个文件,选取多个连续文件或文件夹 怎样在文件夹中一次选中多个文件?...

    在Windows资源管理器中,选定多个连续文件的操作为 (A) 按住Shift键,单击每一个要选定的文件名 (B) 按住Alt键,单击每一个ctrl键.一,选定单个文件或文件夹:单击该文件或文件夹.二 ...

  2. python如何遍历文件夹中的所有图片_python实现遍历文件夹图片并重命名

    在做深度学习相关项目时,需要标注图片,筛选过后图片名字带有括号,显得比较乱,因此利用python进行统一规范重命名操作 实现方法是利用python的os模块对文件夹进行遍历(listdir),然后使用 ...

  3. angular的html引入js,在AngularJS中的文件夹中加载JavaScript和CSS文件

    AngularJS不支持你想要的东西,但是你可以看看Grunt或Gulp等构建工具,它们可以让你"构建"你的应用程序.在您的情况下,这些工具可以查找CSS文件并将它们连接成一个文件 ...

  4. 如何批量在文件夹中建立php,怎么批量创建文件夹_一次性创建多个文件夹方法_一聚教程网...

    相信大家在平时的工作或是生活中,经常会遇到需要创建多个文件夹的问题,那么对于这种一次性创建多个文件夹的问题怎么解决呢?这里文章就给大家具体介绍下批量创建多个文件夹的问题,感兴趣的一起来了解下. 日常工 ...

  5. 划分文件夹中的jpg图片和xml文件

    文章目录 一.前言 二.代码 三.结果 一.前言 提示:类似下面这种情况,图片和标签文件混在一起: – 二.代码 import os import shutildef split(src, img, ...

  6. 根据文件夹中的图片数据集生成.txt文件标签

    文章目录 前言 数据集格式 Python实现 注意事项 前言 深度学习中的与图片有关的任务,如图像识别,图像分类,目标检测,图像分割等,在准备图片数据集时,图片的序号和标签往往是由.txt文件获取的. ...

  7. layout文件夹中activity_main.xml与fragment_main.xml文件的处理记录

    androidSDK更新到22.6后新建立项目时在layout文件夹下面出现了activity_main.xml与fragment_main.xml,这是为了在平板开发中使用碎片,但是让不需要碎片的人 ...

  8. debian 文件夹中文件大小_linux查看目录(文件夹)内容大小

    习惯Terminal没有不知道ls命令的(等同于DOS的dir),经常只是需要查看目录的内容大小,但ls -h显示的只是目录的本身大小,而且很多项内容 ls 在这方面的两个诟病出现了: 小诟1. 显示 ...

  9. Ubuntu下如何将文件夹中图片索引写进txt文件中

    方法之一 sudo find dress/ -name *.jpg | cut -d '/' -f2-3 > train_dress.txt "find"后面跟的是当前文件下 ...

  10. python删除文件夹中的jpg_Python简单删除目录下文件以及文件夹的方法

    本文实例讲述了python简单删除目录下文件以及文件夹的方法.分享给大家供大家参考.具体如下: #!/usr/bin/env python import os import shutil fileli ...

最新文章

  1. 手动实现kt(java)同步工作流和异步工作流
  2. 数据科学家 数据工程师_数据科学家实际上赚了多少钱?
  3. 语义分割论文阅读:FCN、PSPNet、DDRNet、BiseNet、BiseNetV2、deeplabv3
  4. 权限管理系统之用户管理
  5. ASP.NET 2.0 数据绑定高级技巧
  6. Oracle Instant Client环境配置
  7. 三调与二调图斑叠加分析,筛选不同地类面积占比,筛选举证图斑
  8. 【算法java版09】:利用java实现对二进制数进行AMI编码
  9. 当你灵感枯竭的时候,如何深挖客户需求?采用曼陀罗思考法(5W1H模式),相信你会找到出路
  10. Scrapy爬虫框架详解
  11. 正儿八经做MIS系统-1
  12. Java源文件命名规则
  13. 多业务线下的代码版本管理控制与研发流程规范
  14. C# 实现对接电信交费易自动缴费
  15. Manifest介绍
  16. java调用批处理文件_有关java调用批处理文件
  17. 人类跌落梦境显示无法连接服务器,人类跌落梦境手游网络连接失败进不去解决办法一览...
  18. 面向汽车企业的PLM知识管理
  19. 黑马程序员---Java 容器集合
  20. nodejs短信验证码,基于云之讯

热门文章

  1. python中的全局变量和局部变量
  2. pandas骚操作:分组对数据进行归一化
  3. MATLAB机器学习系列-11:粒子群优化原理及其matlab实现
  4. 电网调度优化学习笔记:不考虑经济损耗的调度方式(算例代码求解)
  5. ActiveMQ集成Spring
  6. VTK:PolyData 的轮廓用法实战
  7. opengl加载显示3D模型obj类型文件
  8. Boost::context模块fiber的stack测试程序
  9. boost的chrono模块周期计数延迟的测试程序
  10. Boost:align overflow对齐溢出的测试程序