1,上传jar包

2,解压

3,改名

4,更改配置文件

将template文件重镜像

root@Ubuntu-1:/usr/local/apache-flume/conf# cat flume-env.sh.template >flume-env.sh

在flume-env.sh文件中更改JAVA_HOME地址:

export JAVA_HOME=/usr/local/jdk1.8.0_91  //132和135中均是/usr/local/jdk1.7.0_79,不要混淆了

检查Flume是否安装成功

  flume-ng version
Flume 1.6.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: 2561a23240a71ba20bf288c7c2cda88f443c2080
Compiled by hshreedharan on Mon May 11 11:15:44 PDT 2015
From source with checksum b29e416802ce9ece3269d34233baf43f

成功

4, 使用

flume的特点:
  flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。
  flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。

flume的可恢复性:
  还是靠Channel。推荐使用FileChannel,事件持久化在本地文件系统里(性能较差)。

 flume的一些核心概念:

    • Agent        使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。
    • Client        生产数据,运行在一个独立的线程。
    • Source        从Client收集数据,传递给Channel。
    • Sink        从Channel收集数据,运行在一个独立线程。
    • Channel        连接 sources 和 sinks ,这个有点像一个队列。
    • Events        可以是日志记录、 avro 对象等。

Flume以agent为最小的独立运行单位。一个agent就是一个JVM。单agent由Source、Sink和Channel三大组件构成,如下图:

Flume的安装,配置及使用-LMLPHP

值得注意的是,Flume提供了大量内置的Source、Channel和Sink类型。不同类型的Source,Channel和Sink可以自由组合。组合方式基于用户设置的配置文件,非常灵活。比如:Channel可以把事件暂存在内存里,也可以持久化到本地硬盘上。Sink可以把日志写入HDFS, HBase,甚至是另外一个Source等等。Flume支持用户建立多级流,也就是说,多个agent可以协同工作,并且支持Fan-in、Fan-out、Contextual Routing、Backup Routes

Flume的安装,配置及使用-LMLPHP

创建conf文件,命名example.conf

内容:

# example.conf: A single-node Flume configuration

# Name the components on this agent

a1.sources = r1
a1.sinks = k1
a1.channels = c1 # Describe/configure the source a1.sources.r1.type = netcat
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 44444 # Describe the sink a1.sinks.k1.type = logger # 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

启动flume:

root@Ubuntu-:/usr/local/apache-flume#bin/flume -ng --conf conf/ --conf-file conf/example.conf --name a1 -Dflume.monitoring.type=http -Dflume.monitoring port= -Dflume.root.logger=INFO,console &

另外打开一个shell窗口,输入

telnet 0.0.0.0 

如果要关闭telnet窗口,用CTRL+] 命令,然后quit退出

------avro 将本地的文件传到flume

首先在131的conf文件下创建avro_source文件

内容如下:

agent1.channels = ch1
agent1.sources = avro-source1
agent1.sinks = log-sink1 # 定义channel
agent1.channels.ch1.type = memory
agent1.channels.ch1.capacity =
agent1.channels.ch1.transactionCapacity = # 定义source
agent1.sources.avro-source1.channels = ch1
agent1.sources.avro-source1.type = avro
agent1.sources.avro-source1.bind = 0.0.0.0
agent1.sources.avro-source1.port = # 定义sink
agent1.sinks.log-sink1.channel = ch1
agent1.sinks.log-sink1.type = logger

在131中启动flume进程:

 bin/flume-ng agent --conf conf/ --conf-file conf/avro_source.conf  --name agent1 -Dflume.root.logger=INFO,console &

在132中,我将131的flume文件拷到了132中,并在132中创建一个avro.log文件,其中有一些数据,在132中执行

bin/flume -ng avro-client --host 192.168.22.131 --port  --filename /usr/local/apache-flume/logs/avro.log

这样便将132的本地文件中的数据打到了131中

----------------------------------------------------------------------------------------------------------------------------------q

切记:!!我131中的JDK后来改成了1.8,但是132中一直是1.7版本的,所以不要混淆了

05-08 14:51