• flume 增量上传日志文件到HDFS中


    1.采集日志文件时一个很常见的现象 采集需求:比如业务系统使用log4j生成日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs中。 1.1.根据需求,首先定义一下3大要素: 采集源,即source—监控日志文件内容更新:exec ‘tail -F file’ 下沉目标,即sink—HDFS文件系统:hdfs sink Source和sink之间

    1.采集日志文件时一个很常见的现象

    采集需求:比如业务系统使用log4j生成日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs中。
    

    1.1.根据需求,首先定义一下3大要素:

    采集源,即source—监控日志文件内容更新:exec ‘tail -F file’ 
    下沉目标,即sink—HDFS文件系统:hdfs sink 
    Source和sink之间的传递通道—-channel,可用file channel也可以用 内存channel。

    1.2.进入/home/tuzq/software/apache-flume-1.6.0-bin/agentconf,编写配置文件tail-hdfs.conf,文件内容如下:

    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    
    # Describe/configure the source
    ## exec表示flume回去调用给的命令,然后从给的命令的结果中去拿数据
    a1.sources.r1.type = exec
    ## 使用tail这个命令来读数据
    a1.sources.r1.command = tail -F /home/tuzq/software/flumedata/test.log
    a1.sources.r1.channels = c1
    
    # Describe the sink
    ## 表示下沉到hdfs,类型决定了下面的参数
    a1.sinks.k1.type = hdfs
    ## sinks.k1只能连接一个channel,source可以配置多个
    a1.sinks.k1.channel = c1
    ## 下面的配置告诉用hdfs去写文件的时候写到什么位置,下面的表示不是写死的,而是可以动态的变化的。表示输出的目录名称是可变的
    a1.sinks.k1.hdfs.path = /flume/tailout/%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
    ## 收到了多少条消息往dfs中追加内容
    a1.sinks.k1.hdfs.batchSize = 10
    ## 使用本地时间戳
    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

    1.3.编写完成之后,启动flume,执行的命令是:

    [root@hadoop1 flumedata]#cd /home/tuzq/software/apache-flume-1.6.0-bin/agentconf
    [root@hadoop1 flumedata]#bin/flume-ng agent -c conf -f agentconf/tail-hdfs.conf -n a1

    1.4.通过写一个死循环往test.log中写数据的方式模式日志文件增长

    编写shell脚本,模拟日志增长变化。

    [root@hadoop1 flumedata]# cd /home/tuzq/software/flumedata
    [root@hadoop1 flumedata]# while true
    >do
    > date >> test.log
    > sleep 2
    > done

    查看日志变化

    [root@hadoop1 ~]# cd /home/tuzq/software/flumedata/
    [root@hadoop1 flumedata]# ls
    access.log  error.log  test.log
    [root@hadoop1 flumedata]# tail -f test.log 
    2017年 06月 13日 星期二 22:02:22 CST
    2017年 06月 13日 星期二 22:02:24 CST
    2017年 06月 13日 星期二 22:02:26 CST
    2017年 06月 13日 星期二 22:02:28 CST
    2017年 06月 13日 星期二 22:02:30 CST
    2017年 06月 13日 星期二 22:02:32 CST

    通过上面的文件,可以看到test.log在不停的追加数据。

    到hdfs中进行查看,效果如下:

    [root@hadoop1 ~]# 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 22:01 /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 ~]# hdfs dfs -ls /flume
    Found 1 items
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:01 /flume/tailout
    [root@hadoop1 ~]# hdfs dfs -ls /flume/tailout
    Found 1 items
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:03 /flume/tailout/17-06-13
    [root@hadoop1 ~]# hdfs dfs -ls /flume/tailout/17-06-13
    Found 4 items
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:01 /flume/tailout/17-06-13/2201
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:03 /flume/tailout/17-06-13/2202
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:04 /flume/tailout/17-06-13/2203
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:04 /flume/tailout/17-06-13/2204
    [root@hadoop1 ~]# hdfs dfs -ls /flume/tailout/17-06-13
    Found 5 items
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:01 /flume/tailout/17-06-13/2201
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:03 /flume/tailout/17-06-13/2202
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:04 /flume/tailout/17-06-13/2203
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:05 /flume/tailout/17-06-13/2204
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:05 /flume/tailout/17-06-13/2205
    [root@hadoop1 /]# hdfs dfs -ls /flume/tailout/17-06-13
    Found 6 items
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:01 /flume/tailout/17-06-13/2201
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:03 /flume/tailout/17-06-13/2202
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:04 /flume/tailout/17-06-13/2203
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:05 /flume/tailout/17-06-13/2204
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:06 /flume/tailout/17-06-13/2205
    drwxr-xr-x   - root supergroup          0 2017-06-13 22:06 /flume/tailout/17-06-13/2206
    [root@hadoop1 /]

    通过上面的案例可以知道,增加的日志文件已经被写入到HDFS中。

  • 相关阅读:
    根据访问属性进行差异化数据加载
    前人挖坑,后人填坑
    也让盲人拥抱互联网
    谈谈D2
    Android数据库大批量数据插入优化
    framework中编译anroid工程并在模拟器上运行
    简单JNI使用demo
    解决javah生成c头文件时找不到android类库的问题
    JNI的native代码中打印日志到eclipse的logcat中
    Android.mk简介<转>
  • 原文地址:https://www.cnblogs.com/zxf330301/p/8317371.html
Copyright © 2020-2023  润新知