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

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

  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,文件内容如下:

  1. # Name the components on this agent
  2. a1.sources = r1
  3. a1.sinks = k1
  4. a1.channels = c1
  5. # Describe/configure the source
  6. ## exec表示flume回去调用给的命令,然后从给的命令的结果中去拿数据
  7. a1.sources.r1.type = exec
  8. ## 使用tail这个命令来读数据
  9. a1.sources.r1.command = tail -F /home/tuzq/software/flumedata/test.log
  10. a1.sources.r1.channels = c1
  11. # Describe the sink
  12. ## 表示下沉到hdfs,类型决定了下面的参数
  13. a1.sinks.k1.type = hdfs
  14. ## sinks.k1只能连接一个channel,source可以配置多个
  15. a1.sinks.k1.channel = c1
  16. ## 下面的配置告诉用hdfs去写文件的时候写到什么位置,下面的表示不是写死的,而是可以动态的变化的。表示输出的目录名称是可变的
  17. a1.sinks.k1.hdfs.path = /flume/tailout/%y-%m-%d/%H%M/
  18. ##表示最后的文件的前缀
  19. a1.sinks.k1.hdfs.filePrefix = events-
  20. ## 表示到了需要触发的时间时,是否要更新文件夹,true:表示要
  21. a1.sinks.k1.hdfs.round = true
  22. ## 表示每隔1分钟改变一次
  23. a1.sinks.k1.hdfs.roundValue = 1
  24. ## 切换文件的时候的时间单位是分钟
  25. a1.sinks.k1.hdfs.roundUnit = minute
  26. ## 表示只要过了3秒钟,就切换生成一个新的文件
  27. a1.sinks.k1.hdfs.rollInterval = 3
  28. ## 如果记录的文件大于20字节时切换一次
  29. a1.sinks.k1.hdfs.rollSize = 20
  30. ## 当写了5个事件时触发
  31. a1.sinks.k1.hdfs.rollCount = 5
  32. ## 收到了多少条消息往dfs中追加内容
  33. a1.sinks.k1.hdfs.batchSize = 10
  34. ## 使用本地时间戳
  35. a1.sinks.k1.hdfs.useLocalTimeStamp = true
  36. #生成的文件类型,默认是Sequencefile,可用DataStream:为普通文本
  37. a1.sinks.k1.hdfs.fileType = DataStream
  38. # Use a channel which buffers events in memory
  39. ##使用内存的方式
  40. a1.channels.c1.type = memory
  41. a1.channels.c1.capacity = 1000
  42. a1.channels.c1.transactionCapacity = 100
  43. # Bind the source and sink to the channel
  44. a1.sources.r1.channels = c1
  45. a1.sinks.k1.channel = c1

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

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

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

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

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

查看日志变化

  1. [root@hadoop1 ~]# cd /home/tuzq/software/flumedata/
  2. [root@hadoop1 flumedata]# ls
  3. access.log error.log test.log
  4. [root@hadoop1 flumedata]# tail -f test.log
  5. 2017 06 13 星期二 22:02:22 CST
  6. 2017 06 13 星期二 22:02:24 CST
  7. 2017 06 13 星期二 22:02:26 CST
  8. 2017 06 13 星期二 22:02:28 CST
  9. 2017 06 13 星期二 22:02:30 CST
  10. 2017 06 13 星期二 22:02:32 CST

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

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

  1. [root@hadoop1 ~]# hdfs dfs -ls /
  2. Found 5 items
  3. drwxr-xr-x - root supergroup 0 2017-06-13 12:01 /40000
  4. drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume
  5. -rw-r--r-- 3 root supergroup 3719 2017-06-10 12:11 /kms.sh
  6. drwxrwxrwx - root supergroup 0 2017-06-10 22:06 /tmp
  7. drwxr-xr-x - root supergroup 0 2017-06-10 22:27 /user
  8. [root@hadoop1 ~]# hdfs dfs -ls /flume
  9. Found 1 items
  10. drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout
  11. [root@hadoop1 ~]# hdfs dfs -ls /flume/tailout
  12. Found 1 items
  13. drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13
  14. [root@hadoop1 ~]# hdfs dfs -ls /flume/tailout/17-06-13
  15. Found 4 items
  16. drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout/17-06-13/2201
  17. drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13/2202
  18. drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2203
  19. drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2204
  20. [root@hadoop1 ~]# hdfs dfs -ls /flume/tailout/17-06-13
  21. Found 5 items
  22. drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout/17-06-13/2201
  23. drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13/2202
  24. drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2203
  25. drwxr-xr-x - root supergroup 0 2017-06-13 22:05 /flume/tailout/17-06-13/2204
  26. drwxr-xr-x - root supergroup 0 2017-06-13 22:05 /flume/tailout/17-06-13/2205
  27. [root@hadoop1 /]# hdfs dfs -ls /flume/tailout/17-06-13
  28. Found 6 items
  29. drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout/17-06-13/2201
  30. drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13/2202
  31. drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2203
  32. drwxr-xr-x - root supergroup 0 2017-06-13 22:05 /flume/tailout/17-06-13/2204
  33. drwxr-xr-x - root supergroup 0 2017-06-13 22:06 /flume/tailout/17-06-13/2205
  34. drwxr-xr-x - root supergroup 0 2017-06-13 22:06 /flume/tailout/17-06-13/2206
  35. [root@hadoop1 /]

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

flume 增量上传日志文件到HDFS中的更多相关文章

  1. 利用Java API通过路径过滤上传多文件至HDFS

    在本地文件上传至HDFS过程中,很多情况下一个目录包含很多个文件,而我们需要对这些文件进行筛选,选出符合我们要求的文件,上传至HDFS.这时就需要我们用到文件模式. 在项目开始前,我们先掌握文件模式 ...

  2. 【转】Java IOUtils方式上传下载文件 on HDFS

    [From]https://www.cnblogs.com/areyouready/p/9795442.html package com.css.hdfs04; import java.io.File ...

  3. xutils工具上传日志文件--后台服务器的搭建

    在上一篇文章中使用xutils将手机上保存的日志上传到后台服务器中,现在我们来讲后台服务器是如何搭建的 后台服务器采用jsp+sevlet+mysql的框架 首先讲mysql数据库的表的建立 在fil ...

  4. Azure IoT Hub 十分钟入门系列 (4)- 实现从设备上传日志文件/图片到 Azure Storage

    本文主要分享一个案例: 10分钟内通过Device SDK上传文件到IoTHub B站视频:https://www.bilibili.com/video/av90224073/ 本文主要有如下内容: ...

  5. hadoop学习笔记(十):hdfs在命令行的基本操作命令(包括文件的上传和下载和hdfs中的文件的查看等)

    hdfs命令行 ()查看帮助 hdfs dfs -help ()查看当前目录信息 hdfs dfs -ls / ()上传文件 hdfs dfs -put /本地路径 /hdfs路径 ()剪切文件 hd ...

  6. xutils工具上传日志文件--使用https并且带进度条显示

    package logback.ecmapplication.cetcs.com.myapplication; import android.app.Activity; import android. ...

  7. xutils工具上传日志文件

    首先下载xutils java包: 添加到项目的工程中: 第二在新建一个类继承application package logback.ecmapplication.cetcs.com.myapplic ...

  8. 上传本地文件到HDFS

    源代码: import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hado ...

  9. Hadoop Shell命令(基于linux操作系统上传下载文件到hdfs文件系统基本命令学习)

    Apache-->hadoop的官网文档命令学习:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html FS Shell 调用文件系统( ...

随机推荐

  1. Ext.dom.Element 常用方法解析

    Ext.dom.Element 常用方法解析 Ext.Element,Ext.core.Elemen,Ext.dom.Element 这几个类都是一个类,在EXT当中给起了别名而已,这个类到作用主要是 ...

  2. WebStorm 7.0 支持更多的Web技术

    JetBrains刚刚发布了WebStorm 7.0 GA,支持EJS.Mustache.Handlebars.Web组件.Stylus.Karma.Istanbul.Compass,并增强了很多功能 ...

  3. Sql Over的用法

    转载自:http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html OVER(PARTITION BY)函数介绍 开窗函数 Oracle从 ...

  4. SpringCloud 详解配置刷新的原理 使用jasypt自动加解密后 无法使用 springcloud 中的自动刷新/refresh功能

    之所以会查找这篇文章,是因为要解决这样一个问题: 当我使用了jasypt进行配置文件加解密后,如果再使用refresh 去刷新配置,则自动加解密会失效. 原因分析:刷新不是我之前想象的直接调用conf ...

  5. headfirst 07

    WEB 不论你在web上做什么, 都离不开请求和响应. web请求作为某个用户交互的结果由web浏览器发送到web服务器. 在web服务器上会生成web响应并发回到web浏览器.整个过程可以总结为5步 ...

  6. webpack3--配置多入口和多出口

    上一篇我们稍微提到了webpack.config.js.今天主要来说下如何配置多入口,多出口. 我们之前写到的webpack.config.js,具体代码如下: module.exports = { ...

  7. C语言简明数据类型指南

    一.常用的数据类型 char:字符在计算机的存储器中以字符编码的形式保存,字符编码是一个数字,因此在计算机看来,A与数字65完全一样(65是A的ASCII码). int:如果要保存一个整数,通常可以使 ...

  8. Lucene系列五:Lucene索引详解(IndexWriter详解、Document详解、索引更新)

    一.IndexWriter详解 问题1:索引创建过程完成什么事? 分词.存储到反向索引中 1. 回顾Lucene架构图: 介绍我们编写的应用程序要完成数据的收集,再将数据以document的形式用lu ...

  9. android中清空一个表---类似truncate table 表名 这样的功能 android sqlite 清空数据库的某个表

    public void clearFeedTable(){ String sql = "DELETE FROM " + FEED_TABLE_NAME +";" ...

  10. Keystone-all 命令

    本文档介绍Icehouse版keystone-all命令 keystone-all命令在一个进程中同时启动服务和管理API,为openstack提供服务目录,授权和身份认证服务. 用法 $ keyst ...