flume的概念和基本使用

原创 2017年01月02日 23:36:56

一、flume概述

    flume是一个分布式的、可靠的、可用的以及高效的对大量数据日志进行收集、聚集、移动信息的服务。flume是一个可容错的、健壮的并且非常简单的流式数据框架,他只需要简单配置source、channel以及sink后,编写一条命令就可实时采集数据。
    agent的三个组成部分为:source、channel和sink。
    source:用于采集数据,source是产生数据流的地方,同时,source会将产生的数据传输到channel上。
    channel:连接source和sink,类似队列
    sink:从channel收集数据,将数据写到目标源,可以是下一个flume的source,或者是hdfs或者hbase等。

二、flume使用版本

        笔者使用的hadoop版本是cdh-5.3.6,所以选择的flume对应版本是flume-ng-1.5.0-cdh.5.3.6,这里简单介绍下,flume大的版本可以分为flume-og和flume-ng,其中og中的o笔者以前以为是old的意思,但是看了官方介绍是orginal的意思,ng的n也不是new 的意思,而是next(下一代)的意思,两个版本的差别还是比较大的。其中0.9x版本以前是flume-og,1.x以后的版本是flume-ng。

三、flume-nge的使用

  1. 基本使用:

    基本使用就是简单的从source读消息到sink
    flume基本使用的简单架构如下:
    

    这里写图片描述

场景1:从本地文件到本地文件

  source:hive.log (某个日志文件)
  channel:mem(内存通道)
  sink:log(另一个日志文件)

  配置文件:

这里写图片描述

  运行后:

这里写图片描述

场景2:从本地文件到本地文件,使用file channel

source:hive.log (某个日志文件)
channel:filechannel
sink:log(另一个日志文件)

配置文件:

这里写图片描述

运行:

这里写图片描述

场景3:从本地文件到hdfs

source:hive.log (某个日志文件)
channel:mem(内存通道)
sink:hdfs
同时,需要把hadoop下面的commons-configuration-1.6.jar、hadoop-auth-2.5.0-cdh5.3.6.jar、hadoop-common-2.5.0-cdh5.3.6.jar和hadoop-hdfs-2.5.0-cdh5.3.6.jar拷贝到flume_home\lib下面
配置文件:

这里写图片描述

运行结果不再赘述。

四、flume在企业中使用的一些问题和思考

1.flume向hdfs传输数据时,有可能产生很多小的文件,这在企业中肯定是不行的,hdfs要求存储文件越大越好,至少是128M,如何设置flume中hdfs的sink?

2.使用flume把数据导入hive表中,如果hive使用的是分区表,比如按照年、月、日分区,那么如何把每天的数据导入到对应的日期目录下,此时如何配置flume中的hdfs的sink?

3.如何在指定的文件夹过滤掉一些不需要的文件,例如以xxx开头或者.xxx结尾的文件?

解决上述几个问题就需要了解sink的一些其他配置,
1) 在sink中,通过sourceName.sinks.sinkName.hdfs.rollSize可以设定输出文件的最大大小,例如我们可以设置10k,那么配置就是:
sourceName.sinks.sinkName.hdfs.rollSize=102400

2)在sink中,可以通过系统时间来进行动态文件夹的生成,例如我们期望按照每小时来分区,那么分区目录是:
2014-10-12/01
          /02
          ...
          /24
该需求可以通过sourceName.sinks.sinkName.path参数来配置,那么上面需求的配置就是:
sourceName.sinks.sinkName.path=/flume/events/%y-%m-%d/%H

(注意:,其中1和2会有冲突,例如我们设置文件大小为128M,但是我们分区时按照分钟来分区,那么有可能1分钟的数据没有128M,那么文件大小肯定不会是128M)

3)如果期望过滤掉指定文件名的文件,那需要通过配置source中的sourceName.sinks.sinkName.ignorePattern来设置,如果期望过滤掉.tmp结尾的文件,那么配置如下:
sourceName.sinks.sinkName.ignorePattern=([^]*\.tmp)

那么最终的flume的配置文件如下:

这里写图片描述

flume的基本使用就介绍到这里。
版权声明:本文为博主原创文章,未经博主允许不得转载。

Flume使用简介

flume是分布式的日志收集系统,把收集来的数据传送到目的地去。 flume里面有个核心概念,叫做agent。agent是一个java进程,运行在日志收集节点。 agent里面包含3个核心组件:sou...
  • A632189007
  • A632189007
  • 2017年07月07日 11:50
  • 298

Flume学习笔记(一)安装与简单使用

本文环境如下: 操作系统:CentOS 7.2.1511 64位 Flume版本:1.6.0 1. 系统需求Flume需要Java 1.6及以上(推荐1.7),对Agent监控目录的读写权...
  • Lnho2015
  • Lnho2015
  • 2016年07月26日 13:56
  • 10383

flume使用详解

引言 Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。 Fl...
  • jiangsanfeng1111
  • jiangsanfeng1111
  • 2016年11月25日 17:57
  • 1287

flume学习(四):Flume Interceptors的使用

对于flume拦截器,我的理解是:
  • xiao_jun_0820
  • xiao_jun_0820
  • 2014年07月25日 11:43
  • 25128

Flume初介绍和命令行使用

Flume:cloudera提供的高可用的、高可靠的、分布式的海量日志采集、聚合、和传输系统。Flume 的设计目标: 可靠性:当节点出现故障时,日志能够被传送到其他节点而不会丢失。 flume提供...
  • beidiqiuren
  • beidiqiuren
  • 2016年06月30日 16:51
  • 3193

Flume系统搭建和使用的一些经验总结-搭建篇

对于很多公司来说,日志的收集和集中管理是一个必然要经历的阶段。我们公司在经历了一拖再拖之后,终于不得不开始搭建日志收集系统了。 对于日志收集系统,我们的首选就是Flume。为何这么坚决呢,难道没有其他...
  • qsc0624
  • qsc0624
  • 2017年01月13日 20:12
  • 744

Flume架构以及应用介绍

在具体介绍本文内容之前,先给大家看一下Hadoop业务的整体开发流程: 从Hadoop的业务开发流程图中可以看出,在大数据的业务处理过程中,对于数据的采集是十分重要的一步,也是不可避...
  • a2011480169
  • a2011480169
  • 2016年05月31日 12:35
  • 69009

flume使用

flume简单总结 1:flume中 在同一个agent中从source到channel,从channel到sink每一步都有类似于事务的机制进行保障。在多个连起来的agent中,第一个agent...
  • pengshuai128
  • pengshuai128
  • 2017年04月25日 15:22
  • 136

flume学习之一 是什么,主要应用在什么场景

flume 是什么,主要应用在什么场景, 特点
  • Love_JavaProgram
  • Love_JavaProgram
  • 2016年03月22日 19:03
  • 2783

【Flume】flume ng 1.6 做了哪些变化

依旧和大家一起看一下官网的内容: http://flume.apache.org/ ·增加了apache kafka的sink和source两大组件 ·增加了一个新的channel—...
  • chiweitree
  • chiweitree
  • 2015年06月16日 17:27
  • 972
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:flume的概念和基本使用
举报原因:
原因补充:

(最多只允许输入30个字)