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中。

原文地址:https://www.cnblogs.com/zxf330301/p/8317371.html

时间: 2024-11-05 18:39:00

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

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

在本地文件上传至HDFS过程中,很多情况下一个目录包含很多个文件,而我们需要对这些文件进行筛选,选出符合我们要求的文件,上传至HDFS.这时就需要我们用到文件模式. 在项目开始前,我们先掌握文件模式 1.文件模式 在某个单一操作中处理一系列文件是很常见的.例如一个日志处理的MapReduce作业可能要分析一个月的日志量.如果一个文件一个文件或者一个目录一个目录的声明那就太麻烦了,我们可以使用通配符(wild card)来匹配多个文件(这个操作也叫做globbing). Hadoop提供了两种方法

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

本文主要分享一个案例: 10分钟内通过Device SDK上传文件到IoTHub B站视频:https://www.bilibili.com/video/av90224073/ 本文主要有如下内容: 1. 了解IoT Hub中文件存储在了哪里 2. 使用Node.js Device SDK 上传TXT文件 3. 在Storage中查看IOT设备上传的文件 图文内容: 本案例参考:https://docs.azure.cn/zh-cn/iot-hub/iot-hub-node-node-file-

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

package logback.ecmapplication.cetcs.com.myapplication; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.

客户端上传日志文件时报错

今天客户端在上报日志文件时报了一个413错误[2017-07-25 13:31:55][Debug][..\BkLogReport\bkupload.cpp][181][void __thiscall BkUpload::onHttpFinished(void)]data: "<html>\r\n<head><title>413 Request Entity Too Large</title></head>\r\n<body bg

在windows中使用xshell上传下载文件到linux中

使用centos的文件上传下载小工具,可以快速的帮助我们从本地上传文件至服务器,或者是从服务器下载文件至本地. 工具/原料 Centos xshell 方法/步骤 首先使用xshell 连接上服务器.新建一个连接,分别输入用户名和密码,再输入主机IP地址及端口号,选择ssh连接方式. 在连接属性中指定接收文件的文件夹 配置好连接属性之后连接上服务器 文件上传命令为rz,下载命令为sz,但是Linux可能没有安装该上传工具,所以输入rz和sz的时候会提示找不到该命令.所以需要需要使用命令安装下该工

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

Apache-->hadoop的官网文档命令学习:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html FS Shell 调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式. 所有的的FS shell命令使用URI路径作为参数.URI格式是scheme://authority/path.对HDFS文件系统,scheme是hdfs,对本地文件系统,scheme是file.其中scheme和aut

大数据技术之_18_大数据离线平台_02_Nginx+Mysql+数据收集+Web 工程 JS/JAVA SDK 讲解+Flume 故障后-如何手动上传 Nginx 日志文件至 HDFS 上

十一.Nginx11.1.介绍11.2.常见其他 Web 服务器11.3.版本11.4.Nginx 安装11.5.目录结构11.6.操作命令十二.Mysql12.1.介绍12.2.关系型数据库(SQL)种类12.3.特征12.4.术语12.4.与非关系型数据库比较(Not Only SQL)12.4.1.种类12.4.2.特征12.4.3.总结十三.数据收集13.1.收集方式13.2.数据的事件类型13.2.1.Launch 事件13.2.2.PageView 事件13.3.Nginx 日志收集

大数据学习——点击流日志每天都10T,在业务应用服务器上,需要准实时上传至(Hadoop HDFS)上

点击流日志每天都10T,在业务应用服务器上,需要准实时上传至(Hadoop HDFS)上 1需求说明 点击流日志每天都10T,在业务应用服务器上,需要准实时上传至(Hadoop HDFS)上 2需求分析 一般上传文件都是在凌晨24点操作,由于很多种类的业务数据都要在晚上进行传输,为了减轻服务器的压力,避开高峰期. 如果需要伪实时的上传,则采用定时上传的方式 3技术分析 HDFS SHELL:  hadoop fs  –put   xxxx.log  /data    还可以使用 Java Api

Eclipse 上传 删除 下载 分析 hdfs 上的文件

本篇讲解如何通过Eclipse 编写代码去操作分析hdfs 上的文件. 1.在eclipse 下新建Map/Reduce Project项目.如图:  项目建好后,会默认加载一系列相应的jar包. 下面还有很多包. 2.我们新建Java 类就可以了.代码如下: package org.hadoop.examples; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOExcep