flume总结

Flume的安装与部署

一、Flume的官方网站在哪里?
  http://flume.apache.org/
二、Flume部署与测试
2.1 JDK安装
2.2 Flume安装
解压:# tar -zxvf apache-flume-1.5.0-bin.tar.gz
# tar -zxvf apache-flume-1.5.0-src.tar.gz
将apache-flume-1.5.0-src文件夹中的内容全部复制到apache-flume-1.5.0-bin文件中
# cp -ri apache-flume-1.5.0-src/* apache-flume-1.5.0-bin
2.3 环境变量设置:# vim /root/.bash_profile
环境变量生效:# source /root/.bash_profile
2.4 配置文件设置
2.4.1 flume-env.sh
修改 flume-env.sh 配置文件,主要是JAVA_HOME变量设置
验证是否安装成功:flume-ng version
2.4.2 建立配置文件example
实现Flume监听文件夹 ,数据写入文件夹内时将数据汇聚到HDFS
1)首先我们建立一个/home/xdl/apache-flume-1.6.0-bin/conf/example.conf文件
2)编写配置文件
具体内容如下:

# Name the components on this agent
agent1.sources = source1
agent1.channels = channel1
agent1.sinks = sink1

# Describe/configure the source 
agent1.sources.source1.type = spooldir
agent1.sources.source1.spoolDir=/root/flume/aboutyunlog

# 配置往channel1传输数据
agent1.sources.source1.channels = channel1
agent1.sources.source1.fileHeader=false

# Describe the sink
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path=hdfs://node21:9000/flume/aboutyunlog
agent1.sinks.sink1.hdfs.fileType=DataStream
agent1.sinks.sink1.writeFormat=TEXT
# hdfs sink间隔多长将临时文件滚动成最终目标文件,单位:秒;
agent1.sinks.sink1.hdfs.rollInterval=4
#配置从channel1接收数据
agent1.sinks.sink1.channel = channel1

# Use a channel which buffers events inmemory
agent1.channels.channel1.type = file
agent1.channels.channel1.checkpointDir=/root/flume/aboutyun_check
agent1.channels.channel1.dataDirs=/root/flume/aboutyun_data

注意:Spooling Directory是监控指定文件夹中新文件的变化,一旦新文件出现,就解析该文件内容,然后写入到channel。写入完成后,标记该文件已完成或者删除该文件。
3)编写shell脚本
注意:
a.让日志收集任务以后后台进程运行,且将运行日志重定向到 ./flume.log保存。
b.-Dflume.root.logger=DEBUG,console > ./fluem.log 2>&1 &是输出调试信息,也可以在配置文件中配置。步骤如下:

 # cd /root/software/apache-flume-1.5.0-bin/conf/
 # vim log4j.properties

注释掉flume.root.logger=INFO,LOGFILE选择flume.root.logger=
DEBUG,console把日志打印到控制台。

4)验证

查看进程是否启动成功

这时我们可以查看一下flume.log日志文件,查看一下里面的内容,看看程序有无出错。

往Flume监控的目录/root/flume/aboutyunlog下创建文件

查看成功上传到HDFS中的文件

2.5 异常处理
flume总结

原因:这是因为在配置文件example中设置了
agent1.channels.channel1.capacity = 100
解决方法:只需把这行去掉即可。
也可以同时设定:
#channel的event个数
agent1.channels.channel1.capacity=1000
#事务event个数
agent1.channels.channel1.transactionCapacity=100

Flume简介

Flume是什么

  • 由Cloudera公司开源
  • 分布式、可靠、高可用的海量日志采集系统
  • 数据源可定制,可扩展
  • 数据存储系统可定制,可扩展
  • 中间件:屏蔽了数据源和数据存储系统的异构性

Flume NG特点

NG只有一种角色的节点:代理节点(agent)
没有collector、master节点。这是核心组件最核心的变化
agent节点的组成也发生了变化,脱离了zookeeper

Flume NG架构的优势

NG 在核心组件上进行了大规模的调整
大大降低了对用户的要求
用户也不再纠结于 OG 中的模糊概念
有利于 Flume 和其他技术、hadoop 周边组件的整合
在功能上更加强大、可扩展性更高

Flume NG核心概念

Event

Event是Flume数据传输的基本单元
Flume以事件的形式将数据从源头传送到最终的目的地
Event由可选的header和载有数据的一个byte array构成
载有的数据对flume是不透明的
Header是容纳了key-value字符串对的无序集合,key在集合内是唯一的。
Header可以在上下文路由中使用扩展

Client

Client是一个将原始log包装成events并且发送它们到一个或多个agent的实体。
目的是从数据源系统中解耦Flume
在flume的拓扑结构中不是必须的
Client实例
Flume log4j Appender
可以使用Client SDK (org.apache.flume.api)定制特定的Client

Agent

一个Agent包含Source, Channel, Sink和其他组件
它利用这些组件将events从一个节点传输到另一个节点或最终目的地
agent是flume流的基础部分
flume为这些组件提供了配置、生命周期管理、监控支持

  1. Agent之Source:
    Source负责接收event或通过特殊机制产生event,并将events批量的放到一个或多个Channel。
    包含event驱动和轮询2种类型 不同类型的Source: 与系统集成的Source: Syslog,
    Netcat、监测目录池、tcpsyslog 自动生成事件的Source: Exec 用于Agent和Agent之间通信的IPC
    Source: Avro、Thrift Source必须至少和一个channel关联
  2. Agent之Channel: Channel位于Source和Sink之间,用于缓存进来的event;
    当Sink成功的将event发送到下一个的channel或最终目的,event从Channel移除。
    不同的Channel提供的持久化水平也是不一样的: Memory Channel: volatile(不稳定的) File
    Channel: 基于WAL(预写式日志Write-Ahead Logging)实现 JDBC Channel:
    基于嵌入Database实现 Channel支持事务,提供较弱的顺序保证 可以和任何数量的Source和Sink工作
  3. Agent之Sink: Sink负责将event传输到下一跳或最终目的,成功完成后将event从channel移除。
    不同类型的Sink: 存储event到最终目的的终端Sink. 比如: HDFS, HBase 自动消耗的Sink. 比如: Null
    Sink 用于Agent间通信的IPC sink: Avro 必须作用于一个确切的channel
  4. 其他几个组件
    Interceptor: 作用于Source,按照预设的顺序在必要地方装饰和过滤events Channel 作用于Source,按照预设的顺序在必 要地方装饰和过滤events Channel
    Selector : 允许Source基于预设的标准,从所有Channel中,选择一个或多个Channel
    Sink Processor : 多个Sink可以构成一个Sink Group Sink Processor可以通过组中所有Sink实现负载均衡
    也可以在一个Sink失败时转移到另一个